CentOS环境安装STORM
安装的版本
storm-0.8.2
相关依赖的版本
zookeeper-3.4.5.tar.gz
zeromq-2.1.7.tar.gz
jzmq.tar.gz
安装zoopkeeper集群
- zookeeper服务集群不小于三个节点
安装jdk
参考了 [CentOS-6.3安装配置JDK-7] <http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html>
安装zookeeper相关的软件
yum install gcc gcc-c++ autoconf automake python libtool libuuid-devel uuid-devel wget
解压zookeeper
执行命令tar –zvxf zookeeper.tar.gz
设置环境变量
/etc/profile文件 export JAVA_HOME=/usr/local/jdk export ZOOKEEPER_HOME=/usr/local/zookeeper zookeeper的目录位置 export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
在解压后的zookeeper的目录下进入conf目录修改配置文件
更名操作:mv zoo_sample.cfg zoo.cfg
编辑zoo.cfg (vi zoo.cfg)
修改 dataDir=/usr/local/zookeeper/data/ 新增 server.0=hadoop0:2888:3888 server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888 这里hadoop0,hadoop1,hadoop2分别为三台主机的host,或者ip
创建文件夹mkdir /usr/local/zookeeper/data
这里创建就是上一步zoo.cfg中dataDir的位置
在data目录下,创建文件myid,值为0 (0用来标识hadoop0这台机器的zookeeper )
值为zoo.cfg中server.id = host:port:port中的id 所以同理,hadoop1机器中的值为1,hadoop2中值为2
同样的配置其他两台机器
注意 其他机器配置中data目录下的myid值不一样
启动
zkServer.sh start
检查结果
三台集群机器上全部启动zookeeper后 telnet 192.168.121.138 2181(如果出现telnet错位,可以尝试在目标机器上执行iptables -F) 然后输入stat 有下图中结果则成功
- 安装zookeeper参考 zookeeper集群部署
- 安装zookeeper视频参考 ZooKeeper 环境搭建
安装 ZeroMQ
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make install
安装JZMQ
unzip jzmq.tar.gz
cd jzmq
./autogen.sh
./configure
make
sudo make install
安装java和python
配置STORM
- 解压到安装目录
配置环境变量
/etc/profile文件 export STORM_HOME=/usr/local/program/stor export PATH=$STORM_HOME/bin:$PATH
修改conf/storm.yaml文件
注意: 这个配置文件前面一定要有一个空格 然后像servers,ports这种一个列表的配置一定要是一个list的形式 storm.zookeeper.servers: Storm集群使用的Zookeeper集群地址 storm.local.dir: Nimbus和Supervisor进程用于存储少量状态 nimbus.host: Storm集群Nimbus机器地址 supervisor.slots.ports: 对于每个Supervisor工作节点 storm.zookeeper.servers: - "192.168.121.138" - "192.168.121.219" - "192.168.121.220" storm.local.dir: "/usr/local/storm/data" nimbus.host: "192.168.121.138" supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703 - 6704
在各个节点启动storm
注意启动前,每个机器都要设有host。如果Supervisor,Nimbus的host全是localhost,或者127.0.0.1那么在执行topology执行会由问题 主控节点Nimbus: 运行 storm nimbus & 工作节点Supervisor : 运行 storm supervisor &
启动storm ui
在主控节点上执行 storm ui &
如下则是成功,可以观察到有两个supervisor
提交topology
首先将工程打包后发到nimbus机器上 然后执行命令如下: storm jar storm_test_2-0.0.1-SNAPSHOT.jar storm.TopologyMain arg storm_test_2-0.0.1-SNAPSHOT.jar 是传上去jar包的名称 storm.TopologyMain 是要执行main函数的class arg是传进去的参数
在storm ui界面可以看到成功提交
可以在各个机器上查看到log的数据
- 可以参考的安装文档
- Twitter Storm: 搭建storm集群
- Storm集群部署
- Storm 入门中文版(极客学院wiki)
- 视频教程,安转在storm入门1的中间部分Storm应用开发系列从入门到精通
另外遇到的问题:
出现storm ui和实际supervisor数量不匹配的问题
启动supervisor后,过一会(几分钟)就会出现自动关闭,进程中出现"Exit 20 storm supervisor”
这两个问题都可以将storm.yaml中配置的storm.local.dir目录中的supervisor和workers两个目录删除掉。然后再重新启动,就可以成功了
而具体解释参考:[storm中supervisor的启动exit问题](http://blog.csdn.net/shuaiokshuai/article/details/38296437)
storm 提交topology后,在主page中可以看到,但点击进入topology Page却报错
topology的名称可以有空格,但用ui查阅时却会有错
所以java代码中注意
StormSubmitter.submitTopology("test_storm_2", conf, builder.createTopology());
这里的name不要有空格