当我为我的python mapper和reducer代码运行hadoop streaming命令时,数据在reduce阶段之前不会被分区并正确排序。 键值分离的分隔符是' |'。输入数据也是
形式1901|100
1901|50
1903|400
1904|500
我正在运行的命令:
hadoop jar /opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/tools/lib/hadoop-streaming-2.7.0-mapr-1607.jar \
-D mapreduce.job.name="test_sort " \
-D stream.map.input.field.separator='|' \
-D stream.map.output.field.separator='|' \
-D stream.num.map.output.key.fields=2 \
-D mapreduce.input.keyvaluelinerecordreader.key.value.separator='|' \
-D mapreduce.partition.keypartitioner.options=-k1,1 \
-D mapreduce.job.output.key.comparator.class=org.apache.hadoop.mapreduce.lib.partition.KeyFieldBasedComparator \
-D mapreduce.partition.keycomparator.options="-k1n -k2n" \
-D mapreduce.job.reduces=3 \
-input /test_sort/input.txt \
-output /test_sort/test_30_03 \
-mapper "python check_mapper.py" \
-file check_mapper.py \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner