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一般執行輸入格式解析、投影(選擇相關的欄位)和過濾(去掉無關記錄)