当 Spark 作业或应用程序失败时,您可以使用 Spark 日志来分析故障。
QDS UI 提供指向应用程序 UI 和 Spark 应用程序 UI 中的日志的链接。
如果您从分析页面运行 Spark 作业或应用程序,则可以通过应用程序 UI 和 Spark 应用程序 UI 访问日志。
如果您从笔记本页面运行 Spark 作业或应用程序,则可以通过 Spark 应用程序 UI 访问日志。
访问应用程序 UI 访问 Spark 应用程序 UI 您还可以附加日志来识别 Spark 作业中的错误和异常或应用程序故障。
访问应用程序 UI
从 QDS UI 的分析页面通过应用程序 UI 访问日志:
注意命令 id,它对 Qubole 作业或命令是唯一的。
单击搜索栏右侧的向下箭头。
搜索历史页面如下图所示。
../../_images/spark-debug1.png
在命令 ID 字段中输入命令 ID,然后单击应用。
任何 Spark 作业的日志都显示在应用程序 UI 和 Spark 应用程序 UI 中,可在“日志”和“资源”选项卡中访问它们。这些 UI 中的信息可用于跟踪与命令状态相关的任何信息。
下图显示了带有链接的“日志”选项卡示例。
单击“日志”选项卡或“资源”选项卡中的应用程序 UI 超链接。
Hadoop MR应用UI如下图所示。
../../_images/application-ui.png
Hadoop MR 应用程序 UI 显示以下信息:
MR 应用主日志
总 Mapper/Reducer 任务
完成/失败/杀死/成功的任务
注意
MR 应用程序主日志对应于 Spark 驱动程序日志。对于任何与 Spark 驱动程序相关的问题,您应该验证 AM 日志(驱动程序日志)。
如果要查看失败作业的异常情况,可以点击 Hadoop MR 应用程序 UI 页面中的日志链接。将显示包含 stdout、stderr 和 syslog 的 Application Master (AM) 日志页面。
访问 Spark 应用程序 UI
您可以使用 Spark 应用程序 UI 从分析页面和笔记本页面访问日志。
从分析页面
从主菜单中,导航到分析页面。
请注意命令 id,它是 Qubole 作业或命令所独有的。
单击搜索栏右侧的向下箭头。 “检索历史”页面如下图所示。
../../_images/spark-debug1.png
在命令 ID 字段中输入命令 ID,然后单击应用。
单击日志选项卡或资源选项卡。
单击 Spark 应用程序 UI 超链接。
从笔记本页面
从主菜单导航到笔记本页面。
点击右上角的Spark小部件,点击Spark UI,如下图所示。
../../_images/spark-ui.png
或
点击段落中的i图标,如下图所示。
../../_images/spark-debug2.png
当您从 Notebooks 页面的 Spark 小部件或从分析页面打开 Spark UI 时,Spark 应用程序 UI 将显示在单独的选项卡中,如下图所示。
../../_images/spark-application-ui.png
Spark 应用程序 UI 显示以下信息:
作业:作业选项卡显示已完成、成功和失败的作业总数。它还显示作业已成功的阶段数。
阶段:阶段选项卡显示已完成和失败阶段的总数。如果要查看有关失败阶段的更多详细信息,请单击“描述”列中的失败阶段。失败阶段的详细信息如下图所示。
../../_images/spark-app-stage.png
错误列显示失败任务的详细错误消息。您应该记下执行程序 ID 和主机名以查看容器日志中的详细信息。有关错误堆栈跟踪的更多详细信息,您应该查看容器日志。
存储:如果启用缓存,存储选项卡会显示缓存数据。
Environment :Environment 选项卡显示有关 JVM、Spark 属性、系统属性和类路径条目的信息,这有助于了解 spark 集群在运行时使用的属性值。下图显示了环境选项卡。
../../_images/spark-app-env.png
Executors :Executors 选项卡显示容器日志。您可以使用 executor id 和主机名映射容器日志,主机名显示在 Stages 选项卡中。
Qubole 上的 Spark 在 Executors 选项卡中提供了以下附加字段:
Resident size/Container size:显示容器内使用的总物理内存(即executor的java heap + off heap memory)为resident size,配置的yarn container size(即executor内存+executor开销)为容器大小。
Heap used/committed/max:显示执行器的java堆对应的值。
下图显示了 Executors 选项卡。
../../_images/spark-app-exec.png
中的日志列显示容器日志的链接。此外,还会显示每个执行器执行的任务数以及活动、失败、已完成和总任务数。
注意
对于调试容器内存问题,您可以查看容器大小、使用的堆、输入大小和随机读取/写入的统计信息。
反馈
访问其他 Spark 日志
除了从 QDS UI 访问日志外,您还可以访问驻留在集群上的以下日志,以识别 Spark 作业失败中的错误和异常:
它包含 Spark 事件日志。
Spark 历史服务器日志:spark-yarn-org.apache.spark.deploy.history.HistoryServer-1-localhost.localdomain.log
文件存储在 /media/ephemeral0/logs/spark。 Spark 历史服务器日志仅存储在集群的主节点上。
Spark 事件日志:Spark 事件日志文件存储在
/logs/hadoop///spark-eventlogs 其中:
scheme 是特定于云的 URI 方案:s3:// 用于 AWS;用于 Azure 的 wasb:// 或 adl:// 或 abfs[s]; oci:// 用于 Oracle OCI。
defloc 是 QDS 帐户的默认存储位置。
cluster_id 是 QDS UI 的集群页面上显示的集群 ID。
cluster_inst_id 是集群实例 ID。您应该联系 Qubole 支持以获取集群实例 ID。