本文會首先介紹Yarn上如何支持MapReduce編程模型,然後再闡述在Yarn上構建的編程模型和運行時環境的方法,最後總結使用Yarn構建分佈式系統的一些高級特性。
Yarn支持MapReduce編程模型
經過對編程模型的分析,編程模型是由作業執行邏輯、數據組織方式以及中間數據傳輸模式三個部分確定。Hadoop1.0版本,運行時環境和編程模型緊耦合,也就是編程模型這三部分全部耦合在分佈式執行框架中,因此,原Hadoop框架對於MapReduce的處理邏輯固定爲map->sort->shuffle->reduce的過程,執行任務分爲MapTask和ReduceTask。爲了對比Hadoop1.0和Yarn支持MapReduce編程模型的不同,我們在下文中分別介紹這兩種方式。
Hadoop1.0版本支持MapReduce編程模型的方式
Hadoop的JT-TT體系架構,JobSubmitter利用RPC proxy調用JobTracker實現的JobSubmissionProtocol接口,提交作業到JobTracker,在與TaskTracker的心跳交互過程中實現任務的分配和調度。
下面以一個作業的生命週期爲主線,介紹Hadoop1.0運行時環境如何支持一個MR作業的執行。
(1) JobClient初始化作業。根據用戶和系統的配置,創建作業相關的JobConf信息,爲作業創建臨時工作目錄,對輸入數據集進行切分,確定MapTask的個數,拷貝相關文件到JobTracker指定的文件系統。經過JobClient的初始化過程,作業執行的環境、和作業執行的相關信息已經準備就緒。
(2) JobTracker與TaskTracker交互過程,調度作業內子任務,維護作業和任務狀態信息。
JobInProgress維護了每一個作業的生命週期,它定義作業的4類子任務,分別爲setup、maps、reduces、cleanup。TaskTracker向JobTracker發送心跳信息,包含節點資源狀況、以及部署到TaskTracker上任務執行狀況的信息。TaskScheduler的assignTasks(TaskTracker)從JobInProgress獲得子任務,與TaskTracker進行條件匹配(例如Data-Local、Rack-Local等),選出的任務以及對於作業的清理工作會被封裝成Action,作爲JT向TT心跳調用的返回信息。
(3) TT執行子任務。TaskRunner的個數是系統之前配置的Map-slot、Reduce-slot個數決定的。根據TaskRunner執行任務的狀況,TT會及時向JT反饋結果。
總結一下,Hadoop1.0使用JobInProgress和JobTracker維護的作業和任務的狀態解析MapReduce作業,MapReduce編程模型被緊耦合在運行時環境中。
Yarn支持MapReduce編程模型的方式
Yarn是支持編程模型可擴展的分佈式資源平臺。Yarn維護NM節點內資源的狀態信息,負責NM節點資源的申請與釋放,Yarn以Container爲資源分配和使用的基本單位,配置資源使用的閾值,保證資源使用不越界。Yarn中提交的每一個作業對應一個Application,在RM-NM中創建AM執行作業邏輯控制,維護整個作業生命週期內任務的調度、資源申請等操作。MapReduce的AM實例由org.apache.hadoop.mapreduce.v2.app.MRAppMaster類來指定。它的啓動過程和一般的ApplicationMaster啓動過程類似,如下圖所示。
MR作業生命週期內,MRAppMaster負責作業的管理工作,執行流程如下圖所示。
上圖經過TaskAttempt一旦分配到Container,會在Container內啓動MapTaskImpl或者ReduceTaskImpl,從而啓動map、reduce過程。至此,Yarn就可以支持MapReduce編程模型了。
Yarn支持MapReduce編程模型,是將MapReduce作業內任務狀態的維護和調度控制交由MRAppMaster實現。MRAppMaster與Hadoop1.0中JobTracker對比關係如下。
|
Hadoop1.0 |
Hadoop-Yarn |
調度過程 |
TT-JT心跳互聯,JobClient提交作業,通過JobInProgress和TaskScheduler,完成任務與TT匹配和啓動。 |
org.apache.hadoop.mapreduce.v2. app.rm.RMContainerAllocator負責作業內任務和Container的匹配過程。
|
資源單位 |
Slot |
Container |
整體執行流程 |
中心控制模式 |
狀態機模式 |
轉自: http://blog.sina.com.cn/s/blog_4a1f59bf01014b83.html