我正在測試一個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秒以內。
有人可以解釋爲什麼?