【问题标题】:Oozie java action logger logs are not shown on Oozie consoleOozie Java 操作记录器日志未显示在 Oozie 控制台上
【发布时间】:2016-09-23 21:30:06
【问题描述】:

我正在通过调用 Oozie java 操作中的 Driver 类来执行 map-reduce 代码。 Map 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>

`

【问题讨论】:

  • Oozie 将实际执行委托给 YARN,因此如果您的应用程序将任何内容记录到 Stdout 和/或 Stderr,那么您必须深入研究 YARN 日志。在 Oozie 日志中查看该操作的“外部 ID”,然后将 job_11111_99999999 (旧 MR1 命名) 替换为 application_11111_99999999 并使用 YARN GUI 或 YARN 命令行检索日志为那份工作。
  • 另一方面,如果您的应用程序将任何内容记录到本地文件中,那么当 YARN 取消分配容器时,该文件可能已被销毁。呵呵。

标签: java logging mapreduce workflow oozie


【解决方案1】:

进入 Yarn 的原木。

就我而言,我有一个自定义 java 操作。如果您查看 Yarn UI,您必须深入了解 java 操作所在的映射器任务。所以在我的情况下,oozie wf 项目是 0070083-200420161025476-oozie-xxx-Woozie 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 说事情失败了。然而,动作的状态是“FINISHED”,而纱线应用状态是“SUCCESS”,这看起来很奇怪。

命令行输出还显示了作业历史记录的 URL。这将打开一个网页,将您带到运行您的 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 版本。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2021-09-23
    • 2023-02-26
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多