Storm On YARN
(1)Storm:一個(gè)實(shí)時(shí)計(jì)算框架,與MapReduce離線計(jì)算框架互補(bǔ),分別用于解決不同場(chǎng)景下的問(wèn)題,Storm的官方網(wǎng)站是:http://storm-project.net/,如果想快速了解,推薦閱讀淘寶的這篇文章:Storm簡(jiǎn)介。
(2)YARN:YARN是Hadoop 2.0中新引入的資源管理系統(tǒng),可看做Hadoop操作系統(tǒng)中的資源管理組件,所有應(yīng)用程序和框架,比如MapReduce、Storm和Spark等,均可運(yùn)行在YARN之上,關(guān)于YARN,可閱讀我的一系列文章:Hadoop-YARN。
(3)Storm On YARN:嘗試將Storm運(yùn)行在YARN上,這將來(lái)眾多好處,具體本文將詳細(xì)介紹。Storm On YARN最有名是Yahoo!的開(kāi)源實(shí)現(xiàn),具體參考:Storm On YARN。將Storm運(yùn)行在YARN上并不是一件難事,但重要的是,它給我們開(kāi)了一扇窗,我們可通過(guò)該項(xiàng)目實(shí)現(xiàn)HBase On YARN, Spark On YARN,Kafka On YARN等有意義的工作,具體參考我的這篇文章:匯總運(yùn)行在Hadoop YARN上的開(kāi)源系統(tǒng)。
2. Storm On YARN帶來(lái)的好處
相比于將Storm部署到一個(gè)獨(dú)立的集群中,Storm On YARN帶來(lái)的好處很多,主要有以下幾個(gè):
(1) ?彈性計(jì)算資源。 將Storm運(yùn)行到Y(jié)ARN上后,Storm可與其他應(yīng)用程序(比如MapReduce批處理應(yīng)用程序)共享整個(gè)集群中的資源,這樣,當(dāng)Storm負(fù)載驟增時(shí),可動(dòng)態(tài)為它增加計(jì)算資源,而當(dāng)負(fù)載減小時(shí),可釋放部分資源,從而將這些資源暫時(shí)分配給負(fù)載更重的批處理應(yīng)用程序。
(2) 共享底層存儲(chǔ)。 Storm可與運(yùn)行在YARN上的其他框架共享底層的一個(gè)HDFS存儲(chǔ)系統(tǒng),可避免多個(gè)集群帶來(lái)的維護(hù)成本,同時(shí)避免數(shù)據(jù)跨集群拷貝帶來(lái)的網(wǎng)絡(luò)開(kāi)銷(xiāo)和時(shí)間延遲。
(3) ?支持多版本。可同時(shí)將多個(gè)Storm版本運(yùn)行YARN上,避免一個(gè)版本一個(gè)集群帶來(lái)的維護(hù)成本。
3. Storm On YARN架構(gòu)
在文章“如何編寫(xiě)YARN應(yīng)用程序”一文中,我已經(jīng)介紹了如何在YARN上開(kāi)發(fā)一個(gè)應(yīng)用程序,通常而言,需要開(kāi)發(fā)兩個(gè)組件,分別是客戶端和ApplicationMaster,其中,客戶端的主要作用是將應(yīng)用程序提交到Y(jié)ARN上,并與YARN和ApplicationMaster交互,完成用戶發(fā)送的一些指令;而ApplicationMaster則負(fù)責(zé)向YARN申請(qǐng)資源,并與NodeManager通信,以啟動(dòng)任務(wù)。
為了不修改Storm任何源代碼的情況下,讓Storm運(yùn)行在YARN上,最簡(jiǎn)單的實(shí)現(xiàn)方法是將Storm的各個(gè)服務(wù)組件(包括Nimbus和Supervisor),作為單獨(dú)的任務(wù)運(yùn)行在YARN上,而Zookeeper則作為一個(gè)公共的服務(wù)運(yùn)行在YARN集群之外的幾個(gè)節(jié)點(diǎn)上。
當(dāng)前比較有名的“Storm On YARN”實(shí)現(xiàn)是由yahoo!開(kāi)源的,它基本實(shí)現(xiàn)了上述描述的功能,下面具體進(jìn)行說(shuō)明:
(1) ?YARN-Storm Client
提供了一系列Shell命令供用戶控制YARN上的Storm服務(wù),比如構(gòu)建一個(gè)Storm集群命令如下:
storm-yarn launch <storm-yarn-config>
其中,<storm-yarn-config>是Storm配置信息,包括啟動(dòng)的Supervisor個(gè)數(shù)、Storm ApplicationMaster占用的內(nèi)存等。
啟動(dòng)Storm之后,用戶可通過(guò)以下命令控制Storm:
storm-yarn [command] –appId [appId] –output [file] [–supervisors [n]]
其中,Command為具體命令,具體見(jiàn)下表,參數(shù)“-appId”為啟動(dòng)的Storm的應(yīng)用程序Id,“-supervisors”為需增加的Supervisor服務(wù)個(gè)數(shù),該參數(shù)只對(duì)命令“addSupervisors”有效。
結(jié)合使用startNimbus/stopNimbus、startUI/stopUI和startSupervisors/ stopSupervisors等命令,可完成對(duì)Storm集群的升級(jí)。
(2) YARN-Storm ApplicationMaster
Storm ApplicationMaster初始化時(shí),將在同一個(gè)Container中啟動(dòng)Storm Nimbus和Storm Web UI兩個(gè)服務(wù),然后根據(jù)待啟動(dòng)的Supervisor數(shù)目向ResourceManager申請(qǐng)資源,在目前實(shí)現(xiàn)中,ApplicationMaster將請(qǐng)求一個(gè)節(jié)點(diǎn)上所有資源然后啟動(dòng)Supervisor服務(wù),也就是說(shuō),當(dāng)前Supervisor將獨(dú)占節(jié)點(diǎn)而不會(huì)與其他服務(wù)共享節(jié)點(diǎn)資源,這種情況下可避免其他服務(wù)對(duì)Storm集群的干擾。
除了運(yùn)行Storm Nimbus和Web UI外,Storm ApplicationMaster還會(huì)啟動(dòng)一個(gè)Thrift Server以處理來(lái)自YARN-Storm Client端的各種請(qǐng)求,在此不再贅述。
4. 當(dāng)前Storm On YARN存在的問(wèn)題
由于YARN本身的不完善,導(dǎo)致Storm On YARN設(shè)計(jì)存在諸多缺陷,以下是幾個(gè)典型問(wèn)題:
(1)難以將所有Storm服務(wù)運(yùn)行在相鄰的節(jié)點(diǎn)上,比如同一個(gè)機(jī)架上,這是由于YARN自身不支持資源組調(diào)度,只能實(shí)現(xiàn)指定一個(gè)rack,然后增量獲取資源,以期望所有資源來(lái)自這個(gè)rack,但是當(dāng)該rack空閑資源不足時(shí),YARN也無(wú)能為力。
(2)由于Nimbus服務(wù)運(yùn)行在ApplicationMaster上,而一旦ApplicationMaster失敗后,YARN會(huì)將它運(yùn)行在另外一個(gè)節(jié)點(diǎn)上,這意味著Nimbus服務(wù)可能神不知鬼不覺(jué)的在另一個(gè)節(jié)點(diǎn)上啟動(dòng)了,這給用戶使用帶來(lái)諸多不便,YARN需要提供一個(gè)ApplicationMaster或Nimbus位置獲取服務(wù),客戶端直接通過(guò)該服務(wù)獲取Nimbus位置即可。社區(qū)目前正在推薦一個(gè)基于Zookeeper的方案,你可以使用最新開(kāi)源項(xiàng)目Weave完成該功能。
(3)NodeManager本身無(wú)法支持動(dòng)態(tài)升級(jí),這意味著,如果NodeManager升級(jí),則它上面運(yùn)行的服務(wù)將全部被殺死,這將給運(yùn)行在YARN上的服務(wù)帶來(lái)諸多不穩(wěn)定因素。如果能夠?qū)⒏鼜V泛的服務(wù),比如Web server、Mysql等,運(yùn)行在YARN上,需要讓NodeManager支持動(dòng)態(tài)升級(jí),像YARN的同質(zhì)項(xiàng)目Mesos那樣。
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明:?轉(zhuǎn)載自董的博客
本文鏈接地址:?http://dongxicheng.org/mapreduce-nextgen/storm-on-yarn/
總結(jié)
以上是生活随笔為你收集整理的Storm On YARN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hbase shell详情
- 下一篇: 汇总运行在Hadoop YARN上的开源