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