2013-01-24 47 views
2

我正在使用hadoop 1.0.3來運行地圖縮減作業。我有一個3節點的羣集設置。問題是我在/conf/mapred-site.xml中將屬性mapred.map.tasks設置爲20,但是當我運行作業並使用網頁訪問羣集信息時,hadoop僅顯示6個地圖任務: 50030。我已經在集羣中的所有節點上編輯了上述配置文件。請幫忙。Hadoop 1.0.3 mapred.map.tasks屬性不起作用

問候, 穆赫辛

+0

輸入數據有多大?如果輸入數據被拆分爲n個拆分,那麼Hadoop將只映射任務,而不是更多。 –

+0

輸入分割的數量是764. – sp3tsnaz

+0

@PraveenSripati我想設置一些並行地圖任務。我可以在我的Web控制檯中看到它有764個地圖任務。但是運行地圖任務只有6個。 – sp3tsnaz

回答

4

正如miguno所述,Hadoop僅將mapred.map.tasks的值視爲提示。這就是說,當我搞亂MapReduce的時候,我能夠通過指定最大計數來增加地圖數量。這可能不適合你,但你可以試試看。

<property> 
    <name>mapred.tasktracker.map.tasks.maximum</name> 
    <value>60</value> 
</property> 

注意:該值表示地圖的總量。所以如果你想讓每個(3)節點運行20個地圖,你必須指定mapred.map。任務如下:

<property> 
    <name>mapred.map.tasks</name> 
    <value>20</value> 
</property> 
+0

這就像一個魅力:)實際上,我試驗了一些更多的值,並發現我可以爲單個節點設置mapred.tasktracker.map.tasks.maximum屬性。例如,在集羣中,我們有幾個重型配置節點和一些較輕的配置節點。 @Uirri提到的上述兩個屬性都針對每個節點單獨執行。 – sp3tsnaz

0

及其主要輸入格式確定的地圖任務的數量。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces

對於您的問題,默認情況下,任務跟蹤器運行兩個map |同時減少任務。
要更改該屬性,請在/conf/mapred-site.xml中設置屬性mapred.map.tasks.maximum

。建議採用公式(CPUS> 2)? (CPUS * 0.75):1。

3

這個問題似乎是Setting the number of map tasks and reduce tasks的重複。

Hadoop does not honor mapred.map.tasks beyond considering it a hint

看到這個information on the Hadoop wiki

實際上控制地圖的數量是微妙的。 mapred.map.tasks參數僅僅是InputFormat對地圖數量的提示。默認的InputFormat行爲是將總字節數拆分成正確數量的片段。但是,在默認情況下,輸入文件的DFS塊大小被視爲輸入分割的上限。分割大小的下限可以通過mapred.min.split.size設置。因此,如果您希望輸入數據爲10TB並具有128MB的DFS塊,則最終將獲得82k個地圖,除非您的mapred.map.tasks更大。最終,InputFormat決定了地圖的數量。

也就是說Hadoop確實接受用戶指定的mapred.reduce.tasks並且不會操縱它。

總之,對於給定的MapReduce作業,您無法強制執行mapred.map.tasks,但可以強制執行mapred.reduce.tasks

編輯:稍微超出您的直接問題,有一種間接強制Hadoop使用更多映射器的方法。這包括適當地設置mapred.min.split.sizedfs.block.sizemapred.max.split.size的組合。請注意,輸入文件的實際大小在這裏也起作用。見this answer for details,其中基本引用了湯姆懷特的Hadoop:The Definite Guide一書。

+0

剛剛在編輯後看到了Uirri的新回覆。 :-) –