2012-11-28 97 views
0

我使用Hadoop流,我啓動腳本如下:Hadoop的流單映射

../hadoop/bin/hadoop jar ../hadoop/contrib/streaming/hadoop-streaming-1.0.4.jar \ 
     -mapper ../tests/mapper.php  \ 
     -reducer ../tests/reducer.php \ 
     -input data      \ 
     -output out 

「數據」 是2.5 GB的txt文件。

但是在ps axf我只能看到一個映射器。我試着用-Dmapred.map.tasks = 10,但結果是一樣的 - 單個映射器。

我該如何讓hadoop分割我的輸入文件並啓動幾個映射器進程?

+1

你的2.5 GB的txt文件,它是gzip壓縮?你是否在hadoop的僞實例上運行(並且只有一個map和reduce插槽)? –

+0

文件沒有gzipped,但是,我沒有運行任何hadoop惡魔,也沒有使用HDFS ... – Nick

+0

試圖在具有一個節點和相同結果的「真正」羣集 - 單映射程序 – Nick

回答

1

要闡述我的意見 - 如果你的文件是不是在HDFS,而你與當地的跑步運行,那麼該文件本身只會由一個映射器處理。

一個大文件通常由幾個映射器處理,因爲它以多個塊的形式存儲在HDFS中。

一個2.5 GB的文件,塊大小爲512M將在HDFS中分成5個塊。如果文件是可拆分的(純文本或使用可拆分的壓縮編解碼器,如snappy,但不是gzip),那麼hadoop將啓動每個塊的映射器來處理文件。

希望這有助於解釋你所看到的

1

請嘗試查看InputFormat選項。我只是自己簡單地閱讀它(因爲我正在查看OutputFormat來處理我自己的工作),但我的理解是,您可以將大型輸入文件分成更小的任務,然後您可以單獨運行映射器。

希望這篇文章能不能給你更多的瞭解你:http://www.infoq.com/articles/HadoopInputFormat