yarn的詳解

yarn是什麼?

yarn是hadoop集羣的資源管理系統,是hadoop2中引入的。最初的目的是爲了改善MapReduce的實現。

hadoop爲什麼引入yarn?

解釋這個問題之前我們先來了解一下hadoop1中mapreduce的運行機制。

具體流程如下:
1).客戶端通過submit()方法提交作業

2).submit()方法會創建一個內部的JobSummiter實例,並且調用submitJobInternal()方法提交作業,JobSummiter向JobTracker請求一個新的作業ID,該實例會檢查本次作業是否可執行(比如:檢查輸出路徑,計算作業的輸入分片等),如果可執行會將運行所需要的作業資源(JAR、配置文件等)上傳到文件系統(HDFS),

3).JobTracker接受到提交任務請求後,會放到一個內部隊列裏中,交由作業調度器(Job Scheduler)進行調度並初始化任務,從文件系統中獲取客戶端已經好的輸入分片,(每個分片計算一個map),reduce任務數量由setNumReduceTask()方法設置

4).TaskTracker會定期向JobTracker發送「心跳」,表明TaskTracker是否存活,同時「心跳」是兩者之間的消息通道,當TaskTracker空閒後,會通過「心跳」發送給JobTracker,然後JobTracker會爲它分配任務。

5).TaskTracker接收到JobTracker分配的任務後,從分佈式文件系統中JAR文件複製到本地,開始運行任務。任務運行過程中TaskTracker會定期通過「心跳」會將任務的狀態及運行情況告知JobTracker

6).JobTracker接收到最後一個任務已完成的通知後,Job會打印一條消息告知用戶,然後從waitForCompletion()方法返回,同時Job的統計信息及計數值也會打印到控制檯

 通過對上述工作原理的剖析我們可以發現。在hadoop1中mapredeuce的運行中有兩個問題:

1.jobtracker同時負責作業的調度(將任務與tasktracker匹配)和任務進程的監控(跟蹤任務,重啓失敗,或遲緩的任務,記錄任務流水),那麼就存在一個單點故障的問題。

2.正對taskTracker,在taskTracker端,用map/reduce task作爲資源的表示過於簡單,沒有考慮到CPU、內存等資源情況,當把兩個需要消耗大內存的task調度到一起,很容易出現OOM。另外。把資源強制劃分爲map/reduce slot,當只有map task時,reduce slot不能用;當只有reduce task時,map slot不能用,容易造成資源利用不足。

所以爲了解決上邊的問題。hadoop引入了yarn

yarn的整體描述

yarn的核心組件

 yarn的工作流程

 

具體流程如下:
步驟1)和2)通MapReduce相似,不同的是作業ID是從資源管理器(RM)中獲取,而不是JobTracker,在YARN中命名法中它是一個應用程序ID,最後調用submitApplication()方法提交作業

3).資源管理器收到作業請求後,便把請求傳遞給調度器,調度器分配一個容器,然後資源管理器在節點管理器的管理下在容器中啓動應用程序的master進程。

4).master進程是一個java應用程序,它的主類是MRAppMaster,它對作業進行初始化:通過創建多個薄記對象以保持對作業進度的跟蹤,因爲它將接受來自任務的進度和完成報告。

5).master接受來自HDFS在客戶端計算的輸入分片,對每個分片創建一個map任務對象以及由mapreduce.job.reduces屬性確定的多個reduce任務對象。

6).如果作業不適合在單個節點上運行,那麼application master就會爲該作業中的所有map任務和reduce任務向資源管理器請求容器,附着心跳信息的請求包括每個map任務的數據本地化信息,特別是輸入分片所在的主機和相應機架信息,調度器使用這些信息來做調度決策,先數據本地化,再機架本地化。

7).一旦資源管理器的調度器爲任務分配了容器,application master就通過與節點管理器通信來啓動容器,在運行任務之前,首先將任務所需要的資源本地化,包括作業的配置、jar文件和所有來自分佈式緩存的文件,然後執行map任務或reduce任務。

yarn的核心組件的詳解

yarn的核心組件之AM:Yarn 中每個應用都會啓動一個AM,負責向RM申請資源,請求NM啓動Container,並告訴Container做什麼事情

yarn的核心組件之RM:負責協調集羣上計算資源的分配

yarn的核心組件之NM:負責啓動和監視集羣中機器上的計算容器(Container)

 

 

yarn的核心組件之container:資源容器,YARN中所有的應用都是在container之上運行的。AM也是在container上運行的,不過AM的container是RM申請的