hadoop-streaming 例子

Hadoop Streaming是Hadoop提供的一個編程工具,它容許用戶使用任何可執行文件或者腳本文件做爲Mapper和Reducer,例如: java

採用shell腳本語言中的一些命令做爲mapper和reducer(cat做爲mapper,wc做爲reducer) shell

bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -input
input -output output -mapper /bin/cat -reducer /usr/bin/wc

mapper和reducer會從標準輸入中讀取用戶數據,一行一行處理後發送給標準輸出。Streaming工具會建立MapReduce做業,發送給各個tasktracker,同時監控整個做業的執行過程。 編程

若是一個文件(可執行或者腳本)做爲mapper,mapper初始化時,每個mapper任務會把該文件做爲一個單獨進程啓動,mapper任務運行時,它把輸入切分紅行並把每一行提供給可執行文件進程的標準輸入。 同時,mapper收集可執行文件進程標準輸出的內容,並把收到的每一行內容轉化成key/value對,做爲mapper的輸出。 默認狀況下,一行中第一個tab以前的部分做爲key,以後的(不包括tab)做爲value。若是沒有tab,整行做爲key值,value值爲null。 app

對於reducer,相似。 框架

以上是Map/Reduce框架和streaming mapper/reducer之間的基本通訊協議。 工具

Hadoop Streaming用法 oop

Usage: $HADOOP_HOME/bin/hadoop jar \ code

$HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar [options] 進程

options: hadoop

(1)-input:輸入文件路徑

(2)-output:輸出文件路徑

(3)-mapper:用戶本身寫的mapper程序,能夠是可執行文件或者腳本

(4)-reducer:用戶本身寫的reducer程序,能夠是可執行文件或者腳本

(5)-file:打包文件到提交的做業中,能夠是mapper或者reducer要用的輸入文件,如配置文件,字典等。

(6)-partitioner:用戶自定義的partitioner程序

(7)-combiner:用戶自定義的combiner程序(必須用java實現)

(8)-D:做業的一些屬性(之前用的是-jonconf),具體有:
            1)mapred.map.tasks:map task數目
            2)mapred.reduce.tasks:reduce task數目
            3)stream.map.input.field.separator/stream.map.output.field.separator: map task輸入/輸出數
據的分隔符,默認均爲\t。
             4)stream.num.map.output.key.fields:指定map task輸出記錄中key所佔的域數目
             5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task輸入/輸出數據的分隔符,默認均爲\t。
             6)stream.num.reduce.output.key.fields:指定reduce task輸出記錄中key所佔的域數目
另外,Hadoop自己還自帶一些好用的Mapper和Reducer:

參照:

http://dongxicheng.org/mapreduce/hadoop-streaming-programming/

相關文章
相關標籤/搜索