背景
Storm是一個(gè)已經(jīng)被業(yè)界廣泛應(yīng)用的流處理引擎甩骏,主要特點(diǎn)是實(shí)時(shí)性強(qiáng)窗市,編程模型和接口簡(jiǎn)單,易于快速實(shí)現(xiàn)流處理功能饮笛。在目前的主流大數(shù)據(jù)平臺(tái)軟件棧中(如Hortonworks的HDP和Cloudera的CDH)咨察,Storm的部署方案都是單實(shí)例部署,即部署的是一個(gè)Storm集群福青,租戶的權(quán)限控制交給Ranger管理摄狱。這樣的優(yōu)點(diǎn)是部署和管理簡(jiǎn)單脓诡,但是因?yàn)閟torm的資源管理并沒(méi)有基于大數(shù)據(jù)平臺(tái)的資源管理方案,如果將storm計(jì)算節(jié)點(diǎn)和yarn NM復(fù)用媒役,有可能發(fā)生資源使用問(wèn)題祝谚。此外,多租戶之間的資源使用也容易發(fā)生搶占問(wèn)題酣衷。因此桃焕,關(guān)于storm的此類問(wèn)題队伟,業(yè)界目前有兩種解決思路: 一是Yarn的長(zhǎng)時(shí)服務(wù),目前的做法是基于Slider的方案。另一種是借助了PASS, 在Docker中運(yùn)行Storm因篇,采用多實(shí)例的做法,不同的租戶使用不同的storm實(shí)例涛浙,從而做到權(quán)限和資源的隔離刘绣。
正是基于此,本文嘗試使用k8s example中的storm示例钠龙,將Storm運(yùn)行在K8s集群中的Docker.
準(zhǔn)備條件
-
部署K8s集群
- 準(zhǔn)備Zookeeper和Storm image
可以自己編寫(xiě)dockerFile炬藤,也可以從網(wǎng)上下載別人已經(jīng)編譯好的.(因?yàn)镾torm是一個(gè)通用組件,網(wǎng)上這類比較多)碴里。本文使用mattf/storm的版本.
1. 部署并啟動(dòng)ZK
- 使用zookeeper的編排沈矿,啟動(dòng)pod執(zhí)行
kubectl create -f zookeeper.json
zookeeper.json 為 zookeeper.json
- 創(chuàng)建ZK的service
kubectl create -f zookeeper-service.json
zookeeper-service.json為 zookeeper-service.json
執(zhí)行完成后,可以查看zk是否正常創(chuàng)建和運(yùn)行咬腋。
- 查看Pod是否正常運(yùn)行
kubectl get pods
- 查看ZK service是否正常運(yùn)行
kubectl get services|grep zookeeper
- 查看ZK 端口2181是否可以被訪問(wèn)
notes: zk的訪問(wèn)IP和端口可以在ZK的k8s服務(wù)中查看羹膳,如上圖,本文集群環(huán)境的zk地址為: 10.108.175.212:2181
echo ruok | nc 10.108.175.212 2181; echo
2. 部署Storm Nimbus服務(wù)
- 同部署ZK一樣根竿,首先創(chuàng)建Nimbus pod
kubectl create -f storm-nimbus.json
storm-nimbus.json為 storm-nimbus.json
- 然后創(chuàng)建Nimbus Service
kubectl create -f storm-nimbus-service.json
storm-nimbus-service.json為 storm-nimbus-service.json
- 檢查nimbus pod是否正常運(yùn)行
kubectl get pods|grep nimbus
- 檢查nimbus service是否正常運(yùn)行
kubectl get services|grep nimbus
3. 部署Storm Worker
kubectl create -f storm-worker-controller.json
storm-worker-controller.json為storm-worker-controller.json
4. 運(yùn)行Storm topology
- 啟動(dòng)一個(gè)交互式的docker
docker run -it -w /opt/apache-storm mattf/storm-base sh
- 本地模式運(yùn)行Storm topology
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.RollingTopWords
-
remote模式運(yùn)行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
這樣就完成了簡(jiǎn)單的在Docker 里的Storm部署和運(yùn)行陵像。
注意: 本文只是簡(jiǎn)單的使用K8s管理調(diào)度Storm Docker。尚未涉及資源的劃分和網(wǎng)絡(luò)的隔離寇壳,后續(xù)將會(huì)進(jìn)一步探討醒颖。