Storm集群配置实战
先简单的把本文要做的事罗列一下:
1. 安装zookeeper集群
2. 安装Storm集群,包括一个Storm的nimbus,在nimbus上启用Storm UI 和两个supervisor
3. 跑一个小例子证实安装完成
注:
本例中,nimbus机器IP为10.1.110.24, 两个supervisor分别为10.1.110.21和10.1.110.22。后文不再用通配符写IP。请自行更换IP。
准备工作
2014-07-29 新加注释:
Storm现在移交到Apach了,新release的apache-storm-0.9.1-incubating直接将Netty换成了默认方式(更多更新参见这里)。
所以启用Netty部分的messaging部分的参数可以不带了。
安装ZK
- mkdir -p /var/tmp/zkdata
- cd /var/tmp/zkdata
- echo 1 > myid
- # The number of milliseconds of each tick
- tickTime=2000
- # The number of ticks that the initial
- # synchronization phase can take
- initLimit=10
- # The number of ticks that can pass between
- # sending a request and getting an acknowledgement
- syncLimit=5
- # the directory where the snapshot is stored.
- # do not use /tmp for storage, /tmp here is just
- # example sakes.
- dataDir=/var/tmp/zkdata
- # the port at which the clients will connect
- clientPort=2181
- server.1=10.1.110.21:2888:3888
- server.2=10.1.110.22:2888:3888
- server.3=10.1.110.24:2888:3888
- ## Be sure to read the maintenance section of the
- # administrator guide before turning on autopurge.
- ## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html
- #sc_maintenance
- ## The number of snapshots to retain in dataDir
- #autopurge.snapRetainCount=3
- # Purge task interval in hours
- # Set to "0" to disable auto purge feature
- #autopurge.purgeInterval=1
- #zookeeper
- export ZOOKEEPER=/opt/zookeeper-3.4.5
- PATH=$PATH:$ZOOKEEPER/bin
6. 启动zk
- cd /opt/zookeeper-3.4.5/bin
- ./zkServer.sh start
在剩下两台机器重复以上步骤,注意myid要对应
安装Storm
- PATH=$PATH:/opt/storm-0.9.0.1/bin
- mkdir -p /var/tmp/storm/workdir/
以上步骤在Storm的集群上的其他机器上重复执行,然后进行配置:
- ########### These MUST be filled in for a storm configuration
- storm.zookeeper.servers:
- - "10.1.110.21"
- - "10.1.110.22"
- - "10.1.110.24"
- #
- # nimbus.host: "nimbus"
- #
- #
- # ##### These may optionally be filled in:
- #
- ## List of custom serializations
- # topology.kryo.register:
- # - org.mycompany.MyType
- # - org.mycompany.MyType2: org.mycompany.MyType2Serializer
- #
- ## List of custom kryo decorators
- # topology.kryo.decorators:
- # - org.mycompany.MyDecorator
- #
- ## Locations of the drpc servers
- # drpc.servers:
- # - "server1"
- # - "server2"
- storm.local.dir: "/var/tmp/storm/workdir"
- ########### These MUST be filled in for a storm configuration
- storm.zookeeper.servers:
- - "10.1.110.21"
- - "10.1.110.22"
- - "10.1.110.24"
- nimbus.host: "10.1.110.24"
- #
- #
- # ##### These may optionally be filled in:
- #
- ## List of custom serializations
- # topology.kryo.register:
- # - org.mycompany.MyType
- # - org.mycompany.MyType2: org.mycompany.MyType2Serializer
- #
- ## List of custom kryo decorators
- # topology.kryo.decorators:
- # - org.mycompany.MyDecorator
- #
- ## Locations of the drpc servers
- # drpc.servers:
- # - "server1"
- # - "server2"
- supervisor.slots.ports:
- - 6700
- - 6701
- - 6702
- storm.local.dir: "/var/tmp/storm/workdir"
启动集群
- ./storm nimbus
- ./storm ui
3. 启动supervisor
- ./storm supervisor
- ui.port=8089
部署程序
- <dependency>
- <groupId>org.twitter4j</groupId>
- <artifactId>twitter4j-core</artifactId>
- <!--<version>2.2.6-SNAPSHOT</version>-->
- <version>[2.2,)</version>
- </dependency>
- <dependency>
- <groupId>org.twitter4j</groupId>
- <artifactId>twitter4j-stream</artifactId>
- <!--<version>2.2.6-SNAPSHOT</version>-->
- <version>[2.2,)</version>
- </dependency>
- mvn clean install -Dmaven.test.skip
3. 将storm-starter/target目录下的storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷到nimbus服务器上去
- ./storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology test
- ./storm list
- 769 [main] INFO backtype.storm.thrift - Connecting to Nimbus at localhost:6627
- Topology_name Status Num_tasks Num_workers Uptime_secs
- -------------------------------------------------------------------
- test ACTIVE 28 3 20
6. 关闭topology
常见问题
- hostname <new-name>
- vi /etc/sysconfig/network
- vi /etc/hosts
- 10.1.110.24 nimbus
- 10.1.110.22 supervisor-22
- 10.1.110.21 supervisor-21
注:
这个参数是给启动的worker用的,一个worker对应一个JVM进程。所以如果有两个worker在该节点上启动,必定有一个fail。因为端口冲突!
在shutdown一个topology时,该worker的进程并不会自动关闭,所以端口已然被占着。这个时候再启动时,有可能会分配一个新进程,这时又会去绑该端口,也会fail!
所以应尽量避免remote debug,最后在本地模式调试好后才上传至cluster。
在每次debug后,要kill掉该supervisor才能避免下次部署失败。
6. Storm UI里面topology summary是空的?但是topology确实在运行着。
apache-storm-0.9.2-incubating引入了新版的jquery.tablesorter.min.js,其中有部分代码如下
- ts.addParser({
- id: "currency",
- is: function (s) {
- return /^[£$€?.]/.test(s);
- }, format: function (s) {
- return $.tablesorter.formatFloat(s.replace(new RegExp(/[£$€]/g), ""));
- }, type: "numeric"
- });
中间return 的正则特殊符号在GBK和GB2312下会有问题。导致js无法执行。
- <meta charset="UTF-8">
在Linux系统下部署Java产品的集群环境时,后台报出如下异常,系统报找不到名为“host01”的主机:
java.NET.UnknownHostException: host01:host01: Name or service not known
at java.Net.InetAddress.getLocalHost(InetAddress.java:1473)
atcom.nse.cmccdm.hwtools.snmptrap.TrapThread.init(TrapThread.java:59)
解决方法:
修改/etc/hosts文件
操作:1、cd etc ——2、vi hosts ——3、在最后一行添加如下所示;
127.0.0.1 主机名 localhost.localdomain localhost
或是
127.0.0.1 主机名
主机名是新加的,原来没有,保存,问题解决。