Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Oozie Java操作获取异常stacktrace作为输出_Java_Oozie_Oozie Coordinator - Fatal编程技术网

从Oozie Java操作获取异常stacktrace作为输出

从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

我在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>

${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
类来设置Oozie
Error
属性

您只需查看hadoop日志文件即可查看异常堆栈跟踪。@Asankasanjaya更新了问题。我正在寻找一种将异常stacktrace发送回我的服务器的方法。你所说的“我的服务器”>到底是什么意思?你的意思是添加到Oozie作业日志(AFAIK不可行),或将警报发送到某个自定义监控应用程序,并将堆栈作为有效负载(Thread AFAIK不可行)?记住Oozie将作业提交到外部分布式系统(Thread); 然后它只是不时地轮询纱线以获得状态。不是细节。如果你是勇敢者之一,你可以从Oozie检索Thread作业ID(请参阅,但要注意遗留的
作业
与较新的
应用程序
前缀不匹配),并构建一些自定义代码,使用其REST API从Thread请求日志详细信息,解析它,将它发送到某处,等等。我会收到错误消息吗${wf:errorMessage(wf:lastErrorNode())}是的,您可以使用上面的代码获取错误消息