使用扩展的 Apache Spark History Server 调试和诊断 Apache Spark 应用程序

本文指导如何使用扩展的 Apache Spark History Server 来调试和诊断已完成的和正在运行的 Spark 应用程序。

扩展包括“数据”选项卡、“图形”选项卡和“诊断”选项卡。使用“数据”选项卡检查 Spark 作业的输入和输出数据。 “图形”选项卡显示作业图的数据流和重播。 “诊断”选项卡显示“数据倾斜”、“时间倾斜”和“执行程序使用情况分析”。

访问 Apache Spark History Server

Apache Spark History Server 是已完成的和正在运行的 Spark 应用程序的 Web 用户界面。 你可以从 Azure Synapse Analytics 打开 Apache Spark History Server Web 界面。

从 Apache Spark 应用程序节点打开 Spark History Server Web UI

  1. 打开 Azure Synapse Analytics

  2. 选择“监视”,然后选择“Apache Spark 应用程序” 。

    显示选择“监视”,然后选择 Spark 应用程序的屏幕截图。

  3. 选择一个应用程序,然后选择“日志查询”将其打开。

    显示打开日志查询窗口的屏幕截图。

  4. 选择“Spark History Server”,随即显示 Spark History Server Web UI。 对于正在运行的 Spark 应用程序,按钮为 Spark UI。

    显示打开 Spark History Server 的屏幕截图。显示打开 Spark UI 的屏幕截图。

从数据节点打开 Spark History Server Web UI

  1. 在 Synapse Studio 笔记本中,从作业执行输出单元或从笔记本文档底部的状态面板中选择“Spark History Server”。 选择“会话详细信息”

    显示启动 Spark History Server 1 的屏幕截图。

  2. 从滑出面板中选择“Spark History Server”。

    显示启动 Spark History Server 2 的屏幕截图。

Apache Spark History Server 中的“图形”选项卡

选择要查看的作业的作业 ID。 然后选择工具菜单中的“图形”以获取作业图视图。

概述

你可以在生成的作业图中查看作业概况。 默认情况下,该图将显示所有作业。 可按作业 ID 筛选此视图。

显示 Spark 应用程序和作业图作业 ID 的屏幕截图。

显示

默认情况下,“进度”显示处于选中状态。 通过在“显示”下拉列表中选择“已读取”或“已写入”,可查看数据流 。

显示 Spark 应用程序和作业图显示的屏幕截图。

图形节点显示热度地图图例中所示的颜色。

显示 Spark 应用程序和作业图热度地图的屏幕截图。

播放

若要播放作业,请选择“播放”。 你可以随时选择“停止”以停止播放。 任务颜色显示播放时的不同状态:

颜色 含义
绿色 成功:作业已成功完成。
橙色 已重试:失败但不影响作业最终结果的任务实例。 这些任务包括可能稍后会成功的重复或重试实例。
蓝色 正在运行:任务正在运行。
White 正在等待或已跳过:任务正在等待运行,或已跳过该阶段。
Red 失败:任务失败。

下图显示了绿色、橙色和蓝色状态颜色。

显示 Spark 应用程序和作业图颜色示例 - 正在运行的屏幕截图。

下图显示了绿色和白色状态颜色。

显示 Spark 应用程序和作业图颜色示例 - 跳过的屏幕截图。

下图显示了红色和绿色状态颜色。

显示 Spark 应用程序和作业图颜色示例 - 失败的屏幕截图。

备注

每个作业都可以播放。 未完成的作业不支持播放。

Zoom

使用鼠标滚轮放大和缩小作业图,或者选择“缩放到合适大小”使图形适合屏幕大小。

显示 Spark 应用程序和作业图缩放到合适大小的屏幕截图。

工具提示

如果存在失败的任务,将鼠标悬停在图形节点上可查看工具提示;选择阶段可打开阶段页。

显示 Spark 应用程序和作业图工具提示的屏幕截图。

在作业图选项卡上,如果阶段具有满足以下条件的任务,则会显示工具提示和小图标:

条件 说明
数据倾斜 数据读取大小 > 此阶段内所有任务的平均数据读取大小 * 2 且数据读取大小 > 10 MB
时间倾斜 执行时间 > 此阶段内所有任务的平均执行时间 * 2 且执行时间 > 2 分钟

显示 Spark 应用程序和作业图倾斜图标的屏幕截图。

图形节点说明

作业图节点显示每个阶段的以下信息:

  • ID。

  • 名称或说明。

  • 总任务数。

  • 读取的数据:输入大小和随机读取大小之和。

  • 写入的数据:输出大小和随机写入大小之和。

  • 执行时间:从第一次尝试的开始时间到最后一次尝试的完成时间的时间和。

  • 行计数:输入记录、输出记录、随机读取记录和随机写入记录的总和。

  • 进度。

    备注

    默认情况下,作业图节点将显示每个阶段最后一次尝试的相关信息(阶段执行时间除外)。 但是,在播放期间,图形节点将显示每次尝试的相关信息。

    读取和写入的数据大小为 1MB = 1000 KB = 1000 * 1000 字节。

