大數據系列之Hadoop的資源管理模塊YARN

CDA數據分析師 出品

1、 YARN的產生

在之前文章中介紹過hadoop1與hadoop2架構的區別是hadoop2將資源管理功能從MapReduce框架中獨立出來,也就是現在的YARN模塊。

在沒有 YARN 之前,是一個集羣一個計算框架。比如:MapReduce 一個集羣、Spark 一個集羣、HBase 一個集羣等。

造成各個集羣管理複雜,資源的利用率很低;比如:在某個時間段內 Hadoop 集羣忙而Spark 集羣閒着,反之亦然,各個集羣之間不能共享資源造成集羣間資源並不能充分利用。

並且採用"一個框架一個集羣"的模式,也需要多個管理員管理這些集羣, 進而增加運維成本;而共享集羣模式通常需要少數管理員即可完成多個框架的統一管理; 隨着數據量的暴增,跨集羣間的數據移動不僅需要花費更長的時間,且硬件成本也會大大增加;而共享集羣模式可讓多種框架共享數據和硬件資源,將大大減少數據移動帶來的成本。

解決辦法:

將所有的計算框架運行在一個集羣中,共享一個集羣的資源,按需分配;Hadoop 需要資源就將資源分配給 Hadoop,Spark 需要資源就將資源分配給 Spark,進而整個集羣中的資源利用率就高於多個小集羣的資源利用率;

2、 YARN的基本構成

Master/Slave 結構,1 個ResourceManager(RM)對應多個 NodeManager(NM);YARN 由 Client、ResourceManager、NodeManager、ApplicationMaster (AM)組成;Client 向 RM 提交任務、殺死任務等;

AM由對應的應用程序完成;

每個應用程序對應一個 AM,AM向RM申請資源用於在NM上啓動相應的 Task;NM 向 RM通過心跳信息:彙報 NM健康狀況、任務執行狀況、領取任務等;

RM:整個集羣只有一個,負責集羣資源的統一管理和調度

1)處理來自客戶端的請求(啓動/殺死應用程序);

2)啓動/監控 AM;一旦某個 AM 掛了之後,RM 將會在另外一個節點上啓動該 AM;

3)監控 NM,接收 NM的心跳彙報信息並分配任務到 NM去執行;一旦某個 NM掛了,標誌下該 NM 上的任務,來告訴對應的 AM 如何處理;

4)負責整個集羣的資源分配和調度;

NM:整個集羣中有多個,負責單節點資源管理和使用

1)週期性向 RM彙報本節點上的資源使用情況和各個 Container 的運行狀;

2)接收並處理來自 RM 的 Container 啓動/停止的各種命令;

3)處理來自 AM的命令;

4)負責單個節點上的資源管理和任務調度;

AM:每個應用一個,負責應用程序的管理

1)數據切分;

2)爲應用程序/作業向 RM 申請資源(Container),並分配給內部任務;

3)與 NM通信以啓動/停止任務;

4)任務監控和容錯(在任務執行失敗時重新爲該任務申請資源以重啓任務);

5)處理 RM發過來的命令:殺死 Container、讓 NM重啓等;

Container:對任務運行環境的抽象

1)任務運行資源(節點、內存、CPU);

2)任務啓動命令;

3)任務運行環境;任務是運行在Container中,一個Container中既可以運行AM也可以運行具體的 Map/Reduce/MPI/Spark Task;

3、 YARN的工作原理

1)用戶向 YARN 中提交應用程序/作業,其中包括 ApplicaitonMaster 程序、啓動ApplicationMaster 的命令、用戶程序等;

2)ResourceManager 爲作業分配第一個 Container,並與對應的 NodeManager 通信,要求它在這個 Containter 中啓動該作業的 ApplicationMaster;

3 )ApplicationMaster 首 先 向 ResourceManager 注 冊 , 這 樣 用 戶 可 以 直 接 通 過ResourceManager 查詢作業的運行狀態;然後它將爲各個任務申請資源並監控任務的運行狀態,直到運行結束。即重複步驟 4-7;

4)ApplicationMaster 採用輪詢的方式通過 RPC 請求向 ResourceManager 申請和領取資源;

5)一旦 ApplicationMaster 申請到資源後,便與對應的 NodeManager 通信,要求它啓動任務;

6)NodeManager 啓動任務;

7)各個任務通過 RPC 協議向 ApplicationMaster 彙報自己的狀態和進度,以讓ApplicaitonMaster 隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;在作業運行過程中,用戶可隨時通過 RPC 向 ApplicationMaster 查詢作業當前運行狀態;

8)作業完成後,ApplicationMaster 向 ResourceManager 註銷並關閉自己;

4、 YARN的容錯性

ResourceMananger基於 ZooKeeper 實現 HA 避免單點故障;

NodeManager執行失敗後,ResourceManager 將失敗任務告訴對應的 ApplicationMaster;

由 ApplicationMaster 決定如何處理失敗的任務;

ApplicationMaster執行失敗後,由 ResourceManager 負責重啓;

ApplicationMaster 需處理內部任務的容錯問題;

RMAppMaster 會保存已經運行完成的 Task,重啓後無需重新運行。

5、 YARN的調度框架

1、雙層調度框架

1)ResourceManager 將資源分配給 ApplicationMaster;

2)ApplicationMaster 將資源進一步分配給各個 TASK;

2、基於資源預留的調度策略

1)資源不夠時,會爲 Task 預留,直到資源充足;描述:當一個 Task 需要 10G 資源時,各個節點都不足 10G,那麼就選擇一個節點,但是某個 NodeManager上只有 2G, 那麼就在這個 NodeManager上預留, 當這個 NodeManager上釋放其他資源後,會將資源預留給 10G 的作業,直到攢夠 10G 時,啓動 Task;缺點:資源利用率不高,要先攢着,等到 10G 才利用,造成集羣的資源利用率低;

2)與"all or nothing"策略不同(Apache Mesos)描述:當一個作業需要 10G 資源時,節點都不足 10G,那就慢慢等,等到某個節點上有 10G 空閒資源時再運行,很可能會導致該 Task 餓死。

疫情當下,昔日匆匆的步伐終於放慢了些,也是時候好好想想自己的職業計劃和人生規劃了。提前做好準備,未雨綢繆,爲未來蓄能——蓄勢待發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章