使用下面的命令運行Streaming MapReduce程序:html
1: $HADOOP_HOME/bin/hadoop/hadoop streaming args
其中args是streaming參數,下面是參數列表:app
-input <path>oop |
輸入數據路徑spa |
-output <path>debug |
輸出數據路徑調試 |
-mapper <cmd|JavaClassName>code |
mapper可執行程序或Java類orm |
-reducer <cmd|JavaClassName>xml |
reducer可執行程序或Java類htm |
-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 |
詳細輸出模式 |
下面是對各個參數的詳細說明:
l -input <path>:指定做業輸入,path能夠是文件或者目錄,能夠使用*通配符,-input選項能夠使用屢次指定多個文件或目錄做爲輸入。
l -output <path>:指定做業輸出目錄,path必須不存在,並且執行做業的用戶必須有建立該目錄的權限,-output只能使用一次。
l -mapper:指定mapper可執行程序或Java類,必須指定且惟一。
l -reducer:指定reducer可執行程序或Java類,必須指定且惟一。
l -file, -cacheFile, -cacheArchive:分別用於向計算節點分發本地文件、HDFS文件和HDFS壓縮文件,具體使用方法參考文件分發與打包。
l -numReduceTasks:指定reducer的個數,若是設置-numReduceTasks 0或者-reducer NONE則沒有reducer程序,mapper的輸出直接做爲整個做業的輸出。
l -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輸出分隔符 |
l -combiner:指定combiner Java類,對應的Java類文件打包成jar文件後用-file分發。
l -partitioner:指定partitioner Java類,Streaming提供了一些實用的partitioner實現,參考KeyBasedFiledPartitoner和IntHashPartitioner。
l -inputformat, -outputformat:指定inputformat和outputformat Java類,用於讀取輸入數據和寫入輸出數據,分別要實現InputFormat和OutputFormat接口。若是不指定,默認使用TextInputFormat和TextOutputFormat。
l -cmdenv NAME=VALUE:給mapper和reducer程序傳遞額外的環境變量,NAME是變量名,VALUE是變量值。
l -mapdebug, -reducedebug:分別指定mapper和reducer程序失敗時運行的debug程序。
l -verbose:指定輸出詳細信息,例如分發哪些文件,實際做業配置參數值等,能夠用於調試。
1: # 刪除原目錄 因爲streaming必須確保輸出路徑不存在
2: $hadoop fs -rmr "$outpath"
3:
4: # 執行統計
5: $hadoop streaming \
6: -input "$inpath" \ # 文件輸入路徑
7: -output "$outpath" \ # 結果輸出路徑
8: -mapper "$map" \ # map階段所用腳步
9: -reducer "$reduce" \ # reduce階段所用腳本
10: -file "$map" \ # 將客戶端本地分揀分發到計算節點
11: -file "$reduce" \
12: -jobconf mapred.job.name="test_task" \ # 任務名稱
13: -jobconf stream.num.map.output.key.fields=1 \
14: -jobconf mapred.job.priority=HIGH \ # 做業優先級
15: -jobconf mapred.job.map.capacity=100 \ # 同時運行的map數
16: -jobconf mapred.job.reduce.capacity=10 \ # 同時運行的reduce數
17: -jobconf mapred.map.tasks=2000 \ # map的個數
18: -jobconf mapred.reduce.tasks=10 # reduce的格式
19:
20: exit $?