TL; DRКак загрузить дополнительные JARs для работы Hadoop Streaming на Amazon EMR
Как я могу загрузить или задать дополнительные JARs к Hadoop Streaming Работа на Amazon Elastic MapReduce (Amazon EMR)?
Длинная версия
Я хочу проанализировать набор Avro файлов (> 2000 файлов) с использованием Hadoop на Amazon Elastic MapReduce (Amazon EMR). Это должно быть простое упражнение, через которое я должен получить некоторую уверенность в MapReduce и Amazon EMR (я новичок в обоих).
Поскольку python - мой любимый язык, я решил использовать Hadoop Streaming. Я построил простой mapper и редуктор в python, и я проверил его на локальном Hadoop (установка одного узла). Команда, которую я выдавала на моей местной установке Hadoop, была следующей:
$HADOOP_PREFIX/bin/hadoop jar $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming-2.4.0-amzn-1.jar \
-files avro-1.7.7.jar,avro-mapred-1.7.7.jar \
-libjars avro-1.7.7.jar,avro-mapred-1.7.7.jar \
-input "input" \
-mapper "python2.7 $PWD/mapper.py" \
-reducer "python2.7 $PWD/reducer.py" \
-output "output/outdir" \
-inputformat org.apache.avro.mapred.AvroAsTextInputFormat
и работа выполнена успешно.
У меня есть ведро на Amazon S3 с папкой, содержащей все входные файлы и другую папку с скриптами картографа и редуктора (и reducer.py
соответственно).
Использование интерфейса я создал небольшой кластер, а затем я добавил bootstrap action установить все необходимые питон модули на каждом узле, а затем я добавил "Hadoop Streaming" step указав расположение Mapper и редукторных скриптов на S3.
Проблема в том, что у меня нет ни малейшего представления о , как я могу загрузить или указать в параметрах два JARs - avro-1.7.7.jar
и avro-mapred-1.7.7.jar
- требуется для запуска этой работы?
я пытался несколько вещей:
- используя
-files
флаг в сочетании с-libjars
в необязательные аргументы; - добавление другого загрузочного действия, которое загружает JAR на каждом узле (и я попытался загрузить его в разных местах на узлах);
- Я попытался загрузить JAR на моем ковше и указать полный путь
s3://...
как аргумент-libjars
(обратите внимание: этот файл активно игнорируется Hadoop и выдается предупреждение) в параметрах;
Если я не сдал два JARs задание выходит из строя (она не признает -inputformat
класса), но я попробовал все возможности (и их комбинации!) Я мог думать без толка.