使用 Apache Spark History Server 的扩展功能调试和诊断 Spark 应用程序Use the extended features of the Apache Spark History Server to debug and diagnose Spark applications

本文介绍如何使用 Apache Spark History Server 的扩展功能来调试和诊断已完成的或正在运行的 Spark 应用程序。This article shows you how to use the extended features of the Apache Spark History Server to debug and diagnose completed or running Spark applications. 扩展包括“数据”选项卡、“图形”选项卡和“诊断”选项卡。 在“数据”选项卡中,可以检查 Spark 作业的输入和输出数据。 The extension includes a Data tab, a Graph tab, and a Diagnosis tab. On the Data tab, you can check the input and output data of the Spark job. 在“图形”选项卡中,可以检查数据流和重放作业图形。 On the Graph tab, you can check the data flow and replay the job graph. 在“诊断”选项卡中,可以参考“数据倾斜”、“时间倾斜”和“执行程序使用情况分析”功能。 On the Diagnosis tab, you can refer to the Data Skew, Time Skew, and Executor Usage Analysis features.

访问 Spark History ServerGet access to the Spark History Server

Spark History Server 是已完成和正在运行的 Spark 应用程序的 Web UI。The Spark History Server is the web UI for completed and running Spark applications. 可以从 Azure 门户或 URL 打开它。You can open it either from the Azure portal or from a URL.

从 Azure 门户打开 Spark History Server Web UIOpen the Spark History Server web UI from the Azure portal

  1. Azure 门户打开 Spark 群集。From the Azure portal, open the Spark cluster. 有关详细信息,请参阅列出和显示群集For more information, see List and show clusters.

  2. 群集仪表板中选择“Spark History Server”。 From Cluster dashboards, select Spark history server. 出现提示时,输入 Spark 群集的管理员凭据。When prompted, enter the admin credentials for the Spark cluster.

    从 Azure 门户启动 Spark History Server。Launch the Spark History Server from the Azure portal.

通过 URL 打开 Spark History Server Web UIOpen the Spark History Server Web UI by URL

浏览到 https://CLUSTERNAME.azurehdinsight.cn/sparkhistory(其中 CLUSTERNAME 是 Spark 群集的名称),打开 Spark History Server。Open the Spark History Server by browsing to https://CLUSTERNAME.azurehdinsight.cn/sparkhistory where CLUSTERNAME is the name of your Spark cluster.

Spark History Server Web UI 可能类似于下图:The Spark History Server web UI may look similar to this image:

Spark History Server 页。

使用 Spark History Server 中的“数据”选项卡Use the Data tab in the Spark History Server

选择作业 ID,然后选择工具菜单中的“数据”查看数据视图。 Select the job ID, and then select Data on the tool menu to see the data view.

  • 选择“输入”、“输出”和“表操作”选项卡查看其中的信息。 Review Inputs, Outputs, and Table Operations by selecting the individual tabs.

    “Spark 应用程序数据”页上的“数据”选项卡。

  • 选择“复制”按钮复制所有行。 Copy all rows by selecting the Copy button.

    复制 Spark 应用程序页上的数据。

  • 选择“csv”按钮将所有数据保存为 .CSV 文件。 Save all the data as a .CSV file by selecting the csv button.

    在“Spark 应用程序数据”页中将数据保存为 .CSV 文件。

  • 在“搜索”字段中输入关键字来搜索数据。 Search the data by entering keywords in the Search field. 搜索结果会立即显示。The search results will display immediately.

    在“Spark 应用程序数据”页上搜索数据。

  • 选择列标题以将表排序。Select the column header to sort the table. 选择加号图标可展开某行,以显示更多详细信息。Select the plus sign to expand a row to show more details. 选择减号图标可折叠某行。Select the minus sign to collapse a row.

    “Spark 应用程序数据”页上的数据表。

  • 选择右侧的“部分下载”按钮下载单个文件。 Download a single file by selecting the Partial Download button on the right. 选定的文件将下载到本地。The selected file will download locally. 如果该文件不存在,则打开一个新选项卡以显示错误消息。If the file doesn't exist anymore, this will open a new tab to show the error messages.

    “Spark 应用程序数据”页上的数据下载行。

  • 选择下载菜单中展开的“复制完整路径”或“复制相对路径”选项,来复制完整路径或相对路径。 Copy a full path or a relative path by selecting either the Copy Full Path or Copy Relative Path option, which expand from the download menu. 对于 Azure Data Lake Storage 文件,请选择“在 Azure 存储资源管理器中打开”以启动 Azure 存储资源管理器,并在登录后定位到相应的文件夹。 For Azure Data Lake Storage files, select Open in Azure Storage Explorer to launch Azure Storage Explorer and locate the folder after sign-in.

    “Spark 应用程序数据”页上的“复制完整路径”和“复制相对路径”选项。

  • 如果一个页面中显示的行数过多,选择表底部的页码可以浏览不同的页面。If there are too many rows to display on a single page, select the page numbers at the bottom of the table to navigate.

    “Spark 应用程序数据”页上的页码。

  • 如需查看更多信息,请将鼠标悬停在“Spark 应用程序数据”旁边的问号上以显示工具提示。 For more information, hover over or select the question mark next to Data for Spark Application to show the tooltip.

    从“Spark 应用程序数据”页获取更多信息。

  • 若要发送有关问题的反馈,请选择“向我们提供反馈”。 To send feedback on issues, select Provide us feedback.

    从“Spark 应用程序数据”页提供反馈。

