Я столкнулся с этими проблемами при использовании потоковой передачи Hadoop. Я пишу код на Python
1) Совокупный пакет библиотеки
Согласно потоковым документам hadoop (http://hadoop.apache.org/common/docs/r0.20.0/streaming.html#Working+with+the+Hadoop+Aggregate+Package+%28the+-reduce+aggregate+option%29), существует встроенный класс Aggregate, который может работать как в качестве картографа, так и редуктора.
Вот команда:
shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -combiner aggregate -reducer NONE -input input_files -output output_path
Выполнение этой команды завершает работу картографа с этой ошибкой:
java.io.IOException: Cannot run program "aggregate": java.io.IOException: error=2, No such file or directory
Однако, если вы запустите эту команду, используя агрегат в качестве редуктора, а не объединитель, задание будет работать нормально.
shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -reduce aggregate -reducer NONE -input input_files -output output_path
Значит ли это, что я не могу использовать агрегатный класс в качестве объединителя?
2) Невозможно использовать | в качестве разделителя для общих параметров
Это пример команды по ссылке выше
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-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 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12
Вы не можете использовать | в качестве аргумента для map.output.key.field.separator. Ошибка
-D: command not found
11/08/03 10:48:02 ERROR streaming.StreamJob: Missing required options: input, output
(Обновление) Вы должны выйти из | с \ как это
-D stream.map.output.field.separator=\|
3) Невозможно указать опции -D в конце команды, как в примере. Ошибка
-D: command not found
11/08/03 10:50:23 ERROR streaming.StreamJob: Unrecognized option: -D
Документация неверна или я что-то не так делаю?
Любое понимание того, что я делаю неправильно, приветствуется. Thnx