Hadoop Streaming框架學習(二)

1.經常使用Streaming命令介紹      

使用下面的命令運行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

詳細輸出模式

 2.命令參數詳解             

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

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實現,參考KeyBasedFiledPartitonerIntHashPartitioner

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:指定輸出詳細信息,例如分發哪些文件,實際做業配置參數值等,能夠用於調試。

3.Streaming使用示例      

   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 $?
相關文章
相關標籤/搜索