2013-12-12 33 views
0

我正在測試一個MapReduce程序,以查看執行時間如何改變映射器的數量。爲什麼增加Mapper的數量並不會縮短執行時間呢?

Hadoop 1.2.1安裝在具有超線程的四核機器上。 MR程序是用Python編寫的,所以我使用Hadoop-streaming來運行這個程序。 文件大小約爲500MB。

在mapred-site.xml文件,添加以下配置:

mapred.max.split.size : 250MB 
mapred.tasktracker.map.tasks.maximum : 1 //1, 2, 4, 8, 16, 32 
mapred.tasktracker.reduce.tasks.maximum : 2 

由於我設置分割大小的文件大小的一半,映射任務的數量應該爲2

我的理解是,最多有2個地圖任務可以讀取和分析分配給他們的數據。

當有一個映射器時: Maptask1和Maptask2同時解析數據,但只有一個映射器映射。所以這個映射器需要做兩個波浪。 (工作兩次)

現在,我的假設是,當製圖員的數量增加: Maptask1和Maptask2同時分析數據,mapper1可以處理Maptask1的輸出,並mapper2可以處理Maptask2的輸出,這樣既映射器可以同時處理。

但是,我發現執行時間沒有任何區別。 我試着用1,2,4,8,16,32,時間差都在1秒以內。

有人可以解釋爲什麼?

回答

0

問題是如果你有足夠的工作線程我想。你需要一個jobtracker,namenode,tasktracker和datanode的線程。我不認爲給出你當前的配置,如果你的硬件沒有支持它,你可以期待加速。例如,如果你在一臺擁有4核心的機器上運行1000個線程,你的最大加速比仍然是4.檢查一切是否正確配置的方法是在map任務中添加一條日誌語句,並檢查1,2,4 ,...同時開始。

0

我猜你的單一輸入文件已經使用gzip進行了壓縮,並且您遇到了gzip不可拆分的事實。一個gzip文件僅限於一個映射器,不再有。

另請參閱:Hadoop gzip compressed files

相關問題