我正在通过在Oozie java动作中调用Driver类来执行map-reduce代码。映射reduce运行成功,我按预期获得输出。但是,我的驱动程序类中的日志语句未显示在oozie作业日志中。我正在使用log4j登录我的驱动程序类。 我是否需要进行一些配置更改才能查看日志?我的workflow.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>
`
答案 0 :(得分:0)
进入纱的日志。
就我而言,我有一个自定义的Java操作。如果您在Yarn UI中查看,则必须深入研究Java动作所在的映射器任务。因此,在我的情况下,oozie 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
(在“ yarn logs”网络控制台中为 not ,它们是纱线自己的日志,而不是其托管的日志)。您可以通过查找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说事情失败了。但是动作的状态为“完成”,纱线的施加状态为“成功”,这似乎很奇怪。
该命令行输出还可以显示作业历史记录的网址,这很有帮助。这将打开将您带到运行Java的父应用程序的网页。如果单击页面上的小日志链接,则会看到一些日志。如果您仔细查看该页面,则说它运行了“任务类型映射”的1个操作。如果单击该行中的链接,它将带您到实际的任务,在我的情况下为task_1587370152078_1090_m_000000
。您必须单击以查看第一次尝试,即attempt_1587370152078_1090_m_000000_0
,然后在右侧有一个小的日志链接,其中显示了一些更具体的日志记录。
知道应用程序ID后,您还可以向yarn询问日志:
yarn logs -applicationId application_1587370152078_1090
那向我显示了非常详细的日志,包括我在控制台上看不到的自定义Java日志,在那里我可以真正看到发生了什么。
请注意,如果您正在编写自定义代码,则希望让yarn设置log4j属性文件,而不是提供您自己的版本,以便yarn工具可以找到您的日志。该代码将带有一个标志运行:
-Dlog4j.configuration=container-log4j.properties
详细的日志显示了所有添加到类路径的jar。您应该确保自定义代码使用相同的jar和log4j版本。