代码之家  ›  专栏  ›  技术社区  ›  Pyd

使用oozie执行shell脚本时出错

  •  0
  • Pyd  · 技术社区  · 6 年前

    我想跑 kafka-connect-hdfs 使用 Oozie version: 4.2.0.2.6.5.0-292 通过脚本文件 sample.sh .
    是的,我知道我们可以直接运行Kafka HDFS连接器,但是应该通过Oozie来实现。
    卡夫卡有一个话题 sample 里面有一些数据。
    试图通过Oozie将数据推送到HDF。
    我来这里之前已经提到了很多资源,但现在运气好了。

    误差

    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 在HDFS中。

    注意:在集群中运行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
    

    工作流程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>
    

    SH 哎呀!/BI/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放在融合的kafka中,放到hdfs中的oozie/lib目录中。

    用于纱线和Oozie错误日志的链接。 yarn-oozie-error-logs

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   OneCricketeer Gabriele Mariotti    6 年前

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

    它永远不会死,除非发生错误,如果Oozie重新启动一个失败的任务,你几乎可以保证在HDF上得到重复的数据,因为连接偏移量不会持久存储在除本地磁盘以外的任何地方(假设连接在单独的机器上重新启动),所以我看不到这一点。

    你应该独立运行 connect-distributed.sh 作为专用计算机集上的系统服务,然后将配置JSON发布到连接HTTP端点。然后,任务将作为连接框架的一部分进行分发,偏移量将持久地存储回Kafka主题中,以实现容错性。


    如果你绝对想使用Oozie,Confluent包含了camus工具,这是不赞成使用connect的,但是我已经维护了camus+oozie过程一段时间了,它工作得很好,一旦添加了很多主题,就很难监控失败。ApacheGobbilin是该项目的第二个迭代,不是由Confluent维护的。

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