hadoop1.x   MapReduce工作原理

wKioL1dSZv2ixUCMAAYxguhShCc473.png-wh_50

wKioL1dSZv-QoWDMAAPRGF9EtIw230.png-wh_50

wKiom1dSZf7gjuXVAALFYYzZLow783.png-wh_50

wKiom1dSZgDhFq7AAAU9EkNqGzA155.png-wh_50

MapReduce 如何解決負載均衡和數據傾斜:

階段主要出在Map作業結束後,shuffer(洗牌)過程中,如何將map處理後的結果分成多少份,交由Reduce作業,使得每部分reduce作業儘可能均衡處理數據計算。

系統默認將partitions  按照Hash模運算分割(存儲對象的hash值與reduce的個數取模),這樣很容易出現數據傾斜,導致其中一個reduce作業分得大量數據計算,另一個ruduce作業基本上沒有任何數據處理。如何,解決的這種事情,就需要靠程序控制partitions的值

 

Sort:默認排序是按照字典排序的(按ASCII

 

Shuffer階段比較的操作要執行兩次,一次是map task之後的sort另一次是在從本次磁盤將partition數據拷貝到指定reduce 之前的合併,將符合統一範圍的key的數據歸併



wKioL1dSZwbjVUaiAAX1-_kHMG0135.png-wh_50

wKioL1dSZwuDIt9GAAkSsVz73Bc988.png-wh_50

面試:

1.partition:將map輸出的數據,按照某種規則將數據劃分,分給哪一個reduce,默認使用hash模運算執行

  2.spill

    過程:map的內存緩存區數據填滿時,啓動一個單獨的線程,將數據按照一定比例寫入本地磁盤。

 Sort:將數據按照大小排序(可自定義)默認字典排序

 Combiner:(可有可無)將相同的K_V中的value加起來,減少溢寫磁盤的數據

wKiom1dSZgrgQdmNAAOtPq5opWM697.png-wh_50

Shuffer的後半過程:

 map處理後放入map節點的本地磁盤的數據拷貝到rudece節點的內存中 去,數據量少的話,直接交由reduce處理。數據量大的時候,同樣需要溢寫到磁盤中,按照K值相同的方法進行merge,然後在交由指定的reduce執行


wKiom1dSZ__Sn1vQAAE1n8Wg_GE533.png-wh_50


修改默認hdfsblock大小:

這個需要修改hdfs-site.conf配置文件,增加全局參數dfs.block.size

如下:

修改後參數,

把配置同步到其它節點,並重啓hdfs

wKioL1dSZw2QeONNAABKU-uwWMs281.png-wh_50


wKiom1dSZguwuvUTAAIfEaGPaOU952.png-wh_50


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