[英]Oozie java action logger logs are not shown on Oozie console
我通过在 Oozie java 操作中调用 Driver 类来执行 map-reduce 代码。 Map reduce 运行成功,我得到了预期的输出。 但是,我的驱动程序类中的日志语句未显示在 oozie 作业日志中。 我正在使用 log4j 登录我的驱动程序类。 我是否需要进行一些配置更改才能查看日志? 我的工作流.xml 的片段`
<action name="MyAppDriver">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/home/hadoop/work/surjan/outpath/20160430" />
</prepare>
<main-class>com.surjan.driver.MyAppMainDriver</main-class>
<arg>/home/hadoop/work/surjan/PoC/wf-app-dir/MyApp.xml</arg>
<job-xml>/home/hadoop/work/surjan/PoC/wf-app-dir/AppSegmenter.xml</job-xml>
</java>
<ok to="sendEmailSuccess"/>
<error to="sendEmailKill"/>
</action>
`
进入 Yarn 的日志。
就我而言,我有一个自定义的 java 操作。 如果您查看 Yarn UI,您必须深入了解 java 操作所在的映射器任务。所以在我的情况下, 0070083-200420161025476-oozie-xxx-W
wf 项目是0070083-200420161025476-oozie-xxx-W
并且oozie job -log ${wf_id}
显示java 操作0070083-200420161025476-oozie-xxx-W@java1
因 Java 异常而失败。 我看不到任何上下文。 查看 oozie Web UI,只有“作业错误日志”根据命令行上显示的内容填充。 未显示实际日志记录。 ooize job -info ${wf_id}
状态显示失败:
Actions
------------------------------------------------------------------------------------------------------------------------------------
ID Status Ext ID Ext Status Err Code
------------------------------------------------------------------------------------------------------------------------------------
0070083-200420161025476-oozie-xxx-W@:start: OK - OK -
------------------------------------------------------------------------------------------------------------------------------------
0070083-200420161025476-oozie-xxx-W@java1 ERROR job_1587370152078_1090 FAILED/KILLEDJA018
------------------------------------------------------------------------------------------------------------------------------------
0070083-200420161025476-oozie-xxx-W@fail OK - OK E0729
------------------------------------------------------------------------------------------------------------------------------------
您可以在 Web 控制台 Yarn Resource Manager UI
上搜索实际纱线(不在“纱线日志”Web 控制台中,这是纱线自己的日志,而不是它所托管的日志)。 通过查找 ooize wf 作业 ID,您可以轻松地在命令行上 grep 正确的 ID:
user@host:~/apidemo$ yarn application --list -appStates FINISHED | grep 0070083-200420161025476
20/04/22 20:42:12 INFO client.AHSProxy: Connecting to Application History server at your.host.com/130.178.58.221:10200
20/04/22 20:42:12 INFO client.RequestHedgingRMFailoverProxyProvider: Looking for the active RM in [rm1, rm2]...
20/04/22 20:42:12 INFO client.RequestHedgingRMFailoverProxyProvider: Found active RM [rm2]
application_1587370152078_1090 oozie:launcher:T=java:W=java-whatever-sql-task-wf:A=java1:ID=0070083-200420161025476-oozie-xxx-W MAPREDUCE kerberos-id default FINISHED SUCCEEDED 100% https://your.host.com:8090/jobhistory/job/job_1587370152078_1090
user@host:~/apidemo$
请注意,oozie 说事情失败了。 然而动作的状态是“完成”,纱线应用状态是“成功”,这看起来很奇怪。
有用的是,命令行输出还显示了作业历史记录的 URL。 这将打开网页,将您带到运行您的 java 的父应用程序。 如果您单击页面中的小日志链接,您会看到一些日志。 如果您仔细观察,该页面说它运行了“任务类型映射”的 1 个操作。 如果您单击该行中的链接,它会将您带到实际任务,在我的情况下是task_1587370152078_1090_m_000000
。 你必须点击它才能看到第一次尝试尝试attempt_1587370152078_1090_m_000000_0
然后在右侧你有一个小日志链接,它显示了一些更具体的日志记录。
一旦您知道应用程序 ID,您还可以向 yarn 询问日志:
yarn logs -applicationId application_1587370152078_1090
这向我展示了非常详细的日志,包括我在控制台上不容易看到的自定义 Java 日志记录,在那里我可以看到真正发生的事情。
请注意,如果您正在编写自定义代码,您希望让纱线设置 log4j 属性文件而不是提供您自己的版本,以便纱线工具可以找到您的日志。 代码将使用一个标志运行:
-Dlog4j.configuration=container-log4j.properties
详细日志显示添加到类路径的所有 jar。 您应该确保您的自定义代码使用相同的 jars 和 log4j 版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.