【MapReduce】MapReduce工作機制

一個mapreduce作業,一般分爲兩階段執行:map階段和reduce階段,下面分別對這兩階段進行介紹。

Map階段

在這裏插入圖片描述

Map階段又分爲五部分:讀取文件階段,MapTask階段,collect階段,溢寫階段,combine階段。
首先客戶端把待處理文件分片信息、jar包信息、參數信息等提交到HDFS。然後Yarn集羣接受任務,啓動AppMaster把任務分配NodeManager,並由NodeManager執行MapTask任務。從上圖的第6步開始,進入讀取文件階段。

  1. 讀取文件階段
    MapTask通過用戶編寫的RecordReader,從輸入的分片中解析出一個個的k-v對;
  2. MapTask階段
    每個k-v對調用一次map()函數,輸出新的k-v對;
  3. Collect階段
    MapTask階段輸出的k-v對會先進入環形緩衝區,默認內存大小爲100M。在環形緩衝區中,數據進行分區、排序等;
  4. 溢寫階段
    當環形緩衝區寫滿80%,數據從內存溢寫到hdfs,持續多輪以後會產生多個溢寫文件。溢寫之前,數據會先按分區,再按key排序;
  5. Combine階段
    當MapTask結束時,多個溢寫文件會被合併成一個大的文件。Combine可以把文件中的k-v對數據排列的更緊密一些,減少網絡傳輸I/O。

Reduce階段

在這裏插入圖片描述

Reduce階段分爲四部分:Copy階段、Merge階段、sort階段、Reduce階段

  1. Copy階段
    ReduceTask從各個MapTask上遠程拷貝一片數據,如果其大小超過一定閾值,則寫到磁盤上,否則直接放到內存中;
  2. Merge階段
    遠程拷貝文件的同時,ReduceTask啓動兩個後臺線程對內存和磁盤上的文件進行合併,以防止內存使用過多或磁盤上文件過多;
  3. sort階段
    爲了將key相同的數據聚在一起,Hadoop採用了基於排序的策略。由於各個MapTask已經實現了對自己處理結果的局部排序,此步中只需對所有數據進行一次歸併排序;
  4. Reduce階段
    以上步驟處理後的數據調用reduce()函數,每個k-v調用一次。最後把輸出文件寫到HDFS中。

以上就是對MapReduce工作機制的簡單說明,如有錯誤的地方,還望指正。

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