MapReduce工作機制總結
總結從MapReduce程序中的JobClient.runJob(conf)開始,給出了MapReduce執行的流程圖(如下),并分析了流程圖中的四個核心實體,結合實際代碼介紹了MapReduce執行的詳細流程。
MapReduce的執行流程簡單概括如下:
- 用戶作業執行JobClient.runJob(conf)代碼會在Hadoop集群上將其啟動。
- 啟動之后JobClient實例會向JobTracker獲取JobId,而且客戶端會將作業執行需要的作業資源復制到HDFS上,然后將作業提交給JobTracker。
- JobTracker在本地初始化作業,再從HDFS作業資源中獲取作業輸入的分割信息,根據這些信息JobTracker將作業分割成多個任務,然后分配給在與JobTracker心跳通信中請求任務的TaskTracker。
- TaskTracker接收到新的任務之后會首先從HDFS上獲取作業資源,包括作業配置信息和本作業分片的輸入,然后在本地啟動一個JVM并執行任務。
- 任務結束后將結果寫回HDFS。
介 紹完MapReduce作業的詳細流程后,還重點介紹了MapReduce中采用的兩種機制,分別是錯誤處理機制和作業調度機制。在錯誤處理機制中,如果 遇到硬件故障,MapReduce會將故障節點上的任務分配給其他節點處理。如果是任務失敗,則會重新執行。在作業調度機制中,主要介紹了公平調度器。這 種策略能夠按照提交作業的用戶數目將資源公平的分到用戶的作業池中,以達到用戶公平共享整個集群的目的。
最 后介紹了MapReduce中兩個流程的細節,分別是shuffle和任務執行。在shuffle中,從代碼入手介紹了Map端和Reduce端的 shuffle過程以及shuffle優化。shuffle的過程可以概括為:在Map端,當緩沖區內容達到閾值時Map寫出內容。寫出時按照key值對 數據排序,在按照劃分將數據寫入文件,然后進行merge并將結果交給Reduce。在Reduce端,TaskTracker先從執行Map的 TaskTracker節點上復制Map輸出,然后對排序進行合并,最后進行Reduce處理。關于任務執行則主要介紹了三個任務執行的細節,分別是推測 式進行、JVM重用和執行環境。推測式執行是指JobTracker在作業執行過程中,發現某個作業執行速度過慢,為了不影響整個作業的完成進度,會啟動 和這個作業完全相同的備份作業讓TaskTracker執行,最后保留二者中較快完成的結果。JVM重用主要針對比較零碎的任務,對于新任務不是啟動系的 呢JVM,二是在先前執行任務完畢的JVM上執行,這樣節省了啟動JVM的時間。在任務執行環境中主要介紹了任務執行參數的內容和任務目錄結構,以及任務 臨時文件夾使用情況。