Hadoop Streaming命令

1 Streaming命令

使用下面的命令運行Streaming MapReduce程序:

$HADOOP_HOME/bin/hadoop streaming args

其中argsstreaming參數,下面是參數列表:

-input <path>

輸入數據路徑

-output <path>

輸出數據路徑

-mapper <cmd|JavaClassName>

mapper可執行程序或Java

-reducer <cmd|JavaClassName>

reducer可執行程序或Java

-file <file> Optional

分發本地文件

-cacheFile <file> Optional

分發HDFS文件

-cacheArchive <file> Optional

分發HDFS壓縮文件

-numReduceTasks <num> Optional

reduce任務個數

-jobconf | -D NAME=VALUE Optional

作業配置參數

-combiner <JavaClassName> Optional

Combiner Java

-partitioner <JavaClassName> Optional

Partitioner Java

-inputformat <JavaClassName> Optional

InputFormat Java

-outputformat <JavaClassName> Optional

OutputFormat Java

-inputreader <spec> Optional

InputReader配置

-cmdenv <n>=<v> Optional

傳給mapperreducer的環境變量

-mapdebug <path> Optional

mapper失敗時運行的debug程序

-reducedebug <path> Optional

reducer失敗時運行的debug程序

-verbose Optional

詳細輸出模式

2 命令參數詳解

下面是對各個參數的詳細說明:

-input <path>:指定作業輸入,path可以是文件或者目錄,可以使用*通配符,-input選項可以使用多次指定多個文件或目錄作爲輸入。

-output <path>:指定作業輸出目錄,path必須不存在,而且執行作業的用戶必須有創建該目錄的權限,-output只能使用一次。

-mapper:指定mapper可執行程序或Java類,必須指定且唯一。

-reducer:指定reducer可執行程序或Java類,必須指定且唯一。

-file, -cacheFile, -cacheArchive:分別用於向計算節點分發本地文件、HDFS文件和HDFS壓縮文件

-numReduceTasks:指定reducer的個數,如果設置-numReduceTasks 0或者-reducer NONE則沒有reducer程序,mapper的輸出直接作爲整個作業的輸出。

-jobconf | -D NAME=VALUE:指定作業參數,NAME是參數名,VALUE是參數值,可以指定的參數參考hadoop-default.xml。特別建議用-jobconf mapred.job.name=’My Job Name’設置作業名,使用-jobconf mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW設置作業優先級,使用-jobconf mapred.job.map.capacity=M設置同時最多運行Mmap任務,使用-jobconf mapred.job.reduce.capacity=N設置同時最多運行Nreduce任務。常見的作業配置參數如下表所示:

mapred.job.name

作業名

mapred.job.priority

作業優先級

mapred.job.map.capacity

最多同時運行map任務數

mapred.job.reduce.capacity

最多同時運行reduce任務數

hadoop.job.ugi

作業執行權限

mapred.map.tasks

map任務個數

mapred.reduce.tasks

reduce任務個數

mapred.job.groups

作業可運行的計算節點分組

mapred.task.timeout

任務沒有響應(輸入輸出)的最大時間

mapred.compress.map.output

map的輸出是否壓縮

mapred.map.output.compression.codec

map的輸出壓縮方式

mapred.output.compress

reduce的輸出是否壓縮

mapred.output.compression.codec

reduce的輸出壓縮方式

stream.map.output.field.separator

map輸出分隔符

-combiner:指定combiner Java類,對應的Java類文件打包成jar文件後用-file分發。

-partitioner:指定partitioner Java類,Streaming提供了一些實用的partitioner實現

-inputformat, -outputformat:指定inputformatoutputformat Java類,用於讀取輸入數據和寫入輸出數據,分別要實現InputFormatOutputFormat接口。如果不指定,默認使用TextInputFormatTextOutputFormat

-cmdenv NAME=VALUE:給mapperreducer程序傳遞額外的環境變量,NAME是變量名,VALUE是變量值。

-mapdebug, -reducedebug:分別指定mapperreducer程序失敗時運行的debug程序。

-verbose:指定輸出詳細信息,例如分發哪些文件,實際作業配置參數值等,可以用於調試。

注意事項

1) mapperreducer程序儘量輸出一些重要的錯誤日誌到標準錯誤,不要寫本地文件,因爲程序執行完以後本地文件就會被刪除,但是輸出到標準錯誤的日誌會被保存,有利於出現問題定位程序問題。但是量不要太大,否則會影響性能。

2) 注意mapperreducer程序的返回值,Streaming框架默認認爲程序返回值爲0時用戶程序正常,非0時用戶程序異常從而導致任務失敗,多次任務失敗導致作業失敗。

3) mapperreducer程序在遇到從標準輸入讀到EOF,讀標準輸入異常,pipe broken異常,寫標準輸出異常,寫標準錯誤異常時,應該主動退出。

4) mapperreducer程序可以在當前目錄下創建臨時文件進行讀寫,但是不允許向它的上層目錄,或者在cacheArchive解壓後的目錄中創建或寫文件。

5) zip壓縮包中不能有中文字符的文件名,否則Java解壓會出現異常。

如果使用新版本命令格式,命令行中參數要先指定genericOptions-D,然後指定commandOptions-mapper

 3、mapred嘗試任務失敗次數控制及map任務失敗率控制
-D mapred.map.max.attempts="3" \                                                                                  
-D mapred.reduce.max.attempts="3" \                                                                               
-D mapred.max.map.failures.percent="1" \  設置map任務失敗率容忍率


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