Yarn詳解
問題導讀:
1、什麼是yarn?
2、Yarn 和MapReduce相比,它有什麼特殊作用 ?
背景
Yarn是一個分散式的資源管理系統,用以提高分散式的叢集環境下的資源利用率,這些資源包括記憶體、IO、網路、磁碟等。其產生的原因是為了解決原MapReduce框架的不足。最初MapReduce的committer們還可以週期性的在已有的程式碼上進行修改,可是隨著程式碼的增加以及原MapReduce框架設計的不足,在原MapReduce框架上進行修改變得越來越困難,所以MapReduce的committer們決定從架構上重新設計MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的擴充套件性、可用性、可靠性、向後相容性和更高的資源利用率以及能支援除了MapReduce計算框架外的更多的計算框架。
原MapReduce框架的不足
l JobTracker是叢集事務的集中處理點,存在單點故障
l JobTracker需要完成的任務太多,既要維護job的狀態又要維護job的task的狀態,造成過多的資源消耗
l 在taskTracker端,用map/reduce task作為資源的表示過於簡單,沒有考慮到cpu、記憶體等資源情況,當把兩個需要消耗大記憶體的task排程到一起,很容易出現OOM
l 把資源強制劃分為map/reduce slot,當只有map task時,reduce slot不能用;當只有reduce task時,map slot不能用,容易造成資源利用不足。
Yarn架構
Yarn/MRv2最基本的想法是將原JobTracker主要的資源管理和job排程/監視功能分開作為兩個單獨的守護程式。有一個全域性的ResourceManager(RM)和每個Application有一個ApplicationMaster(AM),Application相當於map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)組成了基本的資料計算框架。ResourceManager協調叢集的資源利用,任何client或者執行著的applicatitonMaster想要執行job或者task都得向RM申請一定的資源。ApplicatonMaster是一個框架特殊的庫,對於MapReduce框架而言有它自己的AM實現,使用者也可以實現自己的AM,在執行的時候,AM會與NM一起來啟動和監視tasks。
ResourceManager
ResourceManager作為資源的協調者有兩個主要的元件:Scheduler和ApplicationsManager(AsM)。
Scheduler負責分配最少但滿足application執行所需的資源量給Application。Scheduler只是基於資源的使用情況進行排程,並不負責監視/跟蹤application的狀態,當然也不會處理失敗的task。RM使用resource container概念來管理叢集的資源,resource container是資源的抽象,每個container包括一定的記憶體、IO、網路等資源,不過目前的實現只包括記憶體一種資源。
ApplicationsManager負責處理client提交的job以及協商第一個container以供applicationMaster執行,並且在applicationMaster失敗的時候會重新啟動applicationMaster。下面闡述RM具體完成的一些功能。
1、 資源排程
Scheduler從所有執行著的application收到資源請求後構建一個全域性的資源分配計劃,然後根據application特殊的限制以及全域性的一些限制條件分配資源。
2、 資源監視
Scheduler會週期性的接收來自NM的資源使用率的監控資訊,另外applicationMaster可以從Scheduler得到屬於它的已完成的container的狀態資訊。
3、 application提交
l client向AsM獲得一個applicationID
l client將application定義以及需要的jar包檔案等上傳到hdfs的指定目錄,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定
l client構造資源請求的物件以及application的提交上下文傳送給AsM
l AsM接收application的提交上下文
l AsM根據application的資訊向Scheduler協商一個Container供applicationMaster執行,然後啟動applicationMaster
l 向該container所屬的NM傳送launchContainer資訊啟動該container,也即啟動applicationMaster
l AsM向client提供執行著的AM的狀態資訊。
4、 AM的生命週期
AsM負責系統中所有AM的生命週期的管理。AsM負責AM的啟動,當AM啟動後,AM會週期性的向AsM傳送heartbeat,預設是1s,AsM據此瞭解AM的存活情況,並且在AM失敗時負責重啟AM,若是一定時間過後(預設10分鐘)沒有收到AM的heartbeat,AsM就認為該AM失敗了。
關於ResourceManager的可用性目前還沒有很好的實現,不過Cloudera公司的CDH4.4以後的版本實現了一個簡單的高可用性,使用了Hadoop-common專案中HA部分的程式碼,採用了類似hdfs namenode高可用性的設計,給RM引入了active和standby狀態,不過沒有與journalnode相對應的角色,只是由zookeeper來負責維護RM的狀態,這樣的設計只是一個最簡單的方案,避免了手動重啟RM,離真正的生產可用還有一段距離。
NodeManager
NM主要負責啟動RM分配給AM的container以及代表AM的container,並且會監視container的執行情況。在啟動container的時候,NM會設定一些必要的環境變數以及將container執行所需的jar包、檔案等從hdfs下載到本地,也就是所謂的資源本地化;當所有準備工作做好後,才會啟動代表該container的指令碼將程式啟動起來。啟動起來後,NM會週期性的監視該container執行佔用的資源情況,若是超過了該container所宣告的資源量,則會kill掉該container所代表的程式。
另外,NM還提供了一個簡單的服務以管理它所在機器的本地目錄。Applications可以繼續訪問本地目錄即使那臺機器上已經沒有了屬於它的container在執行。例如,Map-Reduce應用程式使用這個服務儲存map output並且shuffle它們給相應的reduce task。
在NM上還可以擴充套件自己的服務,yarn提供了一個yarn.nodemanager.aux-services的配置項,通過該配置,使用者可以自定義一些服務,例如Map-Reduce的shuffle功能就是採用這種方式實現的。
NM在本地為每個執行著的application生成如下的目錄結構:
Container目錄下的目錄結構如下:
在啟動一個container的時候,NM就執行該container的default_container_executor.sh,該指令碼內部會執行launch_container.sh。launch_container.sh會先設定一些環境變數,最後啟動執行程式的命令。對於MapReduce而言,啟動AM就執行org.apache.hadoop.mapreduce.v2.app.MRAppMaster;啟動map/reduce task就執行org.apache.hadoop.mapred.YarnChild。
ApplicationMaster
ApplicationMaster是一個框架特殊的庫,對於Map-Reduce計算模型而言有它自己的applicationMaster實現,對於其他的想要執行在yarn上的計算模型而言,必須得實現針對該計算模型的applicaitonMaster用以向RM申請資源執行task,比如執行在yarn上的spark框架也有對應的applicationMaster實現,歸根結底,yarn是一個資源管理的框架,並不是一個計算框架,要想在yarn上執行應用程式,還得有特定的計算框架的實現。由於yarn是伴隨著MRv2一起出現的,所以下面簡要概述MRv2在yarn上的執行流程。
MRv2執行流程:
1、 MR JobClient向resourceManager(AsM)提交一個job
2、 AsM向Scheduler請求一個供MR AM執行的container,然後啟動它
3、 MR AM啟動起來後向AsM註冊
4、 MR JobClient向AsM獲取到MR AM相關的資訊,然後直接與MR AM進行通訊
5、 MR AM計算splits併為所有的map構造資源請求
6、 MR AM做一些必要的MR OutputCommitter的準備工作
7、 MR AM向RM(Scheduler)發起資源請求,得到一組供map/reduce task執行的container,然後與NM一起對每一個container執行一些必要的任務,包括
資源本地化等
8、 MR AM 監視執行著的task 直到完成,當task失敗時,申請新的container執行失敗的task
9、 當每個map/reduce task完成後,MR AM執行MR OutputCommitter的cleanup 程式碼,也就是進行一些收尾工作
10、當所有的map/reduce完成後,MR AM執行OutputCommitter的必要的job commit或者abort APIs
11、MR AM退出。
在Yarn上寫應用程式
在yarn上寫應用程式並不同於我們熟知的MapReduce應用程式,必須牢記yarn只是一個資源管理的框架,並不是一個計算框架,計算框架可以執行在yarn上。我們所能做的就是向RM申請container,然後配合NM一起來啟動container。就像MRv2一樣,jobclient請求用於MR AM執行的container,設定環境變數和啟動命令,然後交由NM去啟動MR AM,隨後map/reduce task就由MR AM全權負責,當然task的啟動也是由MR AM向RM申請container,然後配合NM一起來啟動的。所以要想在yarn上執行非特定計算框架的程式,我們就得實現自己的client和applicationMaster。另外我們自定義的AM需要放在各個NM的classpath下,因為AM可能執行在任何NM所在的機器上。
相關文章
- Hadoop Yarn框架詳細解析HadoopYarn框架
- yarn詳細入門教程Yarn
- 前端 Vue yarn.lock檔案:詳解和使用指南前端VueYarn
- 詳解:Hadoop生態元件Yarn之長期執行服務支援篇!Hadoop元件Yarn
- Hadoop 學習系列(三)之 YARN 詳細解析HadoopYarn
- Node入門教程(7)第五章:node 模組化(下) npm與yarn詳解NPMYarn
- YARNYarn
- yarn - 忽略版本號要求 yarn installYarn
- Spark:Yarn-client與Yarn-clusterSparkYarnclient
- yarn 命令Yarn
- yarn install,yarn add,NPM run dev 報錯YarnNPMdev
- npm和yarnNPMYarn
- Yarn 安裝Yarn
- 12 Spark on YARNSparkYarn
- node中安裝yarn(nodejs Yarn替代npm包管理)YarnNodeJSNPM
- 關於 larabbs yarn 安裝加速不能用解決方案Yarn
- 使用yarn代替npmYarnNPM
- Spark on Yarn 實踐SparkYarn
- hadoop_MapReduce yarnHadoopYarn
- HADOOP-YARN-JDKHadoopYarnJDK
- yarn certificate has expiredYarn
- yarn socket connection timeoutYarn
- Hadoop YARN 架構HadoopYarn架構
- Yarn執行原理Yarn
- yarn add cross-env 出現 protocol error, symlink 解決方案YarnROSProtocolError
- yarn的安裝,並使用yarn安裝vue腳手架YarnVue
- Spark on Yarn 和Spark on MesosSparkYarn
- yarn 與 npm 比較YarnNPM
- 搭建spark on yarn 叢集SparkYarn
- Yarn的排程器Yarn
- spark 與 yarn 結合SparkYarn
- Yarn資源排程Yarn
- Hadoop-Yarn架構HadoopYarn架構
- Flink On YARN 遠端 debugYarn
- npx & yarn create & npm initYarnNPM
- Yarn資源隔離Yarn
- YARN 核心原始碼分析Yarn原始碼
- windows 下安裝 yarnWindowsYarn
- http協議/cookie詳解/session詳解HTTP協議CookieSession