Hadoop Streaming

Hadoop Streaming

Hadoop streaming是Hadoop的一個工具, 它幫助用戶創建和運行一類特殊的map/reduce作業, 這些特殊的map/reduce作業是由一些可執行文件或腳本文件充當mapper或者reducer。例如:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper /bin/cat \
    -reducer /bin/wc

Streaming工作原理

在上面的例子裏,mapper和reducer都是可執行文件,它們從標準輸入讀入數據(一行一行讀), 並把計算結果發給標準輸出。Streaming工具會創建一個Map/Reduce作業, 並把它發送給合適的集羣,同時監視這個作業的整個執行過程。

如果一個可執行文件被用於mapper,則在mapper初始化時, 每一個mapper任務會把這個可執行文件作爲一個單獨的進程啓動。 mapper任務運行時,它把輸入切分成行並把每一行提供給可執行文件進程的標準輸入。 同時,mapper收集可執行文件進程標準輸出的內容,並把收到的每一行內容轉化成key/value對,作爲mapper的輸出。 默認情況下,一行中第一個tab之前的部分作爲key,之後的(不包括tab)作爲value。 如果沒有tab,整行作爲key值,value值爲null。不過,這可以定製,在下文中將會討論如何自定義key和value的切分方式。

如果一個可執行文件被用於reducer,每個reducer任務會把這個可執行文件作爲一個單獨的進程啓動。 Reducer任務運行時,它把輸入切分成行並把每一行提供給可執行文件進程的標準輸入。 同時,reducer收集可執行文件進程標準輸出的內容,並把每一行內容轉化成key/value對,作爲reducer的輸出。 默認情況下,一行中第一個tab之前的部分作爲key,之後的(不包括tab)作爲value。在下文中將會討論如何自定義key和value的切分方式。

這是Map/Reduce框架和streaming mapper/reducer之間的基本通信協議。

用戶也可以使用java類作爲mapper或者reducer。上面的例子與這裏的代碼等價:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper org.apache.hadoop.mapred.lib.IdentityMapper \
    -reducer /bin/wc

用戶可以設定stream.non.zero.exit.is.failure true 或false 來表明streaming task的返回值非零時是 Failure 還是Success。默認情況,streaming task返回非零時表示失敗。

將文件打包到提交的作業中

任何可執行文件都可以被指定爲mapper/reducer。這些可執行文件不需要事先存放在集羣上; 如果在集羣上還沒有,則需要用-file選項讓framework把可執行文件作爲作業的一部分,一起打包提交。例如:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper myPythonScript.py \
    -reducer /bin/wc \
    -file myPythonScript.py 

上面的例子描述了一個用戶把可執行python文件作爲mapper。 其中的選項“-file myPythonScirpt.py”使可執行python文件作爲作業提交的一部分被上傳到集羣的機器上。

除了可執行文件外,其他mapper或reducer需要用到的輔助文件(比如字典,配置文件等)也可以用這種方式打包上傳。例如:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper myPythonScript.py \
    -reducer /bin/wc \
    -file myPythonScript.py \
    -file myDictionary.txt

參考文檔:PDF -icon PDF Hadoop Streaming

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章