项目中需要使用到storm,所以临时抱佛脚找了本英文书看了看就进入开发了
(一)搭建环境
我使用的是storm-0.9.1版本,这个版本有个好处就是底层用纯java实现了消息队列,不需要像以前的版本还需要本地编译zeroMQ等一大堆依赖,只需要安装JDK然后在storm.yaml文件中指定
storm.messaging.transport: "backtype.storm.messaging.netty.Context"
storm.messaging.netty.server_worker_threads: 1
storm.messaging.netty.client_worker_threads: 1
storm.messaging.netty.buffer_size: 5242880
storm.messaging.netty.max_retries: 100
storm.messaging.netty.max_wait_ms: 1000
storm.messaging.netty.min_wait_ms: 100
就可以使用netty了。非常方便。至于zookeeper集群肯定还是需要安装的。
下面贴上整个配置文件信息
storm.zookeeper.servers:
- "192.168.137.100"
- "192.168.137.101"
- "192.168.137.102"
#
nimbus.host: "192.168.137.100"
storm.local.dir: "/var/storm"
storm.messaging.transport: "backtype.storm.messaging.netty.Context"
storm.messaging.netty.server_worker_threads: 1
storm.messaging.netty.client_worker_threads: 1
storm.messaging.netty.buffer_size: 5242880
storm.messaging.netty.max_retries: 100
storm.messaging.netty.max_wait_ms: 1000
storm.messaging.netty.min_wait_ms: 100
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
(二)开发遇到的问题
(1)有时候在启动storm集群的时候,发现nimbus或则supervisor进程总是无缘无故的挂掉,其实我也不清楚原因,也没有报错,属于毫无征兆的。但只要我清理了storm.local.dir所指定的目录下的所有文件再启动就好了。这个问题以后研究,这里只给出解决方法。
(2)第一次写的topology总是报错,发现在spout组件中的nextTuple()方法中把信息抛出去的时候需要调用的emit(new Values(str),str)这个重写的方法,才能够正常运行。