1. 程式人生 > >Hadoop面試準備——MapReduce

Hadoop面試準備——MapReduce

1、MR執行流程

作業的提交

1)啟動客戶端Client,執行Job;

2)客戶端向資源管理器(ResourceManager)提交任務,請求一個新的ID號;

3)客戶端將Job所需的資源傳送給HDFS;

4)客戶端向RM提交作業;

作業的初始化

5)RM將作業請求傳送給Yarn排程器(Scheduler),排程器給作業分配容器,然後在該容器中啟動Application Master;

6)NodeManager接受任務的進度和完成報告;

7)Application Master接受來自HDFS的在客戶端計算的輸入分片;

作業的分配

8)在執行過程中,若有不合適的容器,便會再次向ResourceManager申請容器;

作業的執行

9)啟動容器;

10)從HDFS中讀取Job需要的作業的配置、JAR檔案、檔案等資源,即資源本地化;

11)執行MR;

進度和狀態的更新

作業的完成

作業完成後,會把作業的狀態設定為“成功”

2、Partition的作用

分割槽操作時shuffle中的重要的一個過程,作用就是將Map端的結果按照指定的規則分發到不同Reduce端進行處理,預設是使用hash計算分割槽,但是也可以自行定義分割槽規則。

3、Combiner的作用

在Map中可能產生大量的結果,讓Reduce直接去讀取Map產生的結果會導致網路頻寬增高,為此,可以再Map端進行Combiner操作,Combiner實際上就是執行在Map端的Reducer操作,這樣,可以減少頻寬的使用。

4、Shuffle過程

分為map端和reduce

map端:

每個mapper任務都有一個環形的記憶體緩衝區,用於儲存map任務的輸出,預設是100MB,一旦達到閾值0.8,後臺執行緒就把內容溢寫(spill)到磁碟指定目錄下生成新的溢寫檔案;

寫磁碟前,要進行分割槽(Partition),每個分割槽中排序(Sort),排序後合併(Combiner);在寫磁碟時,還會進行任務的輸出,此時可能導致兩種情況:要不就是磁碟寫出已完成,不會影響到後續任務的輸出;要不磁碟寫出未完成,導致mapper阻塞;

等全部記錄寫完後,合併所有的溢位檔案,若被合併後的檔案個數大於等於設定值(預設為3),則再次合併,直到小於設定值。

reduce端:

Reduce主動去找自己負責的分割槽的資料;

複製來自多個Mapper的資料後進行merge合併操作,合併後,進行分組、排序;

在reducer中進行處理上述的資料結果,並將最終結果輸出到指定目錄

擴充套件:

mapper一般執行輸入格式解析、投影(選擇相關的欄位)和過濾(去掉無關記錄)