mapreduce機制及mapreduce任務的分析



由於經典的MapReducer(MapReduce1)的jobtracker負責作業的調度、任務進度監視、追蹤、重啓過慢的任務和進行任務登記,對於CPU的消耗非常大,而且jobtracker是與namenode在同一節點上,namenode的內存中還需要保存每個文件的各個塊的元數據信息,所以對於內存的消耗非常巨大,也因此成爲了mapreduce1的瓶頸。

對於節點超出4000的大型集羣,mapreduce1 就會達到瓶頸。因此YARN應運而生,YARN將作業的調度和任務進度的監控這兩種角色分成了兩個獨立的守護線程:ResourceManager 和 ApplicationMaster ,這樣就解決了mapreduce1的問題。


下面是我自己對於YARN的理解:

1. 每個Client 提交一個job,也就是一個application應用程序,client將job提交給ResourceManager,從ResourceManager得到新的作業id

2.  作業客戶端檢查作業的輸出說明,計算輸入分片,這裏跟mapreduce1是類似的,並將作業資源複製到HDFS上,然後提交作業。

3.當ResourceManager接收到submitApplication()後,將請求傳遞給調度器,調度器分配一個容器(這個容器就是用來啓動ApplicationMaster 的),資源管理器在nodemanager下啓動master進程。

4.接下來master進程來決定mapreduce任務的構成,也就是在哪些節點上去執行mapreduce任務,master進程通過與nodemanager的通信來啓動容器,在任務執行之前,首先會將任務執行需要的資源本地化,然後執行任務。

5.在YARN下運行時,任務每三秒通過umbilical接口向application master彙報任務進度,再由master報告給client,比起mapreduce1 的tasktracker向jobtracker彙報進度要更加輕快一點。

6.作業完成後,master和容器清理工作狀態,作業歷史服務器保存作業的信息供用戶需要時查詢。


以上是我對YARN 工作機制的理解,而且YARN的好處不僅是改進了mapreduce1這麼簡單,YARN不再是僅僅只爲mapreduce量身定製的環境了,比如在其上還可以跑spark程序,這個特性纔是YARN的真正厲害之處


這個圖是mapreduce任務的執行過程

1. mapper節點接收數據,並調用map方法對數據進行解析,輸出一系列的鍵值對

2.每個map任務都有一個環形內存緩衝區,默認100M,一旦緩衝內容達到閾值,一個後臺線程就會將溢出內容的spill到磁盤上,在這個過程中對內容按照key進行分區和排序

3.當map任務結束,就會產生一個已經分區好的並且排序過的輸出文件

4.按照不同的分區,reduce節點會複製屬於自己分區的文件,因爲map節點很多,所以reduce節點會將所有map節點的輸出結果中屬於自己分區的文件都複製一份

5.在執行reduce任務之前,reduce節點會對這些複製的文件在進行一次merge,就是對同一key的鍵值對進行合併,並對其按照key排序,如果我們調用了setGroupingComparatorClass()方法的話,會在將鍵值對進行分組後作爲reduce的輸入,每組調用一次reduce方法。

6.reduce方法執行完成後輸出最終的結果,並按照job配置的輸出路徑寫入到設置的路徑;


以上是我對於YARN下mapreduce的工作機制以及mapreduce任務的理解。因爲我也是初學者,所以可能對於有的地方敘述的不到位,希望各位讀者朋友能夠指正。


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