Hadoop Mapreduce分区程序未按预期工作

Hadoop Mapreduce分区程序未按预期工作,hadoop,mapreduce,bigdata,Hadoop,Mapreduce,Bigdata,我正在做以下mapreduce工作: 地图面: 映射器将以A\tB\t\t1的形式输出,其中A和B一起是复合键 我在这项工作中使用了几个reducer(reducer是identity reducer,A->A),并希望根据复合键进行分区。我运行此命令以启动mapreduce作业 hadoop jar hadoop-streaming-2.7.1.jar \ -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.K

我正在做以下mapreduce工作: 地图面: 映射器将以
A\tB\t\t1
的形式输出,其中A和B一起是复合键

我在这项工作中使用了几个reducer(reducer是identity reducer,
A->A
),并希望根据复合键进行分区。我运行此命令以启动mapreduce作业

hadoop jar hadoop-streaming-2.7.1.jar \
 -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
    -D stream.num.map.output.key.fields=2 \
    -D mapred.text.key.comparator.options="-k1n -k2n" \ 
    -D mapred.text.key.partitioner.options=-k1 \
    -D mapreduce.job.reduces=4 \
    -files /mapper,/reducer \
    -mapper ./mapper \
    -reducer ./reducer \
    -input /data \
    -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
    -output /result
我希望输出的内容如下: 减速器A的输出:

A B 1 
A B 1 
A C 1 
A D 1 
A E 1
减速器B的输出:

B E 1 
B G 1
E G 1 
B H 1

但是,现在的输出是A作为主键(在上述情况下为A和B)可能出现在不同的还原器中。这里有什么提示吗?

您可以发布复合密钥的定义吗?您是否在其中覆盖了hashCode?或者你只是在使用一个连接的文本对象?@ison你找到解决方法了吗?我也有同样的问题。