Я хочу создать рабочий процесс 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?