在我的程序的地圖階段,我需要知道創建的mappers的總數。這將幫助我在地圖的關鍵創建過程中(我想爲每個對象發出與mappers數一樣多的關鍵值對)。hadoop得到實際的mappers人數
我知道設置mappers的數量只是一個提示,但獲得的實際數量是多少。 我想在我的映射器的配置方法如下:
public void configure(JobConf conf) {
System.out.println("map tasks: "+conf.get("mapred.map.tasks"));
System.out.println("tipid: "+conf.get("mapred.tip.id"));
System.out.println("taskpartition: "+conf.get("mapred.task.partition"));
}
但我得到的結果:(?)
map tasks: 1
tipid: task_local1204340194_0001_m_000000
taskpartition: 0
map tasks: 1
tipid: task_local1204340194_0001_m_000001
taskpartition: 1
,這意味着有兩個地圖的任務,不只是一個,打印出來(這很自然,因爲我有兩個小輸入文件)。地圖任務後的數字不應該是2嗎?
現在,我只是計算輸入文件夾中的文件數量,但這不是一個好的解決方案,因爲文件可能大於塊大小,並導致多個輸入拆分並因此導致映射器。有什麼建議麼?
http://wiki.apache.org/hadoop/HowManyMapsAndReduces 這取決於你的塊大小和你的文件數量。因此,如果您想要,然後將此編號添加到您的作業的distributedCache,您實際上可以在mapreduce之外進行計算。 – DDW
可能重複的[Hadoop MapReduce:映射器的默認數量](http://stackoverflow.com/questions/10591278/hadoop-mapreduce-default-number-of-mappers) – harpun
謝謝@irW的評論!我已經有類似的東西了,但是我想知道是否有像標準getter這樣的東西,而不是重新實現已經存在並且已經調用的方法。不過,如果沒有更好的解決方案,我會繼續使用這個解決方案。 – vefthym