使用 Spark History Server 中的“图形”选项卡Use the Graph tab in the Spark History Server

  • 选择作业 ID,然后选择工具菜单中的“图形”查看作业图形。 Select the job ID, and then select Graph on the tool menu to see the job graph. 默认情况下,图形将显示所有作业。By default, the graph will show all of the jobs. 使用“作业 ID”下拉菜单筛选结果。 Filter the results by using the Job ID drop-down menu.

    “Spark 应用程序和作业图形”页上的“作业 ID”下拉菜单。

  • 默认已选择“进度”。 Progress is selected by default. 在“显示”下拉菜单中选择“已读取”或“已写入”来检查数据流。 Check the data flow by selecting Read or Written in the Display drop-down menu.

    在“Spark 应用程序和作业图形”页上检查数据流。

  • 每个任务的背景色对应于一个热度地图。The background color of each task corresponds to a heat map.

    “Spark 应用程序和作业图形”页上的热度地图。

    颜色Color 说明Description
    绿色Green 作业已成功完成。The job has completed successfully.
    橙色Orange 任务失败,但不影响作业的最终结果。The task failed, but this doesn't affect the final result of the job. 这些任务包括可能稍后会成功的重复或重试实例。These tasks have duplicate or retry instances that may succeed later.
    蓝色Blue 任务正在运行。The task is running.
    白色White 任务正在等待运行,或已跳过执行阶段。The task is waiting to run, or the stage has skipped.
    红色Red 任务已失败。The task has failed.

    在“Spark 应用程序和作业图形”页上运行任务。

    跳过的阶段以白色显示。The skipped stages display in white. “Spark 应用程序和作业图形”页上已跳过的任务。A skipped task on the Spark Application & Job Graph page.

    “Spark 应用程序和作业图形”页上失败的任务。

    备注

    对于已完成的作业,可以使用播放。Playback is available for completed jobs. 选择“播放”按钮播放作业。 Select the Playback button to play the job back. 随时可以选择停止按钮来停止作业。Stop the job at any time by selecting the stop button. 播放作业时,每个任务将以各种颜色显示其状态。When a job is played back, each task will display its status by color. 未完成的作业不支持播放。Playback is not supported for incomplete jobs.

  • 滚动鼠标滚轮以放大或缩小作业图形,或者选择“缩放到合适大小”使图形适合屏幕大小。 Scroll to zoom in or out on the job graph, or select Zoom to fit to make it fit to the screen.

    在“Spark 应用程序和作业图形”页上选择“缩放到合适大小”。

  • 任务失败时,请将鼠标悬停在图形节点上以查看工具提示,然后选择阶段以在新页中将其打开。When tasks fail, hover over the graph node to see the tooltip, and then select the stage to open it in a new page.

    在“Spark 应用程序和作业图形”页上查看工具提示。

  • 在“Spark 应用程序和作业图形”页上,如果任务满足以下条件,则阶段会显示工具提示和小图标:On the Spark Application & Job Graph page, the stages will display tooltips and small icons if the tasks meet these conditions:

    • 数据倾斜:数据读取大小 > 此阶段内所有任务的平均数据读取大小 * 2 且数据读取大小 > 10 MB。 Data skew: Data read size > average data read size of all tasks inside this stage * 2 and data read size > 10 MB.

    • 时间倾斜:执行时间 > 此阶段内所有任务的平均执行时间 * 2 且执行时间 > 2 分钟。 Time skew: Execution time > average execution time of all tasks inside this stage * 2 and execution time > 2 mins.

      “Spark 应用程序和作业图形”页上的倾斜任务图标。

  • 作业图形节点将显示有关每个阶段的以下信息:The job graph node will display the following information about each stage:

    • IDID

    • 名称或说明Name or description

    • 任务总数Total task number

    • 读取的数据:输入大小和随机读取大小之和Data read: the sum of input size and shuffle read size

    • 写入的数据:输出大小和随机写入大小之和Data write: the sum of output size and shuffle write size

    • 执行时间:从第一次尝试的开始时间到最后一次尝试的完成时间的时间和Execution time: the time between start time of the first attempt and completion time of the last attempt

    • 行计数:输入记录、输出记录、随机读取记录和随机写入记录的总和Row count: the sum of input records, output records, shuffle read records, and shuffle write records

    • 进度Progress

      备注

      默认情况下,作业图形节点显示每个阶段的最后一次尝试的信息(阶段执行时间除外)。By default, the job graph node will display information from last attempt of each stage (except for stage execution time). 但在播放期间,作业图形节点将显示有关每次尝试的信息。But during playback, the job graph node will show information about each attempt.

      备注

      对于读取和写入的数据大小,我们以 1 MB = 1000 KB = 1000 * 1000 字节为单位。For data read and data write sizes, we use 1MB = 1000 KB = 1000 * 1000 bytes.

  • 选择“向我们提供反馈”发送有关问题的反馈。 Send feedback about issues by selecting Provide us feedback.

    “Spark 应用程序和作业图形”页上的反馈选项。

