hadoop mapreduce.partition.keypartitioner.options не работает - PullRequest
0 голосов
/ 28 августа 2018

Я хочу разделить данные только тогда, когда первое поле ключа совпадает с редуктором.
Например, [ 11 * * * ] данные. Но, похоже, keypartitioner не работает, я действительно не знаю, почему.

Окружающая среда enter image description here

Версия Hadoop enter image description here

Код 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 * * * * ] не отправляются на один и тот же редуктор ... Кто-нибудь знает почему? Спасибо.

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

Теперь я знаю, полезно удалить эту строку

-D map.output.key.field.separator="\t" \ 

После удаления этой опции результат будет правильным, но более запутанным по причине. Значение по умолчанию для map.output.key.field.separator, по-видимому, просто вкладка, но после того, как я напишу его здесь, будет ошибка .........

...