Hadoop Streaming開發要點
一.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_PATH10 -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開發要點