使用 Spark History Server 中的“诊断”选项卡Use the Diagnosis tab in the Spark History Server

选择作业 ID,然后选择工具菜单中的“诊断”查看作业诊断视图。 Select the job ID, and then select Diagnosis on the tool menu to see the job diagnosis view. “诊断”选项卡包括“数据倾斜”、“时间倾斜”和“执行程序使用情况分析”。 The Diagnosis tab includes Data Skew, Time Skew, and Executor Usage Analysis.

  • 通过选择相应的选项卡来查看“数据偏斜”、“时间偏斜”和“执行程序使用情况分析”。 Review Data Skew, Time Skew, and Executor Usage Analysis by selecting the tabs respectively.

    “诊断”选项卡中的“数据倾斜”选项卡。

数据倾斜Data Skew

选择“数据倾斜”选项卡。 相应的倾斜任务根据指定的参数显示。Select the Data Skew tab. The corresponding skewed tasks display based on the specified parameters.

指定参数Specify Parameters

“指定参数”部分显示用于检测数据倾斜的参数。 The Specify Parameters section displays the parameters, which are used to detect Data Skew. 默认规则为:任务数据读取大于 3 倍任务数据读取平均值,且任务数据读取大于 10 MB。The default rule is: The task data read is greater than three times of the average task data read, and the task data read is more than 10 MB. 若要为倾斜任务定义自己的规则,可以选择参数。If you want to define your own rule for skewed tasks, you can choose your parameters. “倾斜阶段”和“倾斜图表”部分会相应地更新。 The Skewed Stage and Skew Chart sections will update accordingly.

倾斜阶段Skewed Stage

“倾斜阶段”部分显示存在符合指定条件的倾斜任务的阶段。 The Skewed Stage section displays stages that have skewed tasks meeting the specified criteria. 如果某个阶段有多个倾斜任务,则“倾斜阶段”部分仅显示最倾斜的任务(即,数据倾斜对应的最大数据)。 If there's more than one skewed task in a stage, the Skewed Stage section displays only the most skewed task (that is, the largest data for data skew).

“诊断”选项卡中的“数据倾斜”选项卡的较大视图。

倾斜图表Skew Chart

