Я хочу разделить данные только тогда, когда первое поле ключа совпадает с редуктором.
Например, [ 11 * * * ]
данные.
Но, похоже, keypartitioner
не работает, я действительно не знаю, почему.
Окружающая среда
Версия Hadoop
Код run.sh находится здесь --->
#!/usr/bin/sh
hadoop fs -rm -r /training/likang/tmp2
hadoop fs -rm /training/likang/tmp/testfile
hadoop fs -put testfile1 /training/likang/tmp/testfile
hadoop-streaming -D stream.map.output.field.separator="\t" \
-D stream.num.map.output.key.fields=2 \
-D map.output.key.field.separator="\t" \
-D mapreduce.partition.keypartitioner.options=-k1,1 \
-D mapreduce.job.maps=2 \
-D mapreduce.job.reduces=2 \
-D mapred.job.name="lk_filt_rid" \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-input /training/likang/tmp/testfile \
-output /training/likang/tmp2 \
-mapper "cat" -reducer "cat"
hadoop fs -cat /training/likang/tmp2/part-00000
echo "------------------"
hadoop fs -cat /training/likang/tmp2/part-00001
Входной файл - testfile1 --->
11 5 333 111
11 5 777 000
11 3 888 999
11 9 988 888
11 7 234 2342
11 5 4 4
15 9 230 134
12 8 232 834
15 77 220 000
15 33 256 399
11 5 999 888
15 9 222 111
14 88 372 233
15 9 66 77
11 5 821 221
11 0 11 11
15 0 22 22
12 0 33 33
14 0 44 44
В результате получается, что все данные [ 11 * * * * ]
не отправляются на один и тот же редуктор ... Кто-нибудь знает почему? Спасибо.