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
允许
Follower
在
initLimit
时间内完成这个工作。
具体为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
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 --指定最小等待时间(毫秒)
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,后台启动的命令实际没有作用