1. 程式人生 > >Hadoop Streaming開發要點

Hadoop Streaming開發要點

而不是 使用 節點 多次 spa cal hive 程序 col

一.shell腳本中的相關配置

 1 HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
 2 STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
 3 
 4 INPUT_FILE_PATH="/input.txt"
 5 OUTPUT_PATH="/output"
 6 
 7 $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
 8 
 9 $HADOOP_CMD jar $STREAM_JAR_PATH
10     -input $INPUT_FILE_PATH 11     -output $OUTPUT_PATH \ 12     -mapper "python map.py" \ 13     -reducer "python red.py" 14     -file map.py 15     -file red.py 16     -jobfonf mapred.job.name="xxx"

-input : 指定作業的輸入文件的HDFS路徑, 支持使用*通配符, 支持指定多個文件或目錄, 可多次使用

-output : 指定作業的輸出文件的HDFS路徑, 輸出目錄不能存在, 執行作業的用戶必須有創建該目錄的權限, 只能使用一次

-mapper : 自己寫的map程序

-reducer : 自己寫的reduce程序

-file : 分發文件到計算節點中, 包括map和reduce的執行文件, 以及map和reduce要用的輸入文件, 如配置文件. 類似的配置還有-cacheFile,-cacheArchive分別用於向計算節點分發HDFS文件和HDFS壓縮文件.(註意: 當輸入文件比較大的時候需要先放到HDFS中, 不能用-file分發方式)

-jobconf : 提交作業的一些配置屬性.

  常見配置:

  (1)mapred.map.tasks : map task數目

  (2)mapred.reduce.tasks : reduce task數目

  (3)stream.num.map.output.key.fileds : 指定map task輸出記錄中key所占的域數目(也就是用幾個字段做為key)

  (4)num.key.fields.for.partition : 指定對key分出來的前幾個部分做partition而不是整個key

  其它配置:

  mapred.job.name          作業名

  mapred.job.priority         作業優先級

  mapred.job.map.capacity         最多同時運行map任務數

  mapred.job.reduce.capacity        最多同時運行reduce任務數

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

  mapred.compress.map.output      map的輸出是否壓縮

  mapred.map.output.compression.codec map的輸出壓縮方式

  mapred.out.compress reduce的輸出是否壓縮

  mapred.output.compression.codec   reduce的輸出壓縮方式

  stream.map.output.field.separator    map輸出分隔符

Hadoop Streaming開發要點