Yarn取代job/task tracker
生活随笔
收集整理的這篇文章主要介紹了
Yarn取代job/task tracker
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://www.aboutyun.com/thread-7678-1-1.html
?
問題導(dǎo)讀: 1、什么是yarn? 2、Yarn 和MapReduce相比,它有什么特殊作用 ?背景 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框架的不足 l??JobTracker是集群事務(wù)的集中處理點,存在單點故障 l??JobTracker需要完成的任務(wù)太多,既要維護job的狀態(tài)又要維護job的task的狀態(tài),造成過多的資源消耗 l??在taskTracker端,用map/reduce task作為資源的表示過于簡單,沒有考慮到cpu、內(nèi)存等資源情況,當(dāng)把兩個需要消耗大內(nèi)存的task調(diào)度到一起,很容易出現(xiàn)OOM l??把資源強制劃分為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。
?
2、??資源監(jiān)視 Scheduler會周期性的接收來自NM的資源使用率的監(jiān)控信息,另外applicationMaster可以從Scheduler得到屬于它的已完成的container的狀態(tài)信息。?
3、??application提交 l??client向AsM獲得一個applicationID l??client將application定義以及需要的jar包文件等上傳到hdfs的指定目錄,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定 l??client構(gòu)造資源請求的對象以及application的提交上下文發(fā)送給AsM l??AsM接收application的提交上下文 l??AsM根據(jù)application的信息向Scheduler協(xié)商一個Container供applicationMaster運行,然后啟動applicationMaster l??向該container所屬的NM發(fā)送launchContainer信息啟動該container,也即啟動applicationMaster l??AsM向client提供運行著的AM的狀態(tài)信息。?
4、??AM的生命周期 AsM負(fù)責(zé)系統(tǒng)中所有AM的生命周期的管理。AsM負(fù)責(zé)AM的啟動,當(dāng)AM啟動后,AM會周期性的向AsM發(fā)送heartbeat,默認(rèn)是1s,AsM據(jù)此了解AM的存活情況,并且在AM失敗時負(fù)責(zé)重啟AM,若是一定時間過后(默認(rèn)10分鐘)沒有收到AM的heartbeat,AsM就認(rèn)為該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來負(fù)責(zé)維護RM的狀態(tài),這樣的設(shè)計只是一個最簡單的方案,避免了手動重啟RM,離真正的生產(chǎn)可用還有一段距離。 ? NodeManager NM主要負(fù)責(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)針對該計算模型的applicaitonMaster用以向RM申請資源運行task,比如運行在yarn上的spark框架也有對應(yīng)的applicationMaster實現(xiàn),歸根結(jié)底,yarn是一個資源管理的框架,并不是一個計算框架,要想在yarn上運行應(yīng)用程序,還得有特定的計算框架的實現(xiàn)。由于yarn是伴隨著MRv2一起出現(xiàn)的,所以下面簡要概述MRv2在yarn上的運行流程。
轉(zhuǎn)載于:https://www.cnblogs.com/augustone/p/6275720.html
總結(jié)
以上是生活随笔為你收集整理的Yarn取代job/task tracker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erlang md5
- 下一篇: 将war包发布到测试服的常用命令