1 Streaming命令
使用下面的命令運行Streaming MapReduce程序:
$HADOOP_HOME/bin/hadoop streaming args |
其中args是streaming參數,下面是參數列表:
-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 |
傳給mapper和reducer的環境變量 |
-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設置同時最多運行M個map任務,使用-jobconf mapred.job.reduce.capacity=N設置同時最多運行N個reduce任務。常見的作業配置參數如下表所示:
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:指定inputformat和outputformat Java類,用於讀取輸入數據和寫入輸出數據,分別要實現InputFormat和OutputFormat接口。如果不指定,默認使用TextInputFormat和TextOutputFormat。
-cmdenv NAME=VALUE:給mapper和reducer程序傳遞額外的環境變量,NAME是變量名,VALUE是變量值。
-mapdebug, -reducedebug:分別指定mapper和reducer程序失敗時運行的debug程序。
-verbose:指定輸出詳細信息,例如分發哪些文件,實際作業配置參數值等,可以用於調試。
注意事項
1) mapper或reducer程序儘量輸出一些重要的錯誤日誌到標準錯誤,不要寫本地文件,因爲程序執行完以後本地文件就會被刪除,但是輸出到標準錯誤的日誌會被保存,有利於出現問題定位程序問題。但是量不要太大,否則會影響性能。
2) 注意mapper和reducer程序的返回值,Streaming框架默認認爲程序返回值爲0時用戶程序正常,非0時用戶程序異常從而導致任務失敗,多次任務失敗導致作業失敗。
3) mapper或reducer程序在遇到從標準輸入讀到EOF,讀標準輸入異常,pipe broken異常,寫標準輸出異常,寫標準錯誤異常時,應該主動退出。
4) mapper或reducer程序可以在當前目錄下創建臨時文件進行讀寫,但是不允許向它的上層目錄,或者在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任務失敗率容忍率