hadoop学习之:Map、Reduce详解
Hadoop學習重點主要為HDFS、MapReduce 部分:
接下來重點描述一下MAP與Reduce 的過程。
看了好多資料,如果有錯誤的地方請大家指出。
MAP部分:
下圖是官方給予的關于MapReduce的步驟,實際上圖已經很好的說明了MapReduce的過程。
TaskTracker 接受到MAP任務,或者SPLIT, ?一個SPLIT對應一個或者多個BLOCK。有多少個SPLIT就會有多少個MAP過程。
? ? ? ?MAP過程一共分為3步。
1、輸入階段。 ?MAP進程獲取SPLIT分塊
2、MAP過程。根據每一個<KEY,VALUE>對進行MAP過程。代碼如下: ?以下是MAP階段多線程運行部分。 ?
也就是對每一個<KEY,VALUE>進行MAP 相應操作。
public void run(Context content) throws ..{...while(context.nextKeyValue()){map(key,value,context)}.. } protected map(...){context.write((KEYOUT)key,(VALUEOUT)value); }3、Shuffle部分。結束MAP步驟輸出MAP結果,結果是存儲在內存中的。 ?但是當MAP結果數量過大時,內存空間不足,那么就會將結果SPILL,也就是壓進磁盤中。在壓進磁盤之前,會進行sort partition and combine(if has)。 ?壓進磁盤過程中, MAP部分停止往內存輸入數據直到SPILL結束。
sort: ?應該是根據KEY值進行 merge 排序
? ? ? ? partition: ?將MAP輸出的<key,value>進行 part. ? ?不同的 partition 會分到不同的reduce機器進行處理。 ? hadoop默認的partition部分是根據key值的hash值分類,從而確保相同的key值分到同一個reudce鐘
? ? ? ?combine:這是MAP的最后一步,就是對于MAP輸出的一個預reduce
Reduce部分:
? ??
? ? ? ?通過上圖來理解REDUCE部分。
? ? ?我將REDUCE分為以下幾步:
? ? ? 1、數據收集。 ? REDUCE端有一個進程間歇的向 Jobtrack發送請求,詢問已經完成MAP的數據。 ?獲得相應數據后,REDUCE端通過HTTP請求將結果COPY到本地
? ? ? 2、數據整合。 ?REDUCE端從不同的機器上獲得多個MAP結果,然后進行MERGE整合
? ? ? 3、對每一個<key, Iist<value>> 進行一個REUDCE操作。 ?主要代碼如下:
public void run(Context content) throws ..{...while(context.nextKeyValue()){reduce(key,value,context)}.. } protected void reduce(...){for(VALUEIN value: values){contenxt.write(...)}
總結
以上是生活随笔為你收集整理的hadoop学习之:Map、Reduce详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 通过 putty 连接
- 下一篇: Zookeeper选举算法( FastL