覺得有幫助的,請多多支持博主,點贊關注哦~
文章目錄
Yarn
一、Yarn 概述
Yarn 是一個資源調度平臺,負責爲運算程序提供服務器運算資源,相當於一個分佈式的操作系統平臺,而 MapReduce 等運算程序則相當於運行於操作系統之上的應用程序。
二、Yarn 基本架構
YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等組件構成。
三、Yarn 工作機制
工作機制詳解:
- (0)Mr 程序提交到客戶端所在的節點。
- (1)Yarnrunner 向 Resourcemanager 申請一個 Application。
- (2)rm 將該應用程序的資源路徑返回給 yarnrunner。
- (3)該程序將運行所需資源提交到 HDFS 上。
- (4)程序資源提交完畢後,申請運行 mrAppMaster。
- (5)RM 將用戶的請求初始化成一個 task。
- (6)其中一個 NodeManager 領取到 task 任務。
- (7)該 NodeManager 創建容器 Container,併產生 MRAppmaster。
- (8)Container 從 HDFS 上拷貝資源到本地。
- (9)MRAppmaster 向 RM 申請運行 maptask 資源。
- (10)RM 將運行 maptask 任務分配給另外兩個 NodeManager,另兩個 NodeManager 分別領取任務並創建容器。
- (11)MR 向兩個接收到任務的 NodeManager 發送程序啓動腳本,這兩個 NodeManager分別啓動 maptask,maptask 對數據分區排序。
- (12)MrAppMaster 等待所有 maptask 運行完畢後,向 RM 申請容器,運行 reduce task。
- (13)reduce task 向 maptask 獲取相應分區的數據。
- (14)程序運行完畢後,MR 會向 RM 申請註銷自己。
四、作業提交全過程
作業提交全過程詳解:
- (1)作業提交
第 0 步:client 調用 job.waitForCompletion 方法,向整個集羣提交 MapReduce 作業。
第 1 步:client 向 RM 申請一個作業 id。
第 2 步:RM 給 client 返回該 job 資源的提交路徑和作業 id。
第 3 步:client 提交 jar 包、切片信息和配置文件到指定的資源提交路徑。
第 4 步:client 提交完資源後,向 RM 申請運行 MrAppMaster。 - (2)作業初始化
第 5 步:當 RM 收到 client 的請求後,將該 job 添加到容量調度器中。
第 6 步:某一個空閒的 NM 領取到該 job。
第 7 步:該 NM 創建 Container,併產生 MRAppmaster。
第 8 步:下載 client 提交的資源到本地。 - (3)任務分配
第 9 步:MrAppMaster 向 RM 申請運行多個 maptask 任務資源。
第 10 步:RM 將運行 maptask 任務分配給另外兩個 NodeManager,另兩個 NodeManager分別領取任務並創建容器。 - (4)任務運行
第 11 步:MR 向兩個接收到任務的 NodeManager 發送程序啓動腳本,這兩個NodeManager 分別啓動 maptask,maptask 對數據分區排序。
第 12 步:MrAppMaster 等待所有 maptask 運行完畢後,向 RM 申請容器,運行 reduce task。
第 13 步:reduce task 向 maptask 獲取相應分區的數據。
第 14 步:程序運行完畢後,MR 會向 RM 申請註銷自己。 - (5)進度和狀態更新
YARN 中的任務將其進度和狀態(包括 counter)返回給應用管理器, 客戶端每秒(通過mapreduce.client.progressmonitor.pollinterval 設置)嚮應用管理器請求進度更新, 展示給用戶。 - (6)作業完成
除了嚮應用管理器請求作業進度外, 客戶端每 5 分鐘都會通過調用 waitForCompletion()來檢查作業是否完成。時間間隔可以通過 mapreduce.client.completion.pollinterval 來設置。作業完成之後, 應用管理器和 container 會清理工作狀態。作業的信息會被作業歷史服務器存儲以備之後用戶覈查。
五、資源調度器
目前,Hadoop 作業調度器主要有三種:FIFO、Capacity Scheduler 和 Fair Scheduler。
Hadoop2.7.2 默認的資源調度器是 Capacity Scheduler。
具體設置詳見:yarn-default.xml 文件
<property>
<description>The class to use as the resource scheduler.</description>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
1、先進先出調度器(FIFO)
2、容量調度器(Capacity Scheduler)
3、公平調度器(Fair Scheduler)
六、任務的推測執行
1、作業完成時間取決於最慢的任務完成時間
一個作業由若干個 Map 任務和 Reduce 任務構成。因硬件老化、軟件 Bug 等,某些任務可能運行非常慢。
典型案例:系統中有 99%的 Map 任務都完成了,只有少數幾個 Map 老是進度很慢,完不成,怎麼辦?
2、推測執行機制:
發現拖後腿的任務,比如某個任務運行速度遠慢於任務平均速度。爲拖後腿任務啓動一個備份任務,同時運行。誰先運行完,則採用誰的結果。
3、執行推測任務的前提條件
- 每個 task 只能有一個備份任務;
- 當前 job 已完成的 task 必須不小於 0.05(5%)
- 開啓推測執行參數設置。Hadoop2.7.2 mapred-site.xml 文件中默認是打開的。
<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
</property>
<property>
<name>mapreduce.reduce.speculative</name>
<value>true</value>
</property>
4、不能啓用推測執行機制情況
- 任務間存在嚴重的負載傾斜;
- 特殊任務,比如任務向數據庫中寫數據。
5、算法原理
覺得有幫助的,請多多支持博主,點贊關注哦~