####解析Hadoop新一代MapReduce框架Yarn

更快、更強(qiáng)——解析Hadoop新一代MapReduce框架Yarn-CSDN.NET http://www.csdn.net/article/2014-02-10/2818355

Yarn架構(gòu)
Yarn/MRv2最基本的想法是將原JobTracker主要的資源管理和job調(diào)度/監(jiān)視功能分開(kāi)作為兩個(gè)單獨(dú)的守護(hù)進(jìn)程。有一個(gè)全局的ResourceManager(RM)和每個(gè)Application有一個(gè)ApplicationMaster(AM),Application相當(dāng)于map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)組成了基本的數(shù)據(jù)計(jì)算框架。ResourceManager協(xié)調(diào)集群的資源利用,任何client或者運(yùn)行著的applicatitonMaster想要運(yùn)行job或者task都得向RM申請(qǐng)一定的資源。ApplicatonMaster是一個(gè)框架特殊的庫(kù),對(duì)于MapReduce框架而言有它自己的AM實(shí)現(xiàn),用戶(hù)也可以實(shí)現(xiàn)自己的AM,在運(yùn)行的時(shí)候,AM會(huì)與NM一起來(lái)啟動(dòng)和監(jiān)視tasks。

背景

Yarn是一個(gè)分布式的資源管理系統(tǒng),用以提高分布式的集群環(huán)境下的資源利用率,這些資源包括內(nèi)存、IO、網(wǎng)絡(luò)、磁盤(pán)等。其產(chǎn)生的原因是為了解決原MapReduce框架的不足。最初MapReduce的committer們還可以周期性的在已有的代碼上進(jìn)行修改,可是隨著代碼的增加以及原MapReduce框架設(shè)計(jì)的不足,在原MapReduce框架上進(jìn)行修改變得越來(lái)越困難,所以MapReduce的committer們決定從架構(gòu)上重新設(shè)計(jì)MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的擴(kuò)展性、可用性、可靠性、向后兼容性和更高的資源利用率以及能支持除了MapReduce計(jì)算框架外的更多的計(jì)算框架。

必須牢記yarn只是一個(gè)資源管理的框架,并不是一個(gè)計(jì)算框架,計(jì)算框架可以運(yùn)行在yarn上。


摘要:本文介紹了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理、優(yōu)勢(shì)、運(yùn)作機(jī)制和配置方法等;著重介紹新的Yarn框架相對(duì)于原框架的差異及改進(jìn)。
編者按:對(duì)于業(yè)界的大數(shù)據(jù)存儲(chǔ)及分布式處理系統(tǒng)來(lái)說(shuō),Hadoop 是耳熟能詳?shù)淖吭介_(kāi)源分布式文件存儲(chǔ)及處理框架,對(duì)于 Hadoop 框架的介紹在此不再累述,隨著需求的發(fā)展,Yarn 框架浮出水面,@依然光榮復(fù)興博客給我們做了很詳細(xì)的介紹,讀者通過(guò)本文中新舊 Hadoop MapReduce 框架的對(duì)比,更能深刻理解新的 yarn 框架的技術(shù)原理和設(shè)計(jì)思想。

背景

Yarn是一個(gè)分布式的資源管理系統(tǒng),用以提高分布式的集群環(huán)境下的資源利用率,這些資源包括內(nèi)存、IO、網(wǎng)絡(luò)、磁盤(pán)等。其產(chǎn)生的原因是為了解決原MapReduce框架的不足。最初MapReduce的committer們還可以周期性的在已有的代碼上進(jìn)行修改,可是隨著代碼的增加以及原MapReduce框架設(shè)計(jì)的不足,在原MapReduce框架上進(jìn)行修改變得越來(lái)越困難,所以MapReduce的committer們決定從架構(gòu)上重新設(shè)計(jì)MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的擴(kuò)展性、可用性、可靠性、向后兼容性和更高的資源利用率以及能支持除了MapReduce計(jì)算框架外的更多的計(jì)算框架。

原MapReduce框架的不足

JobTracker是集群事務(wù)的集中處理點(diǎn),存在單點(diǎn)故障
JobTracker需要完成的任務(wù)太多,既要維護(hù)job的狀態(tài)又要維護(hù)job的task的狀態(tài),造成過(guò)多的資源消耗
在taskTracker端,用map/reduce task作為資源的表示過(guò)于簡(jiǎn)單,沒(méi)有考慮到CPU、內(nèi)存等資源情況,當(dāng)把兩個(gè)需要消耗大內(nèi)存的task調(diào)度到一起,很容易出現(xiàn)OOM
把資源強(qiáng)制劃分為map/reduce slot,當(dāng)只有map task時(shí),reduce slot不能用;當(dāng)只有reduce task時(shí),map slot不能用,容易造成資源利用不足。

