Java 为什么我的应用程序级日志在oozie中执行时会消失?
我在CDH5环境中使用oozie。我也在使用oozie网络控制台。我无法查看应用程序中的任何日志。我可以看到hadoop日志、spark日志等;但我没有看到特定于应用程序的日志 在我的应用程序中,我包含了src/main/resources/log4j.propertiesJava 为什么我的应用程序级日志在oozie中执行时会消失?,java,apache-spark,log4j,cloudera,oozie,Java,Apache Spark,Log4j,Cloudera,Oozie,我在CDH5环境中使用oozie。我也在使用oozie网络控制台。我无法查看应用程序中的任何日志。我可以看到hadoop日志、spark日志等;但我没有看到特定于应用程序的日志 在我的应用程序中,我包含了src/main/resources/log4j.properties # Root logger option log4j.rootLogger=INFO, stdout # Direct log messages to stdout log4j.appender.stdout=org.ap
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
在我的oozie工作流中,我有java操作和spark操作
还需要注意的是,当我从命令行运行我的应用程序时,我确实会看到我的应用程序级日志。Oozie在不同的“启动器”作业中运行每个操作——实际上是一个带有单个映射器的纱线作业(请参见下面的例外情况) 每当您在
job\u000000000\u 0000
表单中看到一个“外部ID”,您就可以访问application\u000000\u 0000
的纱线日志(是的,“job”是Hadoop 1的传统命名约定,JobHistory服务仍然使用,但纱线有另一个命名约定)
您的应用程序输出实际上是转储到Oozie“启动器”的纱线日志中
- 您的StdErr按原样转储,可以在“StdErr”部分中检索
- 您的StdOut在每一行上都有一个前缀(Oozie使用该前缀来管理Shell和Pig操作的
技巧)位于冗长的“StdOut”部分的末尾 - 没有任何东西进入“系统日志”部分
oozie作业-info******
以获取操作列表和执行oozie工作流的相应“外部ID”作业********
旧版ID,运行纱线日志-applicationId application********更多
浏览全局纱线日志,然后放大特定的应用程序日志B-
对“启动器”Oozie作业原则的例外——电子邮件操作/文件系统操作只是直接从Oozie服务器进程执行的API调用;MapReduce操作会生成一个包含多个映射器和还原器的常规纱线作业。如果您想发布应用程序,请附带说明。将日志记录到监控系统,然后您可以启动Flume代理(或HA的两个代理),并通过Log4J Flume appender直接在线发送日志。这将避免事后挖掘纱线日志的麻烦。我看到的另一件事是,如果spark应用程序的作业id为job_000000000_0000,那么我需要获取job_000000000_0001的日志才能查看spark应用程序日志…啊,那是因为Oozie“launcher”作业启动了spark驱动程序,但随后,驱动程序为其执行者启动另一个纱线作业——您必须浏览第一个纱线日志以提取第二个纱线日志的ID。对于Sqoop、Hive或Pig操作,同样的方法也会动态生成自己的纱线作业——Oozie没有明显的方法来跟踪这些。