Storm 0.9单机版安装


“Storm 0.9.0.1版本的第一亮点是引入了netty transport。Storm网络传输机制实现可插拔形式,当前包含两种方式:原来的0mq传输,以及新的netty实现;在早期版本中(0.9.x之前的版本),Storm只支持0mq传输,由于0MQ是一个本地库(native library),对平台的依赖性较高,要完全正确安装还是有一定挑战性。而且版本之间的差异也比较大;Netty Transport提供了纯JAVA的替代方案,消除了Storm的本地库依赖,且比0MQ的网络传输性能快一倍以上;

“Storm 0.9.0.1版本提供了有助于调试和检测拓扑结构的新特性:logviewer(守护进程名)

你现在可以在Storm UI通过点击相应的Woker来查看对应的工作日志。有点类似于hadoop的那种日志查看机制。

安全性、认证以及授权已经并将继续成为将来的重要特点重点领域。Storm 0.9.0.1版本引入了一个可插拔的序列化元组API以及实现一个基于blowfish加密方法对敏感数据进行加密的用例。

1 依赖包安装

Storm依赖包有JDK, Python和Zookeeper。

1.1 JDK和Python

JDK和Python非常简单,在Yum库中就有安装包。

> yum install java-1.7.0-openjdk.i386

> yum install python.i386

1.2 ZooKeeper

Zookeeper需要手动下载安装。首先下载解压:

> wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

> tar -xzvf zookeeper-3.4.6.tar.gz

> chown -R root:root zookeeper-3.4.6

然后配置:

> cd zookeeper-3.4.6

> cp conf/zoo_sample.cfg conf/zoo.cfg

> export ZOOKEEPER_HOME=/usr/local/src/zookeeper-3.4.5

> export PATH=$ZOOKEEPER_HOME/bin:$PATH

最后启动服务器,并用客户端连上去测试:

> bin/zkServer.sh start

> bin/zkCli.sh -server 127.0.0.1:2181

2 Storm安装

> wget

http://mirrors.hust.edu.cn/apache/incubator/storm/apache-storm-0.9.2-incubating/apache-storm-0.9.2-incubating.tar.gz

> tar -xzvf apache-storm-0.9.2-incubating.tar.gz

在/conf/storm.yaml中配置Storm为单机模式,并且通过Netty通信(Storm 0.9新功能,否则还要按照ZeroMQ):

storm.zookeeper.servers:

 

storm.zookeeper.servers:
- "172.18.89.153"
nimbus.host: "172.18.89.153"
storm.zookeeper.port: 2181

启动Storm所有后台服务:

> bin/storm nimbus >/dev/null 2>&1 &

> bin/storm supervisor>/dev/null 2>&1 &

> bin/storm ui >/dev/null 2>&1 &

> bin/storm logviewer > /dev/null 2>&1 &

正常的访问日志应该是这样的:

[root@centos apache-storm-0.9.3]# tailf logs/nimbus.log
2015-01-30T16:36:26.396+0800 o.a.s.z.ClientCnxn [INFO] EventThread shut down
2015-01-30T16:36:26.398+0800 b.s.u.StormBoundedExponentialBackoffRetry [INFO] The baseSleepTimeMs [1000] the maxSleepTimeMs [30000] the maxRetries [5]
2015-01-30T16:36:26.399+0800 o.a.s.c.f.i.CuratorFrameworkImpl [INFO] Starting
2015-01-30T16:36:26.400+0800 o.a.s.z.ZooKeeper [INFO] Initiating client connection, connectString=172.18.89.153:2181/storm sessionTimeout=20000 watcher=org.apache.storm.curator.ConnectionState@34aab7bc
2015-01-30T16:36:26.401+0800 o.a.s.z.ClientCnxn [INFO] Opening socket connection to server 172.18.89.153/172.18.89.153:2181. Will not attempt to authenticate using SASL (unknown error)
2015-01-30T16:36:26.401+0800 o.a.s.z.ClientCnxn [INFO] Socket connection established to 172.18.89.153/172.18.89.153:2181, initiating session
2015-01-30T16:36:26.404+0800 o.a.s.z.ClientCnxn [INFO] Session establishment complete on server 172.18.89.153/172.18.89.153:2181, sessionid = 0x14b39e8e9060003, negotiated timeout = 20000
2015-01-30T16:36:26.405+0800 o.a.s.c.f.s.ConnectionStateManager [INFO] State change: CONNECTED
2015-01-30T16:36:26.467+0800 b.s.d.nimbus [INFO] Starting Nimbus server...
2015-01-30T16:44:29.737+0800 o.a.t.s.TNonblockingServer [ERROR] Read a frame size of 1195725856, which is bigger than the maximum allowable buffer size for ALL connections.

访问UI http://localhost:8080 就能看到监控页面了。

QQ截图20150130165926

3 常见问题

3.1 Python版本问题

注意:yum install的可能是低版本的Python,像我的CentOS 5.5给我装的就是2.3。后面启动storm时直接就报错了。可以使用这种方法安全地升级Python到2.7:

> wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

> cd Python-2.7.8

> ./configure –prefix=/usr/local/python

> make

> make install

覆盖老版本文件(老文件要保留,否则Yum就没法用了!)

> mv /usr/bin/python /usr/bin/python_old

> ln -s /usr/local/python/bin/python /usr/bin

将/usr/bin/yum脚本中的第一行改为:#!/usr/bin/python_old

大功告成!现在敲Python命令进入的就是2.7版本了,并且Yum命令也好使!

3.2 ZooKeeper连接问题

当storm.yaml中nimbus和zookeeper的IP地址配置成虚拟机实际IP时,启动nimbus就会报错:KeeperErrorCode = ConnectionLoss for /storm … 都改为localhost就可以了。

其他问题还有:忘记启动ZooKeeper服务,没有关防火墙(service iptables stop)等。


Whatever is worth doing is worth doing well.