Yarn架構(gòu)
Yarn/MRv2最基本的想法是將原JobTracker主要的資源管理和job調(diào)度/監(jiān)視功能分開(kāi)作為兩個(gè)單獨(dú)的守護(hù)進(jìn)程。有一個(gè)全局的ResourceManager(RM)和每個(gè)Application有一個(gè)ApplicationMaster(AM),Application相當(dāng)于map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)組成了基本的數(shù)據(jù)計(jì)算框架。ResourceManager協(xié)調(diào)集群的資源利用,任何client或者運(yùn)行著的applicatitonMaster想要運(yùn)行job或者task都得向RM申請(qǐng)一定的資源。ApplicatonMaster是一個(gè)框架特殊的庫(kù),對(duì)于MapReduce框架而言有它自己的AM實(shí)現(xiàn),用戶(hù)也可以實(shí)現(xiàn)自己的AM,在運(yùn)行的時(shí)候,AM會(huì)與NM一起來(lái)啟動(dòng)和監(jiān)視tasks。
ResourceManager
ResourceManager作為資源的協(xié)調(diào)者有兩個(gè)主要的組件:Scheduler和ApplicationsManager(AsM)。
Scheduler負(fù)責(zé)分配最少但滿(mǎn)足application運(yùn)行所需的資源量給Application。Scheduler只是基于資源的使用情況進(jìn)行調(diào)度,并不負(fù)責(zé)監(jiān)視/跟蹤application的狀態(tài),當(dāng)然也不會(huì)處理失敗的task。RM使用resource container概念來(lái)管理集群的資源,resource container是資源的抽象,每個(gè)container包括一定的內(nèi)存、IO、網(wǎng)絡(luò)等資源,不過(guò)目前的實(shí)現(xiàn)只包括內(nèi)存一種資源。
ApplicationsManager負(fù)責(zé)處理client提交的job以及協(xié)商第一個(gè)container以供applicationMaster運(yùn)行,并且在applicationMaster失敗的時(shí)候會(huì)重新啟動(dòng)applicationMaster。下面闡述RM具體完成的一些功能。

資源調(diào)度:Scheduler從所有運(yùn)行著的application收到資源請(qǐng)求后構(gòu)建一個(gè)全局的資源分配計(jì)劃,然后根據(jù)application特殊的限制以及全局的一些限制條件分配資源。
資源監(jiān)視:Scheduler會(huì)周期性的接收來(lái)自NM的資源使用率的監(jiān)控信息,另外applicationMaster可以從Scheduler得到屬于它的已完成的container的狀態(tài)信息。
Application提交:
client向AsM獲得一個(gè)applicationIDclient將application定義以及需要的jar包
client將application定義以及需要的jar包文件等上傳到hdfs的指定目錄,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定
client構(gòu)造資源請(qǐng)求的對(duì)象以及application的提交上下文發(fā)送給AsM
AsM接收application的提交上下文
AsM根據(jù)application的信息向Scheduler協(xié)商一個(gè)Container供applicationMaster運(yùn)行,然后啟動(dòng)applicationMaster
向該container所屬的NM發(fā)送launchContainer信息啟動(dòng)該container,也即啟動(dòng)applicationMaster、AsM向client提供運(yùn)行著的AM的狀態(tài)信息。

AM的生命周期:AsM負(fù)責(zé)系統(tǒng)中所有AM的生命周期的管理。AsM負(fù)責(zé)AM的啟動(dòng),當(dāng)AM啟動(dòng)后,AM會(huì)周期性的向AsM發(fā)送heartbeat,默認(rèn)是1s,AsM據(jù)此了解AM的存活情況,并且在AM失敗時(shí)負(fù)責(zé)重啟AM,若是一定時(shí)間過(guò)后(默認(rèn)10分鐘)沒(méi)有收到AM的heartbeat,AsM就認(rèn)為該AM失敗了。

關(guān)于ResourceManager的可用性目前還沒(méi)有很好的實(shí)現(xiàn),不過(guò)Cloudera公司的CDH4.4以后的版本實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的高可用性,使用了Hadoop-common項(xiàng)目中HA部分的代碼,采用了類(lèi)似hdfs namenode高可用性的設(shè)計(jì),給RM引入了active和standby狀態(tài),不過(guò)沒(méi)有與journalnode相對(duì)應(yīng)的角色,只是由zookeeper來(lái)負(fù)責(zé)維護(hù)RM的狀態(tài),這樣的設(shè)計(jì)只是一個(gè)最簡(jiǎn)單的方案,避免了手動(dòng)重啟RM,離真正的生產(chǎn)可用還有一段距離。
NodeManager
NM主要負(fù)責(zé)啟動(dòng)RM分配給AM的container以及代表AM的container,并且會(huì)監(jiān)視container的運(yùn)行情況。在啟動(dòng)container的時(shí)候,NM會(huì)設(shè)置一些必要的環(huán)境變量以及將container運(yùn)行所需的jar包、文件等從hdfs下載到本地,也就是所謂的資源本地化;當(dāng)所有準(zhǔn)備工作做好后,才會(huì)啟動(dòng)代表該container的腳本將程序啟動(dòng)起來(lái)。啟動(dòng)起來(lái)后,NM會(huì)周期性的監(jiān)視該container運(yùn)行占用的資源情況,若是超過(guò)了該container所聲明的資源量,則會(huì)kill掉該container所代表的進(jìn)程。
另外,NM還提供了一個(gè)簡(jiǎn)單的服務(wù)以管理它所在機(jī)器的本地目錄。Applications可以繼續(xù)訪(fǎng)問(wèn)本地目錄即使那臺(tái)機(jī)器上已經(jīng)沒(méi)有了屬于它的container在運(yùn)行。例如,Map-Reduce應(yīng)用程序使用這個(gè)服務(wù)存儲(chǔ)map output并且shuffle它們給相應(yīng)的reduce task。
在NM上還可以擴(kuò)展自己的服務(wù),yarn提供了一個(gè)yarn.nodemanager.aux-services的配置項(xiàng),通過(guò)該配置,用戶(hù)可以自定義一些服務(wù),例如Map-Reduce的shuffle功能就是采用這種方式實(shí)現(xiàn)的。
NM在本地為每個(gè)運(yùn)行著的application生成如下的目錄結(jié)構(gòu):


