查找从 Oozie 协调器启动的工作流作业的堆栈跟踪
Find stack trace for workflow job launched from Oozie coordinator
我有一个符合以下规范的基本 Oozie 协调器:
<coordinator-app name="my-coord" frequency="${coord:days(1)}"
start="${startDate}" end="${endDate}" timezone="UTC"
xmlns="uri:oozie:coordinator:0.4">
<controls>
<timeout>${timeout}</timeout>
</controls>
<action>
<workflow>
<app-path>${workflow}</app-path>
</workflow>
</action>
</coordinator-app>
它在计划的标称 开始时间前后启动了工作流作业。但后来,日志显示工作流作业进入了失败状态。要检索工作信息,我 运行:
oozie job -info 0000909-190113225141152-oozie-oozi-W
它提供了有用的信息,包括以下异常跟踪:
] Launcher exception: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
org.apache.oozie.action.hadoop.JavaMainException: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:59)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:51)
at org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:242)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1724)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
at org.apache.spark.deploy.yarn.Client.run(Client.scala:1122)
at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1169)
at org.apache.spark.deploy.yarn.Client.main(Client.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
at org.apache.spark.deploy.SparkSubmit$.doRunMain(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:56)
... 15 more
不幸的是,这个堆栈跟踪——显然是从 SparkSubmit
产生的——没有说明我的工作流作业(Scala 程序)实际上失败的原因。
这似乎是一个很常见的场景——工作流逻辑失败并触发了它自己的堆栈跟踪。
在 Hadoop/Oozie/Coordinator/Workflow 设置中是否有其他地方可以查找此类堆栈跟踪?
在Hadoop环境中,您可以从Yarn资源管理器视图访问所有应用程序日志。它应该会向您显示所有 运行 应用程序及其相关日志的列表。
如果您 运行 此系统位于 Azure 中的 HDInsight 群集上,那么您将在此 link https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-access-yarn-app-logs-linux 中找到更多信息。在这里,日志位于 Ambari View -> Yarn -> Resource Manager Web View 中。否则,也许您的环境中也可能有类似的东西。
使用 yarn applications -list
查看 Hadoop 集群上的作业列表 运行ning。然后执行以下步骤:
- 在生成的应用程序列表中搜索对您的 Scala 程序名称的引用(从 Oozie 工作流作业启动)。
- 获取为 Scala 程序显示的应用程序 ID。
- 然后 运行
yarn logs -applicationId <application_ID>
.
生成的日志应显示您的 Scala 程序日志,其中夹杂着不是由 Scala 程序生成的其他日志。如果您的 Scala 程序在每个日志记录指令中嵌入一个唯一的前缀,这样您就可以从其他人那里过滤您的程序日志,这会有所帮助。
我有一个符合以下规范的基本 Oozie 协调器:
<coordinator-app name="my-coord" frequency="${coord:days(1)}"
start="${startDate}" end="${endDate}" timezone="UTC"
xmlns="uri:oozie:coordinator:0.4">
<controls>
<timeout>${timeout}</timeout>
</controls>
<action>
<workflow>
<app-path>${workflow}</app-path>
</workflow>
</action>
</coordinator-app>
它在计划的标称 开始时间前后启动了工作流作业。但后来,日志显示工作流作业进入了失败状态。要检索工作信息,我 运行:
oozie job -info 0000909-190113225141152-oozie-oozi-W
它提供了有用的信息,包括以下异常跟踪:
] Launcher exception: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
org.apache.oozie.action.hadoop.JavaMainException: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:59)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:51)
at org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:242)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1724)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: org.apache.spark.SparkException: Application application_1547448533998_26676 finished with failed status
at org.apache.spark.deploy.yarn.Client.run(Client.scala:1122)
at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1169)
at org.apache.spark.deploy.yarn.Client.main(Client.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
at org.apache.spark.deploy.SparkSubmit$.doRunMain(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:56)
... 15 more
不幸的是,这个堆栈跟踪——显然是从 SparkSubmit
产生的——没有说明我的工作流作业(Scala 程序)实际上失败的原因。
这似乎是一个很常见的场景——工作流逻辑失败并触发了它自己的堆栈跟踪。
在 Hadoop/Oozie/Coordinator/Workflow 设置中是否有其他地方可以查找此类堆栈跟踪?
在Hadoop环境中,您可以从Yarn资源管理器视图访问所有应用程序日志。它应该会向您显示所有 运行 应用程序及其相关日志的列表。 如果您 运行 此系统位于 Azure 中的 HDInsight 群集上,那么您将在此 link https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-access-yarn-app-logs-linux 中找到更多信息。在这里,日志位于 Ambari View -> Yarn -> Resource Manager Web View 中。否则,也许您的环境中也可能有类似的东西。
使用 yarn applications -list
查看 Hadoop 集群上的作业列表 运行ning。然后执行以下步骤:
- 在生成的应用程序列表中搜索对您的 Scala 程序名称的引用(从 Oozie 工作流作业启动)。
- 获取为 Scala 程序显示的应用程序 ID。
- 然后 运行
yarn logs -applicationId <application_ID>
.
生成的日志应显示您的 Scala 程序日志,其中夹杂着不是由 Scala 程序生成的其他日志。如果您的 Scala 程序在每个日志记录指令中嵌入一个唯一的前缀,这样您就可以从其他人那里过滤您的程序日志,这会有所帮助。