Ошибка при выполнении shell-скрипта с использованием oozie

Я пытаюсь бежать kafka-connect-hdfs с помощью Oozie version: 4.2.0.2.6.5.0-292 через файл скрипта sample.sh,
Да, я знаю, что мы можем запустить коннектор kafka-hdfs напрямую, но это должно происходить через oozie.
Кафка имеет тему sample и имеет некоторые данные в нем.
Попытка отправить эти данные в hdfs через oozie.
Я упомянул много ресурсов, прежде чем приехать сюда, но теперь удачи.

ОШИБКА

Launcher ERROR, reason: Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
2018-07-25 09:54:16,945  INFO ActionEndXCommand:520 - SERVER[nnuat.iot.com] USER[root] GROUP[-] TOKEN[] APP[sample] JOB[0000000-180725094930282-oozie-oozi-W] ACTION[0000000-180725094930282-oozie-oozi-W@shell1] ERROR is considered as FAILED for SLA

У меня есть все три файла в hdfs и дал разрешения на все файлы (sample.sh, job.properties, workflow.xml) имея все файлы внутри локации /user/root/sample в формате hdf.

Примечание: Запуск oozie в кластере, чтобы все три узла имели одинаковый путь и файлы в нем также как namenode(/root/oozie-demo) и confluent-kafka(/opt/confluent-4..1.1).

job.properties

nameNode=hdfs://171.18.1.192:8020
jobTracker=171.18.1.192:8050
queueName=default
oozie.libpath=${nameNode}/user/oozie/share/lib/lib_20180703063118
oozie.wf.rerun.failnodes=true
oozie.use.system.libpath=true
oozieProjectRoot=${nameNode}/user/${user.name}
oozie.wf.application.path=${nameNode}/user/${user.name}/sample

workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.3" name="sample">
<start to="shell1"/>
<action name="shell1">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
             <property>
                   <name>hadoop.proxyuser.oozie.hosts</name>
                  <value>*</value>
             </property>
             <property>
                   <name>hadoop.proxyuser.oozie.groups</name>
                   <value>*</value>
            </property>
            <property>
                    <name>oozie.launcher.mapreduce.map.java.opts</name>
                   <value>-verbose</value>
            </property>
        </configuration>
    <!--<exec>${myscript}</exec>-->
        <exec>smaple.sh</exec>
         <env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
        <file>hdfs://171.18.1.192:8020/user/root/sample/smaple.sh</file>
         <capture-output/>
    </shell>
    <ok to="end"/>
    <error to="fail"/>
</action>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
    <message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shellaction')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>

sample.sh #! / bin / bash

 sudo /opt/confluent-4.1.1/bin/connect-standalone /opt/confluent-4.1.1/etc/schema-registry/connect-avro-standalone.properties /opt/confluent-4.1.1/etc/kafka-connect-hdfs/IOT_DEMO-hdfs.properties

Я не смог найти причину ошибки, я также попытался поместить все файлы jar внутри confluent-kafka в каталог oozie/lib в hdfs.

ссылка для журналов ошибок пряжи и oozie. пряжа oozie-ОШИБОК журналы

Спасибо!

1 ответ

Решение

Kafka Connect предназначен для запуска полностью автономного процесса, не запланированного через Oozie.

Он никогда не умирает, кроме как в случае ошибки, и если Oozie повторно запускает неудавшуюся задачу, вы почти гарантированно получите дублированные данные в HDFS, потому что смещения Connect не сохраняются нигде, кроме как на локальном диске (предположим, что Connect перезагружается на отдельной машине) так что я не вижу в этом смысла.

Вместо этого вы должны работать независимо connect-distributed.sh как системная служба на выделенном наборе машин, вы отправляете конфигурацию JSON в конечную точку Connect HTTP. Затем задачи будут распространяться как часть инфраструктуры Connect, а смещения постоянно сохраняются обратно в раздел Kafka для обеспечения отказоустойчивости.


Если вы абсолютно хотите использовать Oozie, Confluent включает в себя инструмент Camus, который устарел в пользу Connect, но я уже некоторое время поддерживаю процесс Camus+Oozie, и он работает довольно хорошо, его просто сложно отследить на предмет отказа как только много тем добавлено. Apache Gobbilin - это вторая итерация этого проекта, не поддерживаемая Confluent

Также кажется, что вы работаете с HDP, поэтому Apache Nifi должен быть установлен в вашем кластере для обработки задач, связанных с Kafka и HDFS.

Другие вопросы по тегам