Container目錄下的目錄結(jié)構(gòu)如下:

在啟動(dòng)一個(gè)container的時(shí)候,NM就執(zhí)行該container的default_container_executor.sh,該腳本內(nèi)部會(huì)執(zhí)行l(wèi)aunch_container.sh。launch_container.sh會(huì)先設(shè)置一些環(huán)境變量,最后啟動(dòng)執(zhí)行程序的命令。對(duì)于MapReduce而言,啟動(dòng)AM就執(zhí)行org.apache.hadoop.mapreduce.v2.app.MRAppMaster;啟動(dòng)map/reduce task就執(zhí)行org.apache.hadoop.mapred.YarnChild。

ApplicationMaster
ApplicationMaster是一個(gè)框架特殊的庫(kù),對(duì)于Map-Reduce計(jì)算模型而言有它自己的ApplicationMaster實(shí)現(xiàn),對(duì)于其他的想要運(yùn)行在yarn上的計(jì)算模型而言,必須得實(shí)現(xiàn)針對(duì)該計(jì)算模型的ApplicationMaster用以向RM申請(qǐng)資源運(yùn)行task,比如運(yùn)行在yarn上的spark框架也有對(duì)應(yīng)的ApplicationMaster實(shí)現(xiàn),歸根結(jié)底,yarn是一個(gè)資源管理的框架,并不是一個(gè)計(jì)算框架,要想在yarn上運(yùn)行應(yīng)用程序,還得有特定的計(jì)算框架的實(shí)現(xiàn)。由于yarn是伴隨著MRv2一起出現(xiàn)的,所以下面簡(jiǎn)要概述MRv2在yarn上的運(yùn)行流程。
MRv2運(yùn)行流程:

MR JobClient向resourceManager(AsM)提交一個(gè)job
AsM向Scheduler請(qǐng)求一個(gè)供MR AM運(yùn)行的container,然后啟動(dòng)它
MR AM啟動(dòng)起來(lái)后向AsM注冊(cè)
MR JobClient向AsM獲取到MR AM相關(guān)的信息,然后直接與MR AM進(jìn)行通信
MR AM計(jì)算splits并為所有的map構(gòu)造資源請(qǐng)求
MR AM做一些必要的MR OutputCommitter的準(zhǔn)備工作
MR AM向RM(Scheduler)發(fā)起資源請(qǐng)求,得到一組供map/reduce task運(yùn)行的container,然后與NM一起對(duì)每一個(gè)container執(zhí)行一些必要的任務(wù),包括資源本地化等
MR AM 監(jiān)視運(yùn)行著的task 直到完成,當(dāng)task失敗時(shí),申請(qǐng)新的container運(yùn)行失敗的task
當(dāng)每個(gè)map/reduce task完成后,MR AM運(yùn)行MR OutputCommitter的cleanup 代碼,也就是進(jìn)行一些收尾工作
當(dāng)所有的map/reduce完成后,MR AM運(yùn)行OutputCommitter的必要的job commit或者abort APIs
MR AM退出。

在Yarn上寫(xiě)應(yīng)用程序
在yarn上寫(xiě)應(yīng)用程序并不同于我們熟知的MapReduce應(yīng)用程序,必須牢記yarn只是一個(gè)資源管理的框架,并不是一個(gè)計(jì)算框架,計(jì)算框架可以運(yùn)行在yarn上。我們所能做的就是向RM申請(qǐng)container,然后配合NM一起來(lái)啟動(dòng)container。就像MRv2一樣,jobclient請(qǐng)求用于MR AM運(yùn)行的container,設(shè)置環(huán)境變量和啟動(dòng)命令,然后交由NM去啟動(dòng)MR AM,隨后map/reduce task就由MR AM全權(quán)負(fù)責(zé),當(dāng)然task的啟動(dòng)也是由MR AM向RM申請(qǐng)container,然后配合NM一起來(lái)啟動(dòng)的。所以要想在yarn上運(yùn)行非特定計(jì)算框架的程序,我們就得實(shí)現(xiàn)自己的client和applicationMaster。另外我們自定義的AM需要放在各個(gè)NM的classpath下,因?yàn)锳M可能運(yùn)行在任何NM所在的機(jī)器上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,409評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,569評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,895評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,123評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,363評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,622評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,354評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容