本文介绍linux环境下storm运行环境的搭建。由于条件有限,安装的storm运行在单机模式下,即主从节点都在同一台机器上,zookeeper也在同一台机器上。
环境:
OS:Red Hat Enterprise Linux Server release 6.3 (Santiago)
2G内存,50G存储的虚拟机
虚拟机通过网络桥接和实体机相连
所需基础软件:
1. jdk(建议1.7及以上)
2. zookeeper(提供分布式集群的协同)
3. Zeromq(storm默认的消息队列库)
4. Jzmq(zreomq的java)
5. Storm(本文apache-storm-1.0.2.tar.gz)
安装前的一些准备
修改主机名(例如将hostname修改为stormnode)
vim /etc/sysconfig/network //编辑主机名为 stormnode
hostname stormnode //使用hostname命令修改主机名,并立即生效
vim /etc/hosts //修改ip地址和主机名的映射关系
可以只保留如下配置127.0.0.1 localhost192.168.1.100 stormnode //192.168.1.100是本机的静态IP地址
- 1
- 2
- 3
- 4
- 5
- 6
关闭防火墙
service iptables stop //关闭防火墙服务
chkconfig iptables off //设置系统重启时默认不启动防火墙服务
- 1
- 2
PS:本文只使用到一台机器,如果要使用多台机器组成的集群,那么可以参照上述依次修改主机名,并在每台机器节点的/etc/hosts中都加上所有节点的ip地址到hostname的对应关系。并且通过ssh-kegen和ssh-copy-id 建立主节点(master)到其余工作节点(worker)的信任。如果按照集群,还是通过编写自动化脚本来吧。
关于jdk,zookeeper,zeromq,以及jzmq的安装在此不再进行详述(可参考文献[2-3]),重点介绍安装过程中可能遇到问题,以及storm的安装。安装过程以root用户进行安装。
安装jzmq时,使用make进行编译时遇到如下错误
Event.cpp: In function ‘_jobject* Java_org_zeromq_ZMQ_00024Event_recv(JNIEnv*, _jclass*, jlong, jint)’:
Event.cpp:60: error: ‘zmq_event_t’ was not declared in this scope
Event.cpp:60: error: expected ‘;’ before ‘event’
Event.cpp:72: error: ‘event’ was not declared in this scope
make[2]: *** [libjzmq_la-Event.lo] Error 1
make[2]: Leaving directory `/home/jzmq-3.1.0/src/main/c++'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/jzmq-3.1.0/src/main/c++'
make: *** [all-recursive] Error 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
解决方法是更换其他版本的安装包,或者修改. /src/main/c++/ Event.cpp(https://github.com/zeromq/jzmq/pull/354/commits/eb40d6db43ce3545e623dad6cc6721a90885b5ba)
Tips:对于zeromq和jzmq,默认安装到/usr/local/目录下,可以通过修改当前用户的环境变量来加载一些必要的可执行文件和系统默认查找库文件的路径
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/bin:
export PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libsource ~/.bash_profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Storm的安装(安装包位于/home目录下,并即将安装到/home目录下)
tar -zxvf apache-storm-1.0.2.tar.gz
ln –sf apache-storm-1.0.2 storm
修改当前用户的环境变量,新增storm的环境配置
vim ~/.bash_profileSTORM_HOME=/home/storm
PATH=$PATH:$HOME/bin:/usr/local/bin:$STORM_HOME/bin
export STORM_HOMEsource ~/.bash_profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
修改conf/storm.yaml
storm.zookeeper.servers:- "stormnode
nimbus.seeds:- "stormnode"
ui.port: 8080drpc.servers:- "stormnode"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
启动storm
启动storm前需先启动zookeeper
storm nimbus & //主节点的nimbus守护进程
storm ui & //storm的UI界面
storm supervisor & //工作节点的守护进程
storm drpc & //drpc守护
storm logviewer & //logviewer是storm新增的用来调试和监视拓扑的进程,可以容易访问一个指定worker节点的日志,只需在storm的UI界面中点击worker的port即可。
- 1
- 2
- 3
- 4
- 5
在启动storm nimbus时如果发生以下错误:
Caused by: while scanning a simple keyin 'reader', line 25, column 1:nimbus.seeds:" stormnode "^
could not found expected ':'in 'reader', line 27, column 1:ui.port: 8080
- 1
- 2
- 3
- 4
- 5
- 6
- 7
那么应该检查storm.yaml的配置,yaml文件的格式(http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt)不对会导致上述读取配置错误
当所有进程都正常启动后,访问 http://{IP}:8080,即可查看storm的ui
1.赵必夏,程丽明. 从零开始学Storm(第二版).清华大学出版社,2016.
2.Kafka基本概念及环境搭建. http://blog.csdn.net/cjf_wei/article/details/54974462
3.zookeeper学习笔记.http://blog.csdn.net/cjf_wei/article/details/63690180