您好,登錄后才能下訂單哦!
MapReduce 如何解決負載均衡和數據傾斜:
階段主要出在Map作業結束后,shuffer(洗牌)過程中,如何將map處理后的結果分成多少份,交由Reduce作業,使得每部分reduce作業盡可能均衡處理數據計算。
系統默認將partitions 按照Hash模運算分割(存儲對象的hash值與reduce的個數取模),這樣很容易出現數據傾斜,導致其中一個reduce作業分得大量數據計算,另一個ruduce作業基本上沒有任何數據處理。如何,解決的這種事情,就需要靠程序控制partitions的值
Sort:默認排序是按照字典排序的(按ASCII)
Shuffer階段比較的操作要執行兩次,一次是map task之后的sort另一次是在從本次磁盤將partition數據拷貝到指定reduce 之前的合并,將符合統一范圍的key的數據歸并
面試:
1.partition:將map輸出的數據,按照某種規則將數據劃分,分給哪一個reduce,默認使用hash模運算執行
2.spill:
過程:map的內存緩存區數據填滿時,啟動一個單獨的線程,將數據按照一定比例寫入本地磁盤。
Sort:將數據按照大小排序(可自定義)默認字典排序
Combiner:(可有可無)將相同的K_V中的value加起來,減少溢寫磁盤的數據
Shuffer的后半過程:
將map處理后放入map節點的本地磁盤的數據拷貝到rudece節點的內存中 去,數據量少的話,直接交由reduce處理。數據量大的時候,同樣需要溢寫到磁盤中,按照K值相同的方法進行merge,然后在交由指定的reduce執行
修改默認hdfs的block大小:
這個需要修改hdfs-site.conf配置文件,增加全局參數dfs.block.size。
如下:
修改后參數,
把配置同步到其它節點,并重啟hdfs。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。