提供反馈

选择“向我们提供反馈”发送问题反馈。

显示 Spark 应用程序和作业图形反馈的屏幕截图。

阶段数目限制

出于性能考虑,默认情况下,该图仅在 Spark 应用程序少于 500 个阶段时可用。 如果阶段过多,则它会失败并出现如下错误:

The number of stages in this application exceeds limit (500), graph page is disabled in this case.

作为一个解决方法,在启动 Spark 应用程序之前,请应用此 Spark 配置来增大上限:

spark.ui.enhancement.maxGraphStages 1000

但请注意,这可能会导致页面和 API 的性能不佳,因为内容可能太大,以至于浏览器无法提取和呈现。

浏览 Apache Spark History Server 中的“诊断”选项卡

若要访问“诊断”选项卡,请选择作业 ID。 然后选择工具菜单中的“诊断”以获取作业的“诊断”视图。 诊断选项卡包括“数据倾斜”、“时间偏差”和“执行程序使用情况分析” 。

分别选择“数据倾斜”、“时间偏差”和“执行程序使用情况分析”,以选中这些选项卡 。

再次显示 Spark UI 诊断数据倾斜选项卡的屏幕截图。

数据倾斜

选择“数据倾斜”选项卡时,系统会根据指定的参数显示相应的倾斜任务。

  • 指定参数 - 第一部分显示用于检测数据倾斜的参数。 默认规则如下:读取的任务数据比读取的平均任务数据多三倍,读取的任务数据超过 10 MB。 若要为倾斜任务定义自己的规则,可以选择参数。 “倾斜阶段”和“倾斜图表”部分会相应地刷新 。

  • 倾斜阶段 - 第二部分显示其任务满足上面指定的条件的阶段。 如果一个阶段中存在多个倾斜任务,则倾斜阶段表仅显示倾斜程度最高的任务(例如,数据倾斜的最大数据)。

    显示 Spark UI 诊断数据倾斜选项卡的屏幕截图。

  • 倾斜图表 - 选中倾斜阶段表中的行时,倾斜图表会根据数据读取和执行时间显示更多任务分布详细信息。 倾斜任务标记为红色,普通任务标记为蓝色。 该图表最多显示 100 个示例任务,并且任务详细信息显示在右下方面板中。

    显示 Spark UI 阶段 10 的倾斜图表的屏幕截图。

时间倾斜

“时间倾斜”选项卡根据任务执行时间显示倾斜任务。

  • 指定参数 - 第一部分显示用于检测时间倾斜的参数。 用于检测时间倾斜的默认条件是:任务执行时间是平均执行时间的三倍,任务执行时间大于 30 秒。 可以按需更改相关参数。 与上面的“时间倾斜”选项卡一样,倾斜阶段和倾斜图表显示相应的阶段和任务信息 。

  • 选择“时间偏斜”,然后筛选的结果就会根据在“指定参数”部分设置的参数显示在“偏斜的阶段”部分。 选择“偏斜的阶段”部分的一个项目,然后相应的图表就会在第 3 部分绘制,任务详细信息显示在右下面板中。

    显示 Spark UI 诊断时间倾斜部分的屏幕截图。

执行程序使用情况分析

执行程序使用情况图直观显示 Spark 作业执行程序的分配和运行状态。

  1. 选择“执行程序使用情况分析”,然后系统就会绘制四种类型的有关执行程序使用情况的曲线,包括已分配的执行程序、正在运行的执行程序、空闲执行程序,以及最大执行程序实例数。 对于已分配的执行程序,每个“已添加执行程序”或“已删除执行程序”事件都会增加或减少已分配执行程序数。 可以在“作业”选项卡中选中“事件时间线”以进行更多比较。

    显示 Spark UI 诊断执行程序选项卡的屏幕截图。

  2. 选择彩色图标即可选中或取消选中所有草稿中的相应内容。

    显示 Spark UI 诊断选择图表的屏幕截图。

Spark UI 中的 404 故障排除指南

在某些情况下,对于具有大量作业和阶段的长时间运行的 Spark 应用程序,打开 Spark UI 时,可能会失败并显示以下页面:

显示 Spark UI 中的 404 故障排除指南的屏幕截图。

解决方法是,可将额外的 Spark 配置应用于 Spark 池:

spark.synapse.history.rpc.memoryNeeded 1g 

显示添加 Spark 配置的屏幕截图。

对于目前正在运行的 Spark 应用程序,在 Spark UI 页的浏览器地址栏末尾添加此查询字符串:?feature.enableStandaloneHS=false

显示在浏览器地址栏的末尾添加此查询字符串的屏幕截图。

已知问题

使用可复原分布式数据集 (RDD) 的输入/输出数据不显示在“数据”选项卡中。

后续步骤