2013-10-03 88 views
0

我有一個456kb文件正在從hdfs中讀取,並將其作爲輸入提供給mapper函數。每行都包含一個整數,我正在下載一些文件並將它們存儲在本地系統上。我已經Hadoop的設置雙節點羣集上和分割尺寸從程序更改爲打開8映射器:處理小文件映射減少hadoop

Configuration configuration = new Configuration(); 

    configuration.setLong("mapred.max.split.size", 60000L); 
    configuration.setLong("mapred.min.split.size", 60000L); 

創建8個映射器,但相同的數據都在服務器上下載的,我認爲它的發生因爲塊大小仍然被設置爲默認值256mb並且輸入文件被處理兩次。所以我的問題是我們可以使用map reduce來處理一個小尺寸的文件嗎?

+0

該框架不會阻止您處理小文件。但是,我並沒有完全明白你想要達到的目標。 – Tariq

+0

我希望這個456kb的單個文件能夠被許多映射器處理,而不是分割整個文件在每個服務器上被處理兩次的文件。所以我得到了兩個服務器應該不會發生的相同。 – mumbai

+0

你在使用自定義的InputFormat/RecordReader嗎? – climbage

回答

1

如果您下載的文件需要時間,您可能會遭受所謂Hadoop的推測性執行,這是默認啓用的。這只是一個猜測,因爲,你說你得到不止一次下載相同的文件。

隨着推測性執行開啓,同一輸入可並行處理多次,以利用機器能力的差異。隨着作業中的大部分任務即將結束,Hadoop平臺將爲剩餘的任務安排多個節點的冗餘副本,這些副本不需要其他工作來執行。

您可以通過分別設置mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf選項爲false,禁用映射器和減壓器推測執行。