Как включить пользовательскую команду в MapReduceIndexerTool в Oozie?

Я хочу создать рабочий процесс Oozie, который будет использовать MapReduceIndexerTool, чтобы взять мои данные и проиндексировать их. Мне удалось заставить его работать с помощью действия Shell, которое вызывает мой скрипт для выполнения следующей команды:

hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-*-job.jar \
org.apache.solr.hadoop.MapReduceIndexerTool \
-D 'mapred.child.java.opts=-Xmx500m' \
--morphline-file morphline.conf \
--output-dir hdfs://cloudera1:8020/user/nicolas/outdir \
--verbose --go-live --zk-host cloudera2:2181/solr  \
--collection Test_Collection hdfs:///user/nicolas/indir

Он найдет все необходимые файлы и каталоги, и рабочий процесс завершится успешно. Однако я хотел бы добавить свою пользовательскую команду Morphlines для изменения некоторых данных. Я следую руководству по кайтсдк, чтобы сделать именно это. Я упаковал свой код в банку и загрузил его в hdfs://cloudera1:8020/user/nicolas/custom-command.jar через файловый браузер Hue. Я также обновил свой morphline.conf, чтобы импортировать свой пакет и использовать свою команду. Если я просто включу файл в свой рабочий процесс, возникнет следующая ошибка:

Error: org.kitesdk.morphline.api.MorphlineCompilationException: No command builder registered for name: tweakData ...

Я предполагаю, что MapReduceIndexerTool не может найти мою банку. Итак, я решил добавить в свой скрипт параметр --libjars:

hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-*-job.jar \
org.apache.solr.hadoop.MapReduceIndexerTool \
--libjars hdfs://cloudera1:8020/user/nicolas/custom-command.jar ...

Когда я это делаю, возникает другая ошибка:

WARN org.apache.hadoop.security.UserGroupInformation - PriviledgedActionException
as:yarn (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist:
hdfs://cloudera1:8020/tmp/hadoop-yarn/mapred/staging/yarn1033647717/.staging/job_local1033647717_0001/libjars/custom-command.jar

TD;DR Как мне включить банку для моей пользовательской команды Morphlines, чтобы она была найдена Oozie / YARN?


person Nicolas    schedule 07.11.2014    source источник


Ответы (2)


Вы можете добавить банки в подкаталог lib каталога oozie wf HDFS или добавить банку в тег в действии оболочки oozie.

person VishAmdi    schedule 30.10.2015

--libjars требует файл в локальной файловой системе (а не файл HDFS).

person Wolfgang    schedule 10.11.2014
comment
Это имеет смысл. Когда я включаю путь к локальному файлу, мне нужно, чтобы мой jar скопировался на все мои узлы, иначе у него возникнут проблемы с его поиском. Есть ли простой способ сделать это, особенно в большом кластере? - person Nicolas; 10.11.2014
comment
Это просто — Hadoop уже автоматически копирует --libjars из локальной файловой системы на удаленные узлы, на которых выполняются задачи mapreduce (через распределенный кеш Hadoop). - person Wolfgang; 11.11.2014
comment
Все файлы jar, необходимые для моего MapReduce, присутствуют в локальной файловой системе узлов Hadoop (/home/ubuntu/libs/). Во время выполнения они называются hdfs://‹ip›:‹port›:/home/ubuntu/libs, а не из локальной файловой системы узла. Как я могу решить эту проблему? - person Tariq; 30.01.2015