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

更快、更強——解析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)視功能分開作為兩個單獨的守護進程朽缎。有一個全局的ResourceManager(RM)和每個Application有一個ApplicationMaster(AM),Application相當(dāng)于map-reduce job或者DAG jobs扰才。ResourceManager和NodeManager(NM)組成了基本的數(shù)據(jù)計算框架谊惭。ResourceManager協(xié)調(diào)集群的資源利用柜候,任何client或者運行著的applicatitonMaster想要運行job或者task都得向RM申請一定的資源。ApplicatonMaster是一個框架特殊的庫灰羽,對于MapReduce框架而言有它自己的AM實現(xiàn)驮履,用戶也可以實現(xiàn)自己的AM,在運行的時候廉嚼,AM會與NM一起來啟動和監(jiān)視tasks玫镐。

背景

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

必須牢記yarn只是一個資源管理的框架,并不是一個計算框架嘶摊,計算框架可以運行在yarn上延蟹。


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

背景

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

原MapReduce框架的不足

JobTracker是集群事務(wù)的集中處理點,存在單點故障
JobTracker需要完成的任務(wù)太多谈况,既要維護job的狀態(tài)又要維護job的task的狀態(tài)勺美,造成過多的資源消耗
在taskTracker端递胧,用map/reduce task作為資源的表示過于簡單,沒有考慮到CPU赡茸、內(nèi)存等資源情況缎脾,當(dāng)把兩個需要消耗大內(nèi)存的task調(diào)度到一起,很容易出現(xiàn)OOM
把資源強制劃分為map/reduce slot,當(dāng)只有map task時占卧,reduce slot不能用赊锚;當(dāng)只有reduce task時,map slot不能用屉栓,容易造成資源利用不足舷蒲。

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

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

AM的生命周期:AsM負責(zé)系統(tǒng)中所有AM的生命周期的管理滩援。AsM負責(zé)AM的啟動,當(dāng)AM啟動后塔嬉,AM會周期性的向AsM發(fā)送heartbeat玩徊,默認是1s,AsM據(jù)此了解AM的存活情況谨究,并且在AM失敗時負責(zé)重啟AM恩袱,若是一定時間過后(默認10分鐘)沒有收到AM的heartbeat,AsM就認為該AM失敗了胶哲。

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


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

在啟動一個container的時候稽坤,NM就執(zhí)行該container的default_container_executor.sh丈甸,該腳本內(nèi)部會執(zhí)行l(wèi)aunch_container.sh。launch_container.sh會先設(shè)置一些環(huán)境變量尿褪,最后啟動執(zhí)行程序的命令睦擂。對于MapReduce而言,啟動AM就執(zhí)行org.apache.hadoop.mapreduce.v2.app.MRAppMaster杖玲;啟動map/reduce task就執(zhí)行org.apache.hadoop.mapred.YarnChild祈匙。

ApplicationMaster
ApplicationMaster是一個框架特殊的庫,對于Map-Reduce計算模型而言有它自己的ApplicationMaster實現(xiàn)天揖,對于其他的想要運行在yarn上的計算模型而言夺欲,必須得實現(xiàn)針對該計算模型的ApplicationMaster用以向RM申請資源運行task,比如運行在yarn上的spark框架也有對應(yīng)的ApplicationMaster實現(xiàn)今膊,歸根結(jié)底些阅,yarn是一個資源管理的框架,并不是一個計算框架斑唬,要想在yarn上運行應(yīng)用程序市埋,還得有特定的計算框架的實現(xiàn)。由于yarn是伴隨著MRv2一起出現(xiàn)的恕刘,所以下面簡要概述MRv2在yarn上的運行流程缤谎。
MRv2運行流程:

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

在Yarn上寫應(yīng)用程序
在yarn上寫應(yīng)用程序并不同于我們熟知的MapReduce應(yīng)用程序拗军,必須牢記yarn只是一個資源管理的框架,并不是一個計算框架,計算框架可以運行在yarn上发侵。我們所能做的就是向RM申請container,然后配合NM一起來啟動container侈咕。就像MRv2一樣,jobclient請求用于MR AM運行的container器紧,設(shè)置環(huán)境變量和啟動命令耀销,然后交由NM去啟動MR AM,隨后map/reduce task就由MR AM全權(quán)負責(zé)铲汪,當(dāng)然task的啟動也是由MR AM向RM申請container熊尉,然后配合NM一起來啟動的。所以要想在yarn上運行非特定計算框架的程序掌腰,我們就得實現(xiàn)自己的client和applicationMaster狰住。另外我們自定義的AM需要放在各個NM的classpath下,因為AM可能運行在任何NM所在的機器上齿梁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末催植,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勺择,更是在濱河造成了極大的恐慌创南,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件省核,死亡現(xiàn)場離奇詭異稿辙,居然都是意外死亡,警方通過查閱死者的電腦和手機气忠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門邻储,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旧噪,你說我怎么就攤上這事吨娜。” “怎么了淘钟?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵宦赠,是天一觀的道長。 經(jīng)常有香客問我日月,道長袱瓮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任爱咬,我火速辦了婚禮,結(jié)果婚禮上绊起,老公的妹妹穿的比我還像新娘精拟。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布蜂绎。 她就那樣靜靜地躺著栅表,像睡著了一般。 火紅的嫁衣襯著肌膚如雪师枣。 梳的紋絲不亂的頭發(fā)上怪瓶,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音践美,去河邊找鬼洗贰。 笑死,一個胖子當(dāng)著我的面吹牛陨倡,可吹牛的內(nèi)容都是我干的敛滋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼兴革,長吁一口氣:“原來是場噩夢啊……” “哼绎晃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杂曲,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤庶艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后擎勘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體落竹,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年货抄,在試婚紗的時候發(fā)現(xiàn)自己被綠了述召。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟹地,死狀恐怖积暖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怪与,我是刑警寧澤夺刑,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站分别,受9級特大地震影響遍愿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耘斩,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一沼填、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧括授,春花似錦坞笙、人聲如沸岩饼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽籍茧。三九已至,卻和暖如春梯澜,著一層夾襖步出監(jiān)牢的瞬間寞冯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工晚伙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吮龄,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓撬腾,卻偏偏與公主長得像螟蝙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子民傻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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