2017-07-18 45 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:

-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

您还需要指定您的分区器。在你的情况下,其中一个默认值KeyFieldBasedPartitioner可以工作。

+0

我修改了文档,但仍然不起作用。但我使用和修改另一个run.sh,它的工作原理。我不知道为什么,但是谢谢你的回答。 – plainter

相关问题