利用docker搭建storm集群
- 启动nimbus节点:
docker run -d --restart always --name nimbus --link zookeeper:zookeeper storm storm nimbus
--link zookeeper:zookeeper
使用zookeeper容器,将其别名为zookeeper
- 启动一个supervisor节点:
docker run -d --restart always --name supervisor -p 8000:8000 -p 6700:6700 -p 6701:6701 --link zookeeper:zookeeper --link nimbus:nimbus storm storm supervisor
- 这里将8000端口暴露出来主要是为了能访问supervisor的日志
- 实际的bolt和spout是在worker上运行的,所以需要将worker的端口暴露出来,一个supervisor默认是分配4个worker,端口从6700开始
- 启动storm的ui便于监控,随后便可以使用http://localhost:8080/index.html访问监控界面:
docker run -d -p 8080:8080 --restart always --name ui --link nimbus:nimbus storm storm ui
- 登陆到nimbus、supervisor节点上,将logviewer启动起来:
nohup sh storm logviewer &
注意
- 上面
docker run -d -p 8080:8080 --restart always --name ui --link nimbus:nimbus storm storm ui
这条命令中的两个storm含义并不相同。
- 第一个storm代表的是镜像名
- 第二个storm代表的是运行storm命令。进入到进行中/bin目录中有个storm文件,直接运行storm文件,可以看到storm支持的所有命令,其中就有我们用到的ui、nimbus、supervisor
- 在容器的里还有个example文件夹,里面有一些例子,我们可以通过docker命令将里面的例子从容器中拷贝出来:
docker cp 2a5b4120305d:/apache-storm-1.2.2/examples/storm-starter /Users/rui/code/docker/storm
,2a5b4120305d为容器的id
提交topology
- 修改代码,其实需要修改的就只有最后提交topo的那一行代码:
try {
StormSubmitter.submitTopology("SumTopology",new Config(),topology);
} catch (AlreadyAliveException e) {
e.printStackTrace();
} catch (InvalidTopologyException e) {
e.printStackTrace();
} catch (AuthorizationException e) {
e.printStackTrace();
}
- 编译打包即可
- 提交topo:
docker run --link nimbus:nimbus -it --rm -v /Users/rui/code/storm/target/storm-1.0-SNAPSHOT.jar:/topology.jar storm storm jar /topology.jar com.dr.sum.SumTopology topology