为什么我的应用程序级别日志在oozie中执行时会消失?
我在CDH5环境中使用oozie。 我也在使用oozie网络控制台。 我无法从我的应用程序中看到任何日志。 我可以看到hadoop日志,火花日志等; 但我看不到特定于应用程序的日志。
在我的应用程序中,我已经包含了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-actions和spark-actions。
同样重要的是要注意,当我从命令行运行我的应用程序时,我会看到我的应用程序级别日志。
Oozie在一个不同的“启动器”工作中运行每个Action – 实际上是一个具有单个映射器的YARN工作(参见下面的例外) 。
每当您在表单job_000000000_0000
看到“外部ID”时,您就可以到达application_000000_0000
的YARN日志(是的,“job”是Hadoop 1的遗留命名约定,仍由JobHistory服务使用,但YARN有另一个命名约定)。
您的应用程序输出实际上被转储到该Oozie“启动器”的YARN日志中
- 您的StdErr按原样转储,可以在“stderr”部分中检索
- 在atrocely详细的“stdout”部分结尾处,你的StdOut被转储,每行都有一个前缀(Oozie使用该前缀管理其用于Shell和Pig操作的
技巧) - 没有任何东西进入“系统日志”部分AFAIK
底线:
- 运行
oozie job -info ******
以获取操作列表以及Oozie工作流程执行的相应“外部ID” - 对于每个
job_*****_**
遗留ID,运行yarn logs -applicationId application_*****_** | more
yarn logs -applicationId application_*****_** | more
来浏览全局YARN日志,然后放大您的特定应用日志 - 现在你可以尝试自动化那个东西……玩得开心
B-)
“启动器”Oozie工作原理的例外 – 电子邮件操作/文件系统操作只是直接从Oozie服务器进程执行的API调用; 并且MapReduce Action产生具有多个Mappers和Reducers的常规YARN作业。