【问题标题】:Get exception stacktrace as output from Oozie Java Action获取异常堆栈跟踪作为 Oozie Java Action 的输出
【发布时间】:2016-05-05 09:46:47
【问题描述】:

我在 Oozie 上运行了一个 java 操作。如果此 java 操作失败,我想获得完整的 Java 异常。 Java 操作只使用一个 jar 文件。这是java操作

<workflow-app name='proj-wf' xmlns="uri:oozie:workflow:0.2">
    <start to='startIndex'/>
    <action name='startIndex'>
       <java>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        <main-class>com.myproj.MyDriverJob</main-class>
            <arg>-Dlww.commit.on.close=true</arg>

            <capture-output/>
        </java>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
    <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}] </message>
    </kill>
    <end name='end'/>
</workflow-app>

它如何发回我的 java 类中发生的错误。 我正在寻找一种将异常堆栈跟踪发送回我的服务器的方法。

【问题讨论】:

  • 您可以简单地查看 hadoop 日志文件以查看异常堆栈跟踪。
  • @Asankasanjaya 更新了问题。我正在寻找一种将异常堆栈跟踪发送回我的服务器的方法。
  • "my server" 到底是什么意思> 你的意思是添加到 Oozie 作业日志(不可行的 AFAIK),或者向某些自定义监控应用程序发送警报 w / 堆栈作为有效负载(YARN AFAIK 不可行)?
  • 请记住,Oozie 将您的工作提交给外部分布式系统 (YARN);然后它只是不时地轮询 YARN 以获取状态。不是细节。
  • 如果您是勇敢者之一,您可以从 Oozie 检索 YARN 作业 ID(参见 oozie.apache.org/docs/4.1.0/…,但要注意旧版 job_ 与较新的 application_ 前缀不匹配)并构建一些自定义代码,使用其 REST API 从 YARN 请求日志详细信息、解析它、将其发送到某处等。

标签: java oozie oozie-coordinator


【解决方案1】:

在您的 java 类中使用 System.exit(int n),因为这将使 java 操作执行错误转换。

这样,您可以在 Java 操作失败的情况下获得异常堆栈跟踪。

【讨论】:

  • 我会在${wf:errorMessage(wf:lastErrorNode())}中得到错误信息吗
  • 是的,你可以使用上面的代码得到错误信息
【解决方案2】:

处理 Java 代码中的所有异常,并在每个 catch 块中,将 Oozie 属性键(例如,Error)设置为异常文本(例如,e.toString())。使用System.exit(0) 退出。 (目前,使用System.exit(1) 退出似乎会阻止 Oozie 捕获输出。)有关 Oozie 如何捕获 Java 操作的输出的详细信息,请参阅herehere

然后,您可以在 Oozie 工作流程中访问 Error,并使用 Email action 将其通过电子邮件发送给自己。

提示:在代码中处理异常的更好方法是使用全局单例 ErrorHandler 类来设置 Oozie Error 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-01-05
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2010-10-10
    相关资源
    最近更新 更多