Hadoop Streaming実戦:出力ファイル分割


Hadoop streamingフレームワークはデフォルトで'/t'を区切り記号とし、各行の最初の'/t'の前の部分をkeyとし、残りの内容をvalueとし、'/t'区切り記号がなければ、行全体をkeyとすることを知っています.このkey/tvalueペアはまたreduceの入力として機能します.hadoopは、ユーザーが自主的にセパレータを設定するための構成を提供します.      -D stream.map.output.field.separator:map出力のkeyとvalueの区切り記号-D streamを設定します.num.map.output.key.Fields:mapプログラムの区切り記号の位置を設定、その位置の前の部分をkeyとし、その後の部分をvalue-D mapとする.output.key.field.separator:map出力におけるkey内部の分割子-D num.keyを設定する.fields.for.partition:バケットを指定する場合、keyはセパレータに従って切断され、バケットkeyが占める列数(-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitionerと併用)-D stream.reduce.output.field.separator:reduce出力のkeyとvalueの区切り記号-D streamを設定します.num.reduce.output.key.fields:reduceプログラム区切り記号の位置を設定する例:1.mapプログラムmapperを作成する.sh;reduceプログラムreducer.sh; テストデータtxt
mapper.sh:
#!/bin/sh
cat

reducer.sh:
#!/bin/sh
sort

test.txt :
1,2,1,1,1
1,2,2,1,1
1,3,1,1,1
1,3,2,1,1
1,3,3,1,1
1,2,3,1,1
1,3,1,1,1
1,3,2,1,1
1,3,3,1,1

       2.  test.txtはhadoopを入れ、2つの方式で1)区切り記号なし設定で実行
$ hadoop fs -put test.txt /app/test/
$ hadoop streaming -input /app/test/test.txt /
	-output /app/test/test_result /
	-mapper ./mapper.sh -reducer ./reducer.sh 
	-file mapper.sh -file reducer.sh /
	-jobconf mapred.reduce.tasks=2 /
	-jobconf mapre.job.name="sep_test"
$ hadoop fs –cat /app/test/test_result/part-00000
    1,2,2,1,1
    1,3,1,1,1
    1,3,1,1,1
    1,3,3,1,1
    1,3,3,1,1
$ hadoop fs –cat /app/test/test_result/part-00001
    1,2,1,1,1
    1,2,3,1,1
    1,3,2,1,1
    1,3,2,1,1

2)セパレータ運転の設定
$ hadoop streaming -D stream.reduce.output.field.separator=, 
        -D stream.num.reduce.output.key.fields=2 
         -input /app/test/test.txt
        -output /app/test/test_result_1 
        -mapper ./mapper.sh -reducer ./reducer.sh     
        -file mapper.sh   -file reducer.sh 
        -jobconf mapred.reduce.tasks=2 
        -jobconf mapre.job.name="sep_test"
$ hadoop fs -cat /app/test/test_result_1/part-00000
    1,2     1,1,1
    1,2     2,1,1
    1,2     3,1,1
$ hadoop fs -cat /app/test/test_result_1/part-00001
    1,3     1,1,1
    1,3     1,1,1
    1,3     2,1,1
    1,3     2,1,1
    1,3     3,1,1
    1,3     3,1,1