YARN總結

覺得有幫助的,請多多支持博主,點贊關注哦~

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、執行推測任務的前提條件

  1. 每個 task 只能有一個備份任務;
  2. 當前 job 已完成的 task 必須不小於 0.05(5%)
  3. 開啓推測執行參數設置。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、不能啓用推測執行機制情況

  1. 任務間存在嚴重的負載傾斜;
  2. 特殊任務,比如任務向數據庫中寫數據。

5、算法原理

在這裏插入圖片描述

覺得有幫助的,請多多支持博主,點贊關注哦~

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