使用oozie执行shell脚本时出错



我正试图通过脚本文件sample.sh使用Oozie version: 4.2.0.2.6.5.0-292运行kafka-connect-hdfs
是的,我知道我们可以直接运行kafka-hdfs连接器,但它应该通过oozie实现
Kafka有一个主题sample,里面有一些数据。
试图通过oozie将这些数据推送到hdfs
我来这里之前参考了很多资源,但现在运气不错。

错误

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)授予了权限,所有文件都在hdfs的位置/user/root/sample中。

注意:在集群中运行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#/垃圾桶/垃圾桶

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

我找不到错误的原因,我还试着把所有的罐子放在hdfs中的融合kafka到oozie/lib目录中。

纱线和oozie错误日志链接。yarn-ozie-error-logs

谢谢!

Kafka Connect是指完全独立运行的进程,而不是通过Oozie进行调度。

除非出现错误,否则它永远不会死。如果Oozie重新启动一个失败的任务,你几乎可以保证在HDFS上获得重复的数据,因为Connect偏移量不会永久存储在本地磁盘之外的任何地方(假设Connect在单独的机器上重新启动(,所以我看不出这有什么意义。

相反,您应该将connect-distributed.sh作为系统服务在一组专用机器上独立运行,然后将配置JSON POST到Connect HTTP端点。然后,任务将作为Connect框架的一部分进行分发,偏移量将永久存储回Kafka主题中,用于容错


如果你绝对想使用Oozie,Confluent包括Camus工具,该工具已被弃用,支持Connect,但我已经维护Camus+Oozie流程一段时间了,它运行得很好,只是一旦添加了很多主题,就很难监测故障。Apache Gobbilin是该项目的第二次迭代,不由Confluent 维护

它还显示您正在运行HDP,所以ApacheNifi应该能够安装在您的集群上,也可以处理Kafka&HDFS相关任务

最新更新