1. 程式人生 > >hadoop shuffle

hadoop shuffle

處理 post 問題 傳輸 mapred gpo 輸出 相同 HA

1 hadoop shuffle的地位

hadoop shuffle是map reduce算法的核心,是它連接了多個map和多個reduce,它將map的輸出交給reduce作為輸入。

2 hadoop shuffle工作在哪裏

shuffle工作在map端

3 hadoop shuffle做了什麽

它首先對所有的map的輸出進行分區,對分區進行編號,來自不同map的具有相同編號的分區交給同一個reduce來處理。

它必須保證一點,來自所有map的相同的key的記錄必須要被劃分到同一個分區。原因很簡單,reduce函數的輸入就是一個key,對應該key的所有的values。

可見,是hadoop shuffle保證了mapreduce的編程模型。map只需要把輸入分成新的key value即可,而reduce處理的對象是所有的map的輸出中同一個key的所有values。

4 hadoop shuffle是怎樣實現的

public int getPartition(K2 key, V2 value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

對key進行hash保證了,相同的key具有相同的hash值,然後對reduce task數目取模,那麽相同的key肯定是有相同的分區id的。這樣,所有的map的具有相同key的鍵值對記錄都會被劃分到同一個分區中,進而交給同一個reducer。

5 shuffle過程存在的問題

因為map位於不同的機器,所以reducer所在的機器必須要同它們通信才能把所有輸入自己的分區數據遠程拷貝到本機器上。

這樣性能瓶頸就是網絡數據的傳輸。

hadoop shuffle