apache storm笔记

来源:互联网 发布:甜甜圈烤机软件 编辑:程序博客网 时间:2024/05/21 22:55
storm 开源的、分布式、流式计算系统

概念
Topologies
Streams
Spouts
Bolts
Stream groupings
Reliability
Tasks
Workers
Configuration

storm和hadoop表面上类似,hadoop运行的是MapReduce job,Storm上是topology,不过MapReduce最终会结束,而topology则不会,除非手动kill掉



1、搭建Zookeeper集群;

配置jdk

export JAVA_HOME=/usr/local/src/jdk1.8.0_20
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

2解压zookeeper,配置zoo.cfg
tickTime=2000  (单位毫秒)
initLimit=10    
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=82master:2888:3888 
server.2=83work1:2888:3888
(
initLimit:Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许FollowerinitLimit时间内完成这个工作。具体为n*tickTime

syncLimit:在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果Leader发出心跳包在syncLimit之后,还没有从Follower那里收到响应,那么就认为这个Follower已经不在线了。具体为n*tickTime

zookeeper完全分布部署后会有一个follower,多个leader,followe与leader通过配置文件中的第二个端口通信,当follower失效后,会通过第三个端口通信选举新的follower出来

dataDir:日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。 


注意在dataDir下面要touch一个myid,里面写上server.n的n

关防火墙,selinux

hosts里面写上对应的信息

)

3启动bin/zkServer.sh start(注意zookeeper是快速失败的,有异常会立马退出,要注意啊,最好写shel监控下)

日志默认是zookeeper.out,可以修改log4j.properties和zkEnv.sh中的zookeeper.root.logger=INFO, CONSOLE  为zookeeper.root.logger=INFO, ROLLINGFILE,重启服务即可自生产log4j.properties自定义的日志文件






在Storm的集群里面有两种节点: 控制节点(master node)和工作节点(worker node)。

控制节点上面运行一个叫Nimbus后台程序,它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分发代码,分配计算任务给机器, 并且监控状态。

每一个工作节点上面运行一个叫做Supervisor的节点。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。

Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。另外,Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的。所有的状态要么在zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。


安装Storm依赖库; (0.9版本后zeromq和jzmq可以不再安装,直接用storm集成的netty)

yum groupinstall 'Development Tools'

1编译安装ZeroMQ

2安装JZMQ

./autogen.sh

./configure

make

报错

Noruletomaketarget `classdist_noinst.stamp', needed by `org/zeromq/ZMQ.class touch src/classdist_noinst.stamp

No rule to make target `org/zeromq/ZMQ$Context.class 到 jzmq/src/org/zeromq中手工编译java代码 javac *.java

make install


解压安装包并修改storm.yaml配置文件;(注意开头的和冒号后面都要有空格!!!)

 storm.zookeeper.servers:

     - "82master"
     - "83work1"
 nimbus.host: "82master"
 storm.local.dir: "/storm/workdir"

 supervisor.slots.ports:

 - 6700

 - 6701

 - 6702

 - 6703


(配置netty)
storm.messaging.transport: "backtype.storm.messaging.netty.Context" --指定传输协议
storm.messaging.netty.server_worker_threads: 1   --指定netty服务器工作线程数量
storm.messaging.netty.client_worker_threads: 1   --指定netty客户端工作线程数量
storm.messaging.netty.buffer_size: 5242880    --指定netty缓存大小
storm.messaging.netty.max_retries: 100   --指定最大重试次数
storm.messaging.netty.max_wait_ms: 1000  --指定最大等待时间(毫秒)
storm.messaging.netty.min_wait_ms: 100   --指定最小等待时间(毫秒)

5、启动Storm各个后台进程。

master节点运行bin/storm nimbus >/dev/null 2>&1 &
work节点运行bin/storm supervisor >/dev/null 2>&1 &

UI要在master上运行bin/storm ui >/dev/null 2>&1 &
web访问http://{nimbus host}:8080

work节点启动logviewer,ui上就可以直接操作了
bin/storm logviewer
storm的启动交给supervisor,后台启动的命令实际没有作用




0 0
原创粉丝点击