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操作,這樣,可以減少帶寬的使用。

(以下紅色部分是微博易的一位很好的大哥告訴我的,非常感謝)

請記住:符合交換律和結合律的可以使用Combiner進行減少帶寬壓力,

例如:a+b+c+d,無論怎麼交換順序,結果不會改變;而   \frac{\frac{a+b}{2} + \frac{c+d}{2}}{2} != \frac{a+b+c+d}{2}

 

什麼時候運行Combiner?
1、當job設置了Combiner,並且spill的個數到min.num.spill.for.combine(默認是3)的時候,那麼combiner就會Merge之前執行; 
2、但是有的情況下,Merge開始執行,但spill文件的個數沒有達到需求,這個時候Combiner可能會在Merge之後執行; 
3、Combiner也有可能不運行,Combiner會考慮當時集羣的一個負載情況。如果集羣負載量很大,會盡量提早執行完map,空出資源,所以,就不會去執行。
--------------------- 
作者:李國冬 
來源:CSDN 
原文:https://blog.csdn.net/scgaliguodong123_/article/details/46483455 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

 

4、Shuffle過程

分爲map端和reduce

map端:

每個mapper任務都有一個環形的內存緩衝區,用於存儲map任務的輸出,默認是100MB,一旦達到閾值0.8,後臺線程就把內容溢寫(spill)到磁盤指定目錄下生成新的溢寫文件;

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

等全部記錄寫完後,合併所有的溢出文件,若被合併後的文件個數大於等於設定值(默認爲3),則再次合併,直到小於設定值。

reduce端:

Reduce主動去找自己負責的分區的數據;

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

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

擴展:

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

 

給張剖析MapReduce作業運行機制的圖(摘錄自《Hadoop權威指南》)

剖析MapReduce作業運行機制

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