从Oozie Java操作获取异常stacktrace作为输出
我在Oozie上运行了一个java操作。如果这个Java操作失败,我希望获得完整的Java异常。 Java操作只是使用一个jar文件。下面是java操作从Oozie Java操作获取异常stacktrace作为输出,java,oozie,oozie-coordinator,Java,Oozie,Oozie Coordinator,我在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> &l
<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>
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
com.myproj.MyDriverJob
-Dlww.commit.on.close=true
Java失败,错误消息[${wf:errorMessage(wf:lastErrorNode())}]
它如何发回java类中发生的错误。
我正在寻找将异常堆栈跟踪发送回我的服务器的方法。在java类中使用System.exit(int n)
,因为这将使java操作执行错误转换
这样,您可以在Java操作失败的情况下获取excpetion stacktrace。处理Java代码中的所有异常,并在每个catch块中,将Oozie属性键(例如,
Error
)设置为异常文本(例如,e.toString()
)。使用系统退出。退出(0)
。(目前,使用System.exit(1)
退出似乎会阻止Oozie捕获输出。)有关Oozie如何从Java操作捕获输出的详细信息,请参阅和
然后,您可以访问Oozie工作流中的Error
,并使用电子邮件将其发送给您自己
提示:处理代码中异常的更好方法是使用一个全局单例
ErrorHandler
类来设置OozieError
属性 您只需查看hadoop日志文件即可查看异常堆栈跟踪。@Asankasanjaya更新了问题。我正在寻找一种将异常stacktrace发送回我的服务器的方法。你所说的“我的服务器”>到底是什么意思?你的意思是添加到Oozie作业日志(AFAIK不可行),或将警报发送到某个自定义监控应用程序,并将堆栈作为有效负载(Thread AFAIK不可行)?记住Oozie将作业提交到外部分布式系统(Thread); 然后它只是不时地轮询纱线以获得状态。不是细节。如果你是勇敢者之一,你可以从Oozie检索Thread作业ID(请参阅,但要注意遗留的作业
与较新的应用程序
前缀不匹配),并构建一些自定义代码,使用其REST API从Thread请求日志详细信息,解析它,将它发送到某处,等等。我会收到错误消息吗${wf:errorMessage(wf:lastErrorNode())}是的,您可以使用上面的代码获取错误消息