Web 用户界面

Apache Spark 提供了一套 Web 用户界面 (UI),您可以使用它们来监控 Spark 集群的状态和资源消耗。

目录

作业选项卡

“作业”选项卡显示 Spark 应用程序中所有作业的摘要页面,以及每个作业的详细信息页面。摘要页面显示高级信息,例如所有作业的状态、持续时间和进度,以及整体事件时间线。当您单击摘要页面上的某个作业时,您将看到该作业的详细信息页面。详细信息页面进一步显示事件时间线、DAG 可视化以及作业的所有阶段。

本节显示的信息为:

Basic info

Event timeline

Details of jobs grouped by status

当您单击特定作业时,您可以看到该作业的详细信息。

作业详情

此页面显示由其作业 ID 标识的特定作业的详细信息。

Event timeline

DAG

DAG

阶段选项卡

“阶段”选项卡显示一个摘要页面,其中显示 Spark 应用程序中所有作业的所有阶段的当前状态。

页面开头是摘要,其中包含按状态(活动、待处理、已完成、已跳过和已失败)统计的所有阶段的数量

Stages header

公平调度模式下,有一个表显示池属性

Pool properties

之后是每个状态(活动、待处理、已完成、已跳过、已失败)的阶段的详细信息。在活动阶段,可以使用“终止”链接终止阶段。只有在失败的阶段,才会显示失败原因。可以通过单击描述来访问任务详细信息。

Stages detail

阶段详情

阶段详细信息页面首先显示所有任务的总时间、位置级别摘要随机读取大小/记录数和关联的作业 ID 等信息。

Stage header

还有一个有向无环图 (DAG) 的可视化表示,其中顶点表示 RDD 或数据帧,边表示要应用的操作。节点在 DAG 可视化中按操作范围分组,并标有操作范围名称(BatchScan、WholeStageCodegen、Exchange 等)。值得注意的是,整个阶段代码生成操作也使用代码生成 ID 进行注释。对于属于 Spark 数据帧或 SQL 执行的阶段,这允许将阶段执行详细信息交叉引用到 Web-UI SQL 选项卡页面中报告 SQL 计划图和执行计划的相关详细信息。

Stage DAG

所有任务的汇总指标以表格和时间线的形式表示。

Stages metrics

按执行器聚合的指标显示按执行器聚合的相同信息。

Stages metrics per executors

**累加器**是一种共享变量。它提供了一个可变变量,可以在各种转换中更新。可以使用和不使用名称创建累加器,但只显示命名的累加器。

Stage accumulator

任务详细信息基本上包含与摘要部分相同的信息,但按任务详细列出。它还包括查看日志的链接,以及如果任务由于任何原因失败,则包括任务尝试次数。如果有命名的累加器,则可以在此处查看每个任务结束时的累加器值。

Tasks

存储选项卡

“存储”选项卡显示应用程序中持久化的 RDD 和数据帧(如果有)。摘要页面显示所有 RDD 的存储级别、大小和分区,详细信息页面显示 RDD 或数据帧中所有分区的大小和使用执行器。

scala> import org.apache.spark.storage.StorageLevel._
import org.apache.spark.storage.StorageLevel._

scala> val rdd = sc.range(0, 100, 1, 5).setName("rdd")
rdd: org.apache.spark.rdd.RDD[Long] = rdd MapPartitionsRDD[1] at range at <console>:27

scala> rdd.persist(MEMORY_ONLY_SER)
res0: rdd.type = rdd MapPartitionsRDD[1] at range at <console>:27

scala> rdd.count
res1: Long = 100

scala> val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df: org.apache.spark.sql.DataFrame = [count: int, name: string]

scala> df.persist(DISK_ONLY)
res2: df.type = [count: int, name: string]

scala> df.count
res3: Long = 3

Storage tab

运行上述示例后,我们可以在“存储”选项卡中找到列出的两个 RDD。提供了存储级别、分区数和内存开销等基本信息。请注意,新持久化的 RDD 或数据帧在具体化之前不会显示在选项卡中。要监控特定的 RDD 或数据帧,请确保已触发操作操作。

