当前位置: 首页 > 面试题库 >

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

洪胜涝
2023-03-14
问题内容

我在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在不同的“启动程序”工作中运行每个Action-实际上是具有单个映射器的YARN工作 (请参见下面的例外)

只要您在表单中看到“外部ID”,job_000000000_0000就可以访问YARN日志application_000000_0000
(是的,“ job”是Hadoop 1中的旧命名约定,仍由JobHistory服务使用,但是YARN还有另一种命名约定)。

您的应用程序输出实际上已 转储到该Oozie“启动器”的YARN日志中

  • 您的StdErr原样转储,可以在“ stderr”部分中检索
  • 您的StdOut会在冗长的“ stdout”部分的结尾处转储,并在每行上带有前缀 (Oozie使用该前缀来管理<capture_output/>Shell和Pig操作的技巧)
  • 没有任何东西进入“系统日志”部分AFAIK

底线:

  1. 运行oozie job -info ******以获取操作列表以及用于Oozie工作流程执行的相应“外部ID”
  2. 对于每个job_*****_**旧版ID,请运行yarn logs -applicationId application_*****_** | more以浏览全局YARN日志,然后放大您的特定应用日志
  3. 现在您可以尝试自动执行该操作…玩得开心 B-)

“启动器” Oozie工作原理的例外
-电子邮件操作/文件系统操作只是直接从Oozie服务器进程执行的API调用;然后MapReduce动作会生成带有多个Mappers和Reducers的常规YARN作业。



 类似资料:
  • 我应该何时使用低于日志级别?如果有任何例子,那将是伟大的。 跟踪与调试 警告 vs 错误 vs 致命 警告Vs错误VS致命 我是否需要首先在我的应用程序代码中使用FATAL? 迄今为止,在我参与的项目中,我从未在任何代码中看到致命的日志记录。 我读过,如果FATAL程序将结束。如果是这种情况,我想知道我的日志语句将如何执行。 此外,我认为在内存分配的情况下不能使用FATAL,因为JVM会抛出内存溢

  • 问题内容: 使用log4j时,该方法可用,可用于在运行时确定的日志级别记录消息。我们正在利用这个事实和技巧将stderr重定向到特定日志级别的记录器。 slf4j没有我可以找到的通用方法。这是否意味着无法实现上述目的? 问题答案: 无法使用来执行此操作。 我认为缺少此功能的原因是几乎无法构造一个类型,该类型可以有效地映射到幕墙后面所有可能的记录实现中使用的(或等效)类型。另外,设计人员认为您的用例

  • 我正在IntelliJ中进行一个Scala项目,该项目是通过SBT创建的。该项目将Spark作为其依赖项之一。我还在开发阶段,所以一切都在我的本地机器上运行。 我如何更改Spark配置,比如日志级别?

  • 我使用Log4J来记录应用程序运行时进程。这是我的log4j。属性文件: 我已经在Tomcat上部署了应用程序,并调用了一些它的方法来获取日志消息。在这些操作之后,在${CATALINA_HOME}/logs文件夹中,我得到了一些. log文件: 卡塔琳娜。2017-02-12.日志(没有我的应用信息) 在我的应用程序中,我得到的记录器为: 我还尝试用INFO和ERROR级别记录消息。 结果,我得

  • 唯一可以解决这一问题的方法是在startup.configure()中添加下面一行代码: 上面的解决方案是不可取的,因为我们希望根据环境不同地配置日志级别,因此基于配置的解决方案将是首选的。此外,我猜测问题是配置相关的,因为它在本地运行良好。在Azure中没有特殊的配置。 下面是整个startup.configure():

  • 我在我的项目中进行了强制日志记录,并且我很难抑制我不想要的日志记录语句。 还有,我在使用log4j时看不到这些记录器。我正在尝试学习Logback,因为我已经被指派来评估它作为团队可能的升级。