Ответ 1
Предполагая, что вы используете Hadoop Streaming, вам нужно использовать класс KeyFieldBasedComparator.
-
-D mapred.output.key.comparator.class= org.apache.hadoop.mapred.lib.KeyFieldBasedComparator следует добавить в поточную команду
-
Вам нужно указать тип сортировки, требуемый с помощью mapred.text.key.comparator.options. Некоторые полезные: -n: числовая сортировка, -r: обратная сортировка
ПРИМЕР:
Создайте идентификатор и редуктор со следующим кодом
Это mapper.py и reducer.py
#!/usr/bin/env python
import sys
for line in sys.stdin:
print "%s" % (line.strip())
Это input.txt
1
11
2
20
7
3
40
Это команда Потоковая передача
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator
-D mapred.text.key.comparator.options=-n
-input /user/input.txt
-output /user/output.txt
-file ~/mapper.py
-mapper ~/mapper.py
-file ~/reducer.py
-reducer ~/reducer.py
И вы получите требуемый вывод
1
2
3
7
11
20
40
ПРИМЕЧАНИЕ:
-
Я использовал простой один ключевой ввод. Если, однако, у вас есть несколько ключей и/или разделов, вам необходимо будет изменить mapred.text.key.comparator.options по мере необходимости. Поскольку я не знаю вашего примера использования, мой пример ограничен этим
-
Требуется сопоставление идентификаторов, так как вам понадобится по крайней мере один картограф для выполнения задания MR.
-
Необходим редуктор идентичности, так как фаза случайной или сортировки не будет работать, если это чистое задание только для карты.