Storage detail

您可以单击 RDD 名称“rdd”以获取数据持久性的详细信息,例如集群上的数据分布。

环境选项卡

“环境”选项卡显示不同环境和配置变量的值,包括 JVM、Spark 和系统属性。

Env tab

此环境页面分为五个部分。这是一个检查您的属性是否已正确设置的好地方。第一部分“运行时信息”仅包含运行时属性,例如 Java 和 Scala 的版本。第二部分“Spark 属性”列出了应用程序属性,例如“spark.app.name”和“spark.driver.memory”。

Hadoop Properties

单击“Hadoop 属性”链接将显示与 Hadoop 和 YARN 相关的属性。请注意,“spark.hadoop.*”等属性不会显示在此部分中,而是显示在“Spark 属性”中。

System Properties

“系统属性”显示有关 JVM 的更多详细信息。

Classpath Entries

最后一部分“类路径条目”列出了从不同来源加载的类,这对于解决类冲突非常有用。

执行器选项卡

“执行器”选项卡显示为应用程序创建的执行器的摘要信息,包括内存和磁盘使用情况以及任务和随机播放信息。“存储内存”列显示用于缓存数据的内存量和保留的内存量。

Executors Tab

“执行器”选项卡不仅提供资源信息(每个执行器使用的内存、磁盘和核心数量),还提供性能信息(GC 时间和随机播放信息)。

Stderr Log

单击执行器 0 的“stderr”链接将在其控制台中显示详细的标准错误日志

Thread Dump

单击执行器 0 的“线程转储”链接将显示执行器 0 上 JVM 的线程转储,这对于性能分析非常有用。

SQL 选项卡

如果应用程序执行 Spark SQL 查询,“SQL”选项卡将显示信息,例如查询的持续时间、作业以及物理和逻辑计划。这里我们包含一个基本示例来说明此选项卡

scala> val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df: org.apache.spark.sql.DataFrame = [count: int, name: string]

scala> df.count
res0: Long = 3

scala> df.createGlobalTempView("df")

scala> spark.sql("select name,sum(count) from global_temp.df group by name").show
+----+----------+
|name|sum(count)|
+----+----------+
|andy|         3|
| bob|         2|
+----+----------+

SQL tab

现在,上述三个数据帧/SQL 运算符显示在列表中。如果我们单击最后一个查询的“在 <console> 中显示:24”链接,我们将看到查询执行的 DAG 和详细信息。

SQL DAG

查询详情页面显示有关查询执行时间、持续时间、关联作业列表和查询执行 DAG 的信息。 第一块“WholeStageCodegen (1)”将多个运算符(“LocalTableScan”和“HashAggregate”)一起编译成单个 Java 函数以提高性能,并且块中列出了行数和溢出大小等指标。 块名称中的注释“(1)”是代码生成 ID。 第二个块“Exchange”显示了随机交换的指标,包括写入的随机记录数、总数据大小等。

logical plans and the physical plan

单击底部的“详细信息”链接将显示逻辑计划和物理计划,它们说明了 Spark 如何解析、分析、优化和执行查询。 受整个阶段代码生成优化约束的物理计划中的步骤以星号开头,后跟代码生成 ID,例如:“*(1) LocalTableScan”

SQL 指标

SQL 运算符的指标显示在物理运算符块中。 当我们想深入了解每个运算符的执行细节时,SQL 指标非常有用。 例如,“输出行数”可以回答在 Filter 运算符之后输出多少行,Exchange 运算符中的“写入的随机字节总数”显示了随机写入的字节数。

以下是 SQL 指标列表

