背景
Storm是一个已经被业界广泛应用的流处理引擎,主要特点是实时性强,编程模型和接口简单,易于快速实现流处理功能。在目前的主流大数据平台软件栈中(如Hortonworks的HDP和Cloudera的CDH),Storm的部署方案都是单实例部署,即部署的是一个Storm集群,租户的权限控制交给Ranger管理。这样的优点是部署和管理简单,但是因为storm的资源管理并没有基于大数据平台的资源管理方案,如果将storm计算节点和yarn NM复用,有可能发生资源使用问题。此外,多租户之间的资源使用也容易发生抢占问题。因此,关于storm的此类问题,业界目前有两种解决思路: 一是Yarn的长时服务,目前的做法是基于Slider的方案。另一种是借助了PASS, 在Docker中运行Storm,采用多实例的做法,不同的租户使用不同的storm实例,从而做到权限和资源的隔离。
正是基于此,本文尝试使用k8s example中的storm示例,将Storm运行在K8s集群中的Docker.
准备条件
-
部署K8s集群
k8s节点 - 准备Zookeeper和Storm image
可以自己编写dockerFile,也可以从网上下载别人已经编译好的.(因为Storm是一个通用组件,网上这类比较多)。本文使用mattf/storm的版本.
1. 部署并启动ZK
- 使用zookeeper的编排,启动pod执行
kubectl create -f zookeeper.json
zookeeper.json 为 zookeeper.json
- 创建ZK的service
kubectl create -f zookeeper-service.json
zookeeper-service.json为 zookeeper-service.json
执行完成后,可以查看zk是否正常创建和运行。
- 查看Pod是否正常运行
kubectl get pods
zkPod
- 查看ZK service是否正常运行
kubectl get services|grep zookeeper
zk service
- 查看ZK 端口2181是否可以被访问
notes: zk的访问IP和端口可以在ZK的k8s服务中查看,如上图,本文集群环境的zk地址为: 10.108.175.212:2181
echo ruok | nc 10.108.175.212 2181; echo
zk 端口正常
2. 部署Storm Nimbus服务
- 同部署ZK一样,首先创建Nimbus pod
kubectl create -f storm-nimbus.json
storm-nimbus.json为 storm-nimbus.json
- 然后创建Nimbus Service
kubectl create -f storm-nimbus-service.json
storm-nimbus-service.json为 storm-nimbus-service.json
- 检查nimbus pod是否正常运行
kubectl get pods|grep nimbus
- 检查nimbus service是否正常运行
kubectl get services|grep nimbus
3. 部署Storm Worker
kubectl create -f storm-worker-controller.json
storm-worker-controller.json为storm-worker-controller.json
4. 运行Storm topology
- 启动一个交互式的docker
docker run -it -w /opt/apache-storm mattf/storm-base sh
runDocker
- 本地模式运行Storm topology
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.RollingTopWords
-
remote模式运行Storm topology
- 配置ZK和nimbus
/configure.sh 10.108.175.212 10.100.140.82
- 提交storm topology
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.RollingTopWords production-topology remote
- 在Storm中查看提交的topology
./bin/storm list
storm topology
这样就完成了简单的在Docker 里的Storm部署和运行。
注意: 本文只是简单的使用K8s管理调度Storm Docker。尚未涉及资源的划分和网络的隔离,后续将会进一步探讨。
网友评论