2014-02-22 50 views
0

分裂數我有點困惑與Page 112 of the Book Map Reduce Design模式在totalOrderPartitioner

注意範圍的中間分區數量需要 等於減速器的順序步驟數給出本說明。如果您決定 變化減速器的數量和你一直重複使用相同的文件, 你需要重建它

對於初學者來說,我不能完全確定什麼「中間分區」是指這種情況下,有人可以用一個例子解釋一下吧..

也是本書不下去了來解釋這一要求的原因,我猜測原因是

這傳遞每個中間分隔到減速器可以並行處理所有分區,因此效率最高......

但是爲了參數的緣故,如果我對低效率沒問題,我可以把任意數字作爲reducer的數量嗎?會不會以任何方式影響最終輸出(比其他性能)

你一直在重複使用相同的文件, 你需要重建它**

什麼上面的兩行表示?

回答

4

這裏TotalOrderPartitioner如何工作:首先一個採樣器(例如RandomSampler)運行(在客戶端)並創建數據樣本。數據是否會被排序 - 這些樣本有望將其分成幾乎相同的數據塊。其次,排序MapReduce將使用這些樣本的TotalOrderPartitioner在reducer之間分發數據。每個reducer都會對其塊數據進行排序並將其輸出。由於根據樣本將數據分發給reducer,因此當我們連接Reducers的輸出時 - 我們將整個輸入數據進行排序。

它可以被視爲快速排序與一個遞歸級別

的聲明,你問:

注意範圍的中間分區需要 數量等於在訂單步減速的數量。如果您決定 變化減速器的數量和你一直重複使用相同的文件, 你需要重建它

中間分隔是由文件與樣本(分區的文件)表示分區。

那些「中間分區」的數目應等於減速齒輪的數目。這是一項要求。根據JavaDoc:

公共靜態無效setPartitionFile(配置的conf, 路徑P)

//設置路徑SequenceFile存儲排序分區鍵集。 對於R減少的情況,SequenceFile中有R-1個鍵。

InputSampler創建「中間隔板」等於減速在MapReduce工作的數量,滿足這一要求的數量。

如果重新運行排序 - 如果你的數據略有改變,樣品仍應該很好地代表了它 - 你可以使用現有的分區文件,樣品,其在客戶端上創建是昂貴的。 但是你必須使用相同數量的減速,因爲你在其中InputSample創建分區的文件工作中使用。

+0

感謝,關鍵帶走的我是,InputSampler使用,我們在工作中設置來確定要創建的分區數目,沒有哪裏程序員決定多少分區應創建減速器的數量,我們只能指定如何創建分區 – Sudarshan

0

我認爲「中間分區」是指您在分析階段構建的中間分區文件。該文件確定每個減速器的範圍分區。正如你希望範圍大小一樣,你首先分析你的數據樣本,然後相應地構建範圍。您還可以指定範圍的數量。

由於訂單階段中的每個縮減器都接收到一個分區,因此縮減器的數量需要等於該分區文件中的範圍數。如果文件中有5個分區但只使用4個reducer,hadoop將不知道將第五個分區發送到哪裏。在這種情況下,您需要重建分區文件,使其僅包含4個範圍。

+0

謝謝,我該如何指定範圍數?,inputsampler的構造函數對我來說有點讓人困惑 – Sudarshan

+0

也出現在你給出的錯誤匹配的例子中,會發生什麼,我的輸出會受到影響嗎?或者只是表現不佳 – Sudarshan