SQL 指标含义运算符
输出行数 运算符的输出行数聚合运算符、连接运算符、样本、范围、扫描运算符、过滤器等。
数据大小 运算符的广播/随机/收集数据的大小BroadcastExchange、ShuffleExchange、子查询
收集时间 花费在收集数据上的时间BroadcastExchange、子查询
扫描时间 花费在扫描数据上的时间ColumnarBatchScan、FileSourceScan
元数据时间 花费在获取元数据上的时间,例如分区数、文件数FileSourceScan
写入的随机字节数 写入的字节数CollectLimit、TakeOrderedAndProject、ShuffleExchange
写入的随机记录数 写入的记录数CollectLimit、TakeOrderedAndProject、ShuffleExchange
随机写入时间 花费在随机写入上的时间CollectLimit、TakeOrderedAndProject、ShuffleExchange
远程读取的块数 远程读取的块数CollectLimit、TakeOrderedAndProject、ShuffleExchange
远程读取的字节数 远程读取的字节数CollectLimit、TakeOrderedAndProject、ShuffleExchange
远程读取到磁盘的字节数 从远程读取到本地磁盘的字节数CollectLimit、TakeOrderedAndProject、ShuffleExchange
本地读取的块数 本地读取的块数CollectLimit、TakeOrderedAndProject、ShuffleExchange
本地读取的字节数 本地读取的字节数CollectLimit、TakeOrderedAndProject、ShuffleExchange
获取等待时间 花费在获取数据(本地和远程)上的时间CollectLimit、TakeOrderedAndProject、ShuffleExchange
读取的记录数 读取的记录数CollectLimit、TakeOrderedAndProject、ShuffleExchange
排序时间 花费在排序上的时间排序
峰值内存 运算符中的峰值内存使用量排序、HashAggregate
溢出大小 运算符中从内存溢出到磁盘的字节数排序、HashAggregate
聚合构建时间 花费在聚合上的时间HashAggregate、ObjectHashAggregate
平均哈希探测桶列表迭代次数 聚合期间每次查找的平均桶列表迭代次数HashAggregate
构建侧的数据大小 构建的哈希图的大小ShuffledHashJoin
构建哈希图的时间 花费在构建哈希图上的时间ShuffledHashJoin
任务提交时间 写入成功后花费在提交任务输出上的时间对基于文件的表的任何写入操作
作业提交时间 写入成功后花费在提交作业输出上的时间对基于文件的表的任何写入操作
发送到 Python 工作进程的数据 发送到 Python 工作进程的序列化数据的字节数ArrowEvalPython、AggregateInPandas、BatchEvalPython、FlatMapGroupsInPandas、FlatMapsCoGroupsInPandas、FlatMapsCoGroupsInPandasWithState、MapInPandas、PythonMapInArrow、WindowsInPandas
从 Python 工作进程返回的数据 从 Python 工作进程接收回的序列化数据的字节数ArrowEvalPython、AggregateInPandas、BatchEvalPython、FlatMapGroupsInPandas、FlatMapsCoGroupsInPandas、FlatMapsCoGroupsInPandasWithState、MapInPandas、PythonMapInArrow、WindowsInPandas

结构化流选项卡

在微批处理模式下运行结构化流式处理作业时,Web UI 上将提供“结构化流式处理”选项卡。 概览页面显示了一些有关正在运行和已完成查询的简要统计信息。 此外,您还可以查看失败查询的最新异常。 有关详细统计信息,请单击表格中的“运行 ID”。

Structured Streaming Query Statistics

统计信息页面显示了一些有用的指标,可让您深入了解流式查询的状态。 目前,它包含以下指标。

作为早期版本,统计信息页面仍在开发中,并将在未来版本中得到改进。

流(DStreams)选项卡

如果应用程序将 Spark Streaming 与 DStream API 一起使用,则 Web UI 包含“流式处理”选项卡。 此选项卡显示数据流中每个微批处理的调度延迟和处理时间,这对于对流式处理应用程序进行故障排除非常有用。

JDBC/ODBC 服务器选项卡

当 Spark 作为分布式 SQL 引擎运行时,我们可以看到此选项卡。 它显示有关会话和已提交 SQL 操作的信息。

页面的第一部分显示有关 JDBC/ODBC 服务器的常规信息:启动时间和正常运行时间。

JDBC/ODBC Header

第二部分包含有关活动会话和已完成会话的信息。

JDBC/ODBC sessions

第三部分包含已提交操作的 SQL 统计信息。

JDBC/ODBC SQL Statistics