2017-08-13 110 views
0

我是hadoop的新手,我讀了許多hadoop mapreduce和hdfs的頁面,但仍然無法清除一個概念。Hadoop如何在多個數據節點上分發數據和mapreduce任務

可能是這個問題是愚蠢的或不尋常的,如果它是這樣比這麼抱歉。 我的問題是,假設我爲hadoop中的1 GB大小的文件創建了一個字數統計程序,其中map函數將每行作爲輸入和輸出作爲鍵值對,並且reduce函數將輸入 作爲輸入鍵值對,並簡單地迭代列表並計算單詞在該文件中出現的總次數。

現在我的問題是,因爲這個文件存儲在多個數據節點的塊中,並且map-reduce並行地在每個數據節點上執行。假設我的文件存儲在兩個datanode上,第一個數據節點上的文件包含5個字「hadoop」,第二個數據節點上的文件包含7個字「hadoop」。因此基本上 整個地圖的縮小處理輸出爲:

的hadoop:7

的hadoop:5

爲2地圖,減少功能在2個不同的數據節點上執行平行, 但輸出應該是在兩個文件「的hadoop」字的計數的總和與那就是: hadoop:13

那麼我該如何實現或者我在這裏錯過了一些概念。請幫助我對這個概念非常困惑,如果我無法讓你明白我想問什麼,我很抱歉。

回答

0

你可能有閱讀的Hadoop MapReduce和HDFS的很多網頁,但你似乎已經錯過了包含地圖後階段的那些和之前降低,這就是所謂洗牌和排序。

基本上它所做的就是將所有映射器中的數據進行混洗,並將具有相同鍵的行按照排序順序發送給同一個reducer。所以,你的情況,無論是hadoop 7hadoop 5將走同樣的減速將其降低到hadoop 12(不是13!)

你可以得到約洗牌和排序很容易在網絡上的更多信息。有questions like this too你可以閱讀。

+0

好的非常感謝您的post.Now我的概念已清除。非常感謝您 –

+0

@yogeshmeghnani不客氣。 :) – philantrovert

0

我認爲你完全錯過了reducer的概念,因爲那就是它的函數,reducer輸入將是一個關鍵字(在這種情況下是hadoop)和一個與這個關鍵字(7和5)相關聯的值列表,所以你的reducer程序會迭代值列表並進行求和,然後是hadoop,13。

相關問題