Apache Storm 作为流数据处理,能实时处理海量数据,这是一个依赖 Zookeeper 的分布式系统,Storm 比较简单,能使用任何编程语言,作为私下玩玩也挺好的。Storm 能做实时分析、在线机器学习、流式计算和分布式 RPC/ETL 等等。Storm 现在的处理效率也很高,超过了每节点(Node)每秒处理百万级的 记录数(tuples)。具有扩展性、容错性,系统很容易创建和操作。
现在,Storm 的版本是1.1.0,7月28日又对1.0.4版本作了重大升级,提高了 Storm 的性能、稳定性和容错性。
一、下载安装及环境配置
本人使用的 Mac OS/x 系统作为主 Master,名称是 mymac. 其余有 CentOS linux 三个虚拟主机作为 Slaves,主机分别为:master,slave1,slave2。
1、下载安装
进入主页面下载,最好使用下面清华的镜像网站下载,速度快。http://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-1.1.0/apache-storm-1.1.0.tar.gz
在 Home 目录下解压到 storm 目录。
tar zxvf apache-storm-1.1.0.tar.gz
mv apache-storm-1.1.0 storm
2、使用 brew 或者 yum 安装
Mac Os: brew install storm
Linux: yum install storm
3、环境配置
1).bash_profile 或者 etc/profile 配置
###setup storm
export STORM_HOME=$HOME/storm
export PATH=$STORM_HOME/bin:$PATH
2)设置storm-env.sh
cd $STORM_HOME/conf
修改 storm-env.sh 配置内容
export STORM_CONF_DIR=/usr/local/opt/storm/libexec/conf
3) 设置 storm.yaml
这个配置格式是一个奇葩的配置格式,要注意:配置行要距离左边缘空一个格, 冒号后面空格,- 后面空格,反正记得要空格。
配置内容如下:
storm.zookeeper.servers:
- "mymac"
- "master"
- "slave1"
- "slave2"
storm.zookeeper.port: 2181
nimbus.seeds: ["mymac"]
storm.cluster.mode: "distributed"
ui.port: 9090
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
有其它文章说配置:nimbus.host: 这个已经过时了。使用 nimbus.seeds 代替。
ui.port: 不能使用默认的端口8080,因为和 hadoop 系统的端口冲突,所以改为9090
二、启动运行及查看
1、启动
Nimbus:在 Storm 主控节点上运行(即 master)
Supervisor:在 Storm各个工作节点上运行(即 slave)
UI:在 Storm主控节点上运行,启动 UI后台程序
在 Master 节点,启动如下服务到后台:
storm nimbus >/dev/null 2>&1 &
storm ui >/dev/null 2>&1 &
在 Slave 节点,启动如下服务到后台:
storm supervisor>/dev/null 2>&1 &
2. 通过 jps查看
在 master节点上,能看到 core,nimbus 进程。
在 slave 节点上,能看到 supervisor 进程
3 web 访问 storm
http://mymac:9090
三、问题
安装 Storm 碰到的问题:
1、配置文件 storm.yaml 的格式问题, 注意空格就好了,容易出问题。
2、storm 的进程容易在运行一段时间后就自动退出,这个 storm 自动退出很常见, 作为测试没问题,但是作为长期运行问题就大了,所以官方网站推荐使用 daemontools 作为守护,即退出就自动重新加载。产生这个原因是因为 zookeeper 不处理 storm 的请求。
wangxinnian@mymac:~$ echo dump| nc 127.0.0.1 2181
SessionTracker dump:
org.apache.zookeeper.server.quorum.LearnerSessionTracker@4540838d
ephemeral nodes dump:
Sessions with Ephemerals (5):
0x35d93e131a90006: /storm/nimbuses/mymac:6627
0x25d93e13173000b: /storm/leader-lock/_c_80ff754f-cd62-4b5d-ad2b-adf46ebb1256-latch-0000000004
0x25d93e13173000a: /storm/supervisors/a768820d-6719-4bc8-ac5c-4745c059d743
0x25d93e131730009: /storm/supervisors/09b3a3d2-14a1-4eed-a92e-c31d9960e84c
0x45d93e131a50007: /storm/supervisors/bad7c83b-9d6b-401b-9a5d-682490e20858
3、还有个大问题,在 ui 的 web 浏览的时候,会出现
org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["127.0.0.1"]. Did you specify a valid list of nimbus hosts for config nimbus.seeds?at org.apache.storm.utils.NimbusClient.getConfiguredClientAs(NimbusClient.java:90)
这个问题,第一种方法就是要么重新启动 zookeeper 和 storm, 很麻烦,也许不起作用。
第二种方法就是:zookeeper中把/storm节点数据删除,然后重启zookeeper;
运行:zkCli.sh
[xxxxx] ls / 查看注册的节点
[xxxx] rmr /storm 删除 storm 节点
然后重启storm,让 Storm 去 zookeeper 中重新注册。