在“倾斜阶段”表中选择某行时,“倾斜图表”会根据数据读取和执行时间显示更多任务分布详细信息。 When you select a row in the Skew Stage table, the Skew Chart displays more task distribution details based on data read and execution time. 倾斜任务标记为红色,普通任务标记为蓝色。The skewed tasks are marked in red, and the normal tasks are marked in blue. 出于性能方面的考虑,图表最多显示 100 个示例任务。For performance consideration, the chart displays up to 100 sample tasks. 任务详细信息显示在右下窗格中。The task details are displayed in the lower-right panel.

Spark UI 中“阶段 10”的倾斜图表。

时间倾斜Time Skew

“时间倾斜” 选项卡根据任务执行时间显示倾斜任务。The Time Skew tab displays skewed tasks based on task execution time.

指定参数Specify Parameters

“指定参数”部分显示用于检测时间倾斜的参数。 The Specify Parameters section displays the parameters, which are used to detect time skew. 默认规则为:任务执行时间长于平均执行时间的 3 倍,且任务执行时间长于 30 秒。The default rule is: Task execution time is greater than three times of average execution time, and task execution time is greater than 30 seconds. 可以按需更改相关参数。You can change the parameters based on your needs. 与“数据倾斜”选项卡一样,“倾斜阶段”和“倾斜图表”显示相应的阶段和任务信息。 The Skewed Stage and Skew Chart display the corresponding stages and tasks information, just like in the Data Skew tab.

如果选择“时间倾斜”,将会根据“指定参数”部分设置的参数,在“倾斜阶段”部分显示筛选的结果。 When you select Time Skew, the filtered result displays in the Skewed Stage section, according to the parameters set in the Specify Parameters section. 在“倾斜阶段”部分选择一项时,将在第三个部分绘制相应的图表,任务详细信息显示在右下窗格中。 When you select one item in the Skewed Stage section, the corresponding chart is drafted in the third section, and the task details display in the lower-right panel.

“诊断”选项卡中的“时间倾斜”选项卡。

执行程序使用情况分析图形Executor Usage Analysis graphs

“执行程序使用情况图形”显示作业的实际执行程序分配和运行状态。 The Executor Usage Graph displays the job's actual executor allocation and running status.

选择“执行程序使用情况分析”时,会绘制有关执行程序使用情况的四条不同曲线: “分配的执行程序”、“正在运行的执行程序”、“空闲执行程序”和“最大执行程序实例数目”。 When you select Executor Usage Analysis, four different curves about executor usage are drafted: Allocated Executors, Running Executors, idle Executors, and Max Executor Instances. 每个“已添加执行程序”或“已删除执行程序”事件都将增加或减少分配的执行程序。 Each Executor added or Executor removed event will increase or decrease the allocated executors. 可以检查“作业”选项卡中的“事件时间线”进行更多比较。 You can check Event Timeline in the Jobs tab for more comparisons.

“诊断”选项卡中的“执行程序使用情况分析”选项卡。

选择彩色图标即可选中或取消选中所有草稿中的相应内容。Select the color icon to select or unselect the corresponding content in all drafts.

在“执行程序使用情况分析”选项卡中选择图表。

常见问题FAQ

如何还原到社区版?How do I revert to the community version?

若要还原到社区版,请执行以下步骤。To revert to the community version, do the following steps.

  1. 在 Ambari 中打开群集。Open the cluster in Ambari.

  2. 导航到“Spark2” > “配置” 。Navigate to Spark2 > Configs.

  3. 选择“自定义 spark2-defaults”。 Select Custom spark2-defaults.

  4. 选择“添加属性...”。 Select Add Property ....

  5. 添加 spark.ui.enhancement.enabled=false 并保存。Add spark.ui.enhancement.enabled=false, and then save it.

  6. 现在,该属性设置为 falseThe property sets to false now.

  7. 选择“保存” 以保存配置。Select Save to save the configuration.

    在 Apache Ambari 中禁用功能。

  8. 在左侧面板中选择“Spark2”。 Select Spark2 in the left panel. 然后在“摘要”选项卡中选择“Spark2 History Server”。 Then, on the Summary tab, select Spark2 History Server.

    Apache Ambari 中的摘要视图。

  9. 若要重启 Spark History Server,请选择“Spark2 History Server”右侧的“已启动”按钮,然后从下拉菜单中选择“重启”。 To restart the Spark History Server, select the Started button to the right of Spark2 History Server, and then select Restart from the drop-down menu.

    在 Apache Ambari 中重启 Spark History Server。

  10. 刷新 Spark History Server Web UI。Refresh the Spark History Server web UI. 该服务将还原到社区版。It will revert to the community version.

