初探storm in Docker

背景

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集群


    初探storm in Docker_第1张图片
    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。尚未涉及资源的划分和网络的隔离,后续将会进一步探讨。

你可能感兴趣的:(初探storm in Docker)