Hadoop имеет библиотеку под названием KeyFieldBasedPartitioner http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/KeyFieldBasedPartitioner.html
Использование этого параметра в качестве опции при запуске вашей работы, так как разделитель для вашей потоковой работы позволяет разбить выходные данные преобразователя на пары ключ / значение и получить ключихешируется вместе, переходя к одному и тому же редуктору и сортируя, включая значения http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#More+Usage+Examples
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D mapreduce.map.output.key.field.separator=. \
-D mapreduce.partition.keypartitioner.options=-k1,2 \
-D mapreduce.job.reduces=12 \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
Здесь -D stream.map.output.field.separator =.и -D stream.num.map.output.key.fields = 4 объясняются здесь http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#Customizing+How+Lines+are+Split+into+Key%2FValue+Pairs в основном это то, как вы вывели поля сопоставления для определения пар ключ / значение.
Ключи вывода карты указанного выше задания MapReduce обычно имеют четыре поля, разделенных ".".Однако платформа MapReduce будет разделять выходные данные карты по первым двум полям ключей, используя опцию -D mapreduce.partition.keypartitioner.options = -k1,2.Здесь -D mapreduce.map.output.key.field.separator =.определяет разделитель для раздела.Это гарантирует, что все пары ключ / значение с одинаковыми первыми двумя полями в ключах будут разделены на один и тот же редуктор.
Это фактически эквивалентно указанию первых двух полей в качестве первичного ключа и следующих двухполя как вторичные.Первичный ключ используется для разделения, а комбинация первичного и вторичного ключей используется для сортировки.
Чтобы выполнить объединение, достаточно просто вывести поля из сопоставителя и задать параметрыпри запуске вашей конфигурации для полей, которые являются ключами, и в редукторе все ваши значения будут соответствующим образом соединены ключом.Если вы хотите получать данные из нескольких источников, просто продолжайте добавлять больше -input в командной строке ... если они имеют различную длину ввода, то в вашем преобразователе вы можете распознать это и создать стандартный формат вывода из преобразователя.