Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Java 为什么我的应用程序级日志在oozie中执行时会消失?_Java_Apache Spark_Log4j_Cloudera_Oozie - Fatal编程技术网

Java 为什么我的应用程序级日志在oozie中执行时会消失?

Java 为什么我的应用程序级日志在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

我在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.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没有明显的方法来跟踪这些。