2017-07-18 21 views
0

ローカル環境でmap.pyとreduce.pyをテストしました。Hadoop Mapreduce:マッパーからレデューサーにデータを分割する方法

のような入力ファイル:よう

R55726rest149624640000014962753030007006483323902288110000NJ110112hoboken R55726rest149636308400014964192000007063481824780452130000NY130800hoboken R23412rest149641920000014965055650007063480924780416130000NJ130800weehawken 

地図の出力:

R55726,1496246400000,1496275303000,70064833,23902288,Hoboken 
R55726,1496289016000,1496293537000,70685312,24637310,Hoboken 
R12345,1496357338000,1496357862000,70634437,24780843,Jersey city 
R12345,1496357921000,1496361659000,70632989,24780983,Jersey city 

それから私は、最初の列で地図の出力データを分割したいです。一部-00000、パート-00001

run.sh:

最終出力は、2つのファイルがあります

-D stream.map.output.field.separator=, \ 
-D stream.num.map.output.key.fields=2 \ 
-D map.output.key.field.separator=, \ 
-D num.key.fields.for.partition=1 \ 
-numReduceTasks 1 \ 

をしかし、それはうまくいきません。 プログラムの修正方法を教えてください。どうもありがとうございました!

答えて

0

Hadoop docsから:

hadoop jar hadoop-streaming-2.7.3.jar \ 
    -D stream.map.output.field.separator=. \ 
    -D stream.num.map.output.key.fields=4 \ 
    -D map.output.key.field.separator=. \ 
    -D mapreduce.partition.keypartitioner.options=-k1,2 \ 
    -D mapreduce.job.reduces=12 \ 
    -input myInputDirs \ 
    -output myOutputDir \ 
    -mapper /bin/cat \ 
    -reducer /bin/cat \ 
    -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 

あなたが探しているプロパティがmapreduce.partition.keypartitioner.optionsです。

また、パーティショナーを指定する必要があります。あなたの場合、デフォルトの1つ、KeyFieldBasedPartitionerが動作します。

+0

私はドキュメントを変更しますが、それでも動作しません。しかし、私は別のrun.shを使用して変更します。私は理由を知らないが、あなたの答えに感謝する。 – plainter

関連する問題