Yarn在Hadoop中的位置

Yarn的優(yōu)點
- YARN把JobTracker分為ResouceManager和ApplicationMaster,ResouceManager專管整個集群的資源管理和調(diào)度,而ApplicationMaster則負責應用程序的任務調(diào)度和容錯等
- YARN不再是一個單純的計算框架,而是一個框架管理器,用戶可以將各種各樣的計算框架移植到Y(jié)ARN之上,由YARN進行統(tǒng)一管理和資源分配
- 對于資源的表示以內(nèi)存和CPU為單位,比之前slot 更合理(slot是 Hadoop的資源單位,Hadoop利用slots來管理分配節(jié)點的資源。每個Job申請資源以slots為單位)hadoop中slot簡介(map slot 和 reduce slot)
Yarn架構(gòu)

YARN主要由ResouceManager、NodeManager、ApplicationMaster和Container等4個組件構(gòu)成
ResourceManager :
處理客戶端請求
啟動和監(jiān)控ApplicationMaster
監(jiān)控NodeManager
資源的分配與調(diào)度
NodeManager:
管理單個節(jié)點上的資源
處理來自ResourceManager的命令
處理來自ApplicationMaster的命令
ApplicationMaster:
為應用程序申請資源并分配給內(nèi)部的任務
任務的監(jiān)控與容錯
Container:
對任務運行環(huán)境進行抽象,封裝CPU、內(nèi)存等資源
MapRuduce在Yarn中的工作機制


1)客戶端向resourcemanager發(fā)送job請求,客戶端產(chǎn)生Runjar進程與resourcemanager通過rpc通信
2)resourcemanager向客戶端 回Job相關(guān)資源的提交路徑以以及jobID
3)客戶端將Job相關(guān)的資源提交到相應的共享文件系統(tǒng)的路徑下(eg.HDFS)
4)客戶端向resourcemanager提交job
5)resourcemanager通過調(diào)度器在nodemanager創(chuàng)建一個容器,并在容器中啟用 MRAppMaster進程(該進程由resourcemanager啟動)。
6)該MRAppMaster進程對作業(yè)進行初始化,創(chuàng)建多個對象對作業(yè)進行跟蹤。
7)MRAppMaster從共享文件系統(tǒng)中獲得計算到的輸入分片(只獲取分片信息,不需要jar等相關(guān)資源),為每一個分片創(chuàng)建一個map以及指定數(shù)量的reduce對象。之后 MRAppMaster決定如何運行構(gòu)成mapreduce作業(yè)的各個任務,如果作業(yè)很小,則與 MRAppMaster在同一個JVM上運行
8)若作業(yè)很大,則MRAppMaster會為所有map任務和reduce任務向resourcemanager發(fā)起申請容器資源請求。請求中包含了map任務的數(shù)據(jù)本地化信息以及輸入分片等信息。
9)Resourcemanager為任務分配了容器之后,MRAppMaster就通過與NodeManager通信啟動容器,由MRAppMaster負責分配在那些nodemanager上運行map(即 YarnChild進程)和reduce任務。
10)運行map和reduce任務的nodemanager從系統(tǒng)中獲取job相關(guān)資源,包括 jar文件,配置文件等。
11)運行map和reduce任條。
12)關(guān)于狀態(tài)的檢測與更新不經(jīng)過resourcemanager:任務周期性的向MRAppMaster匯報狀態(tài)及進度,客戶端每秒鐘通過查詢一次MRAppMaster獲取狀態(tài)更新信息。
注意:http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-resource-manager/
1.由于resourcemanager負責資源的分配,當NodeManager啟動時,會向 ResourceManager注冊,而注冊信息中會包含該節(jié)點可分配的CPU和內(nèi)存總量
2.YARN的資源分配過程是異步的,也就是說,資源調(diào)度器將資源分配給一個application后,不會立刻push給對應的ApplicaitonMaster,而是暫時放到一個緩沖區(qū)中,等待 ApplicationMaster通過周期性的RPC函數(shù)主動來取。
容錯
RM:HA方案避免單點故障
AM:AM向RM周期性發(fā)送心跳,出故障后RM會啟動新的AM,受最大失敗次數(shù)限制
NM:周期性RM發(fā)送心跳,如果一定時間內(nèi)沒有發(fā)送,RM 就認為該NM 掛掉了,或者NM上運行的Task失敗次數(shù)太多,就會把上面所有任務調(diào)度到其它NM上
Task:Task也可能運行掛掉,比如內(nèi)存超出了或者磁盤掛掉了,NM會匯報AM,AM會把該Task調(diào)度到其它節(jié)點上,但受到重試次數(shù)的限制
資源調(diào)度和資源隔離機制
資源調(diào)度由ResourceManager完成,而資源隔離由各個NodeManager實現(xiàn)。
資源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的調(diào)度器負責資源的分配,而NodeManager則負責資源的供給和隔離,ResourceManager將NodeManager上資源分配給任務后,NodeManager需按照要求為任務提供相應的資源,甚至保證這些資源應具有獨占性,為任務運行提供基礎(chǔ)的保證,這就是所謂的資源隔離。
Yarn中同時支持內(nèi)存和CPU兩種資源的調(diào)度(默認是支持內(nèi)存的)
內(nèi)存資源調(diào)度:
采用進程監(jiān)控的方案,為每一個NodeManager啟動一個監(jiān)控線程監(jiān)控每個container內(nèi)存使用情況,一旦發(fā)現(xiàn)超過約定的資源量,則會將其殺死。
默認情況下,NodeManager不會對CPU資源進行任務隔離,你可以通過啟用CGroup來支持CPU隔離。
CPU資源按照百分比進行使用和隔離。