如何上传 Spark History Server 事件以将其报告为问题?How do I upload a Spark History Server event to report it as an issue?

如果在 Spark History Server 中遇到错误,请执行以下步骤来报告事件。If you run into an error in Spark History Server, do the following steps to report the event.

  1. 在 Spark History Server Web UI 中选择“下载”以下载事件。 Download the event by selecting Download in the Spark History Server web UI.

    在 Spark History Server UI 中下载事件。

  2. 在“Spark 应用程序和作业图形”页中选择“向我们提供反馈”。 Select Provide us feedback from the Spark Application & Job Graph page.

    “Spark 应用程序和作业图形”页上的“向我们提供反馈”

  3. 提供相关错误的标题和说明。Provide the title and a description of the error. 然后,将 .zip 文件拖放到编辑字段中,并选择“提交新问题”。 Then, drag the .zip file to the edit field and select Submit new issue.

    上传和提交新问题。

如何在修补方案中升级 .jar 文件?How do I upgrade a .jar file in a hotfix scenario?

若要使用修补程序进行升级,请使用以下脚本,该脚本会升级 spark-enhancement.jar*If you want to upgrade with a hotfix, use the following script, which will upgrade spark-enhancement.jar*.

upgrade_spark_enhancement.shupgrade_spark_enhancement.sh:

 #!/usr/bin/env bash

 # Copyright (C) Microsoft Corporation. All rights reserved.

 # Arguments:
 # $1 Enhancement jar path

 if [ "$#" -ne 1 ]; then
     >&2 echo "Please provide the upgrade jar path."
     exit 1
 fi

 install_jar() {
     tmp_jar_path="/tmp/spark-enhancement-hotfix-$( date +%s )"

     if wget -O "$tmp_jar_path" "$2"; then
         for FILE in "$1"/spark-enhancement*.jar
         do
             back_up_path="$FILE.original.$( date +%s )"
             echo "Back up $FILE to $back_up_path"
             mv "$FILE" "$back_up_path"
             echo "Copy the hotfix jar file from $tmp_jar_path   to $FILE"
             cp "$tmp_jar_path" "$FILE"

             "Hotfix done."
             break
         done
     else    
         >&2 echo "Download jar file failed."
         exit 1
     fi
 }

 jars_folder="/usr/hdp/current/spark2-client/jars"
 jar_path=$1

 if ls ${jars_folder}/spark-enhancement*.jar 1>/dev/null 2>&1;   then
     install_jar "$jars_folder" "$jar_path"
 else
     >&2 echo "There is no target jar on this node. Exit with no action."
     exit 0
 fi

使用情况Usage

upgrade_spark_enhancement.sh https://${jar_path}

示例Example

upgrade_spark_enhancement.sh https://${account_name}.blob.core.chinacloudapi.cn/packages/jars/spark-enhancement-${version}.jar

在 Azure 门户中使用 bash 文件Use the bash file from the Azure portal

  1. 启动 Azure 门户,然后选择你的群集。Launch the Azure portal, and then select your cluster.

  2. 使用以下参数完成脚本操作Complete a script action with the following parameters:

    属性Property ValueValue
    脚本类型Script type - Custom- Custom
    名称Name UpgradeJarUpgradeJar
    Bash 脚本 URIBash script URI https://hdinsighttoolingstorage.blob.core.chinacloudapi.cn/shsscriptactions/upgrade_spark_enhancement.sh
    节点类型Node type(s) 头节点、工作器节点Head, Worker
    parametersParameters https://${account_name}.blob.core.chinacloudapi.cn/packages/jars/spark-enhancement-${version}.jar

    在 Azure 门户中提交脚本操作

已知问题Known issues

  • 目前,Spark History Server 仅适用于 Spark 2.3 和2.4。Currently, the Spark History Server only works for Spark 2.3 and 2.4.

  • 使用 RDD 的输入和输出数据不会显示在“数据”选项卡中。 Input and output data that use RDD won't display in the Data tab.

后续步骤Next steps

反馈Feedback

如有任何反馈,或使用此工具时遇到任何问题,请向 hdivstool@microsoft.com 发送电子邮件。If you have any feedback or come across any issues when using this tool, send an email to (hdivstool@microsoft.com).