网络用户界面

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

目录

职位标签

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

在此部分显示的信息是

基本信息

事件时间线

按状态分组的工作细节

当您点击一个特定的职位时,您可以看到该职位的详细信息。

职位详情

本页面显示了由其职位ID标识的特定职位的详细信息。

事件时间线

有向无环图

有向无环图

阶段标签

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

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

阶段标题

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

游泳池属性

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

阶段细节

阶段详情

阶段详细页面开始于所有任务的总时间等信息, 局部性级别摘要 洗牌读取大小 / 记录 和相关的作业ID。

阶段标题

此阶段还有一个有向无环图 (DAG) 的可视化表示,其中顶点表示 RDD 或 DataFrame,边表示将要应用的操作。 节点根据操作范围在 DAG 可视化中进行分组,并标记为操作范围名称(BatchScan、WholeStageCodegen、Exchange 等)。 值得注意的是,整体阶段代码生成操作也标注了代码生成 ID。对于属于 Spark DataFrame 或 SQL 执行的阶段,这允许将阶段执行细节与 Web-UI SQL 标签页中报告的 SQL 计划图和执行计划的相关细节进行交叉参考。

阶段DAG

所有任务的总结指标以表格和时间轴的形式呈现。

阶段指标

按执行器汇总的指标显示按执行器汇总的相同信息。

每个执行器的阶段指标

累加器 是一种共享变量。它提供了一个可变变量,可以在各种转换中进行更新。可以创建有名称和无名称的累加器,但只有命名的累加器会被显示。

阶段累加器

任务详情基本上包含与摘要部分相同的信息,但按任务详细列出。它还包括查看日志的链接以及如果因某种原因失败的任务尝试编号。如果有命名累加器,这里可以看到每个任务结束时的累加器值。

任务

存储选项卡

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

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

存储选项卡

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

存储细节

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

环境选项卡

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

环境选项卡

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

Hadoop 属性

点击‘Hadoop Properties’链接将显示与Hadoop和YARN相关的属性。请注意,像 ‘spark.hadoop.*’ 这样的属性不是在这一部分显示,而是在‘Spark Properties’中显示。

系统属性

‘系统属性’显示有关JVM的更多细节。

类路径条目

最后一部分‘Classpath Entries’列出了从不同来源加载的类,这对解决类冲突非常有用。

执行者选项卡

执行者选项卡显示有关为应用程序创建的执行者的摘要信息,包括内存和磁盘使用情况以及任务和洗牌信息。存储内存列显示用于缓存数据的内存使用量和保留量。

执行器标签

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

标准错误日志

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

线程转储

点击执行器 0 的‘Thread Dump’链接会显示执行器 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 标签

现在,上述三个数据框/SQL操作符显示在列表中。如果我们点击最后一个查询的‘show at : 24’链接,我们将看到DAG和查询执行的详细信息。

SQL DAG

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

逻辑计划和物理计划

点击底部的‘Details’链接将显示逻辑计划和物理计划,这些计划说明了Spark如何解析、分析、优化和执行查询。整个阶段代码生成优化下的物理计划步骤,以星号开头,后接代码生成ID,例如:‘*(1) LocalTableScan’

SQL指标

SQL操作符的指标显示在物理操作符的块中。当我们想要深入了解每个操作符的执行细节时,SQL指标可以很有用。例如,“输出行数”可以回答在过滤操作符后输出了多少行,“交换操作符中的洗牌字节总写入”显示了洗牌写入的字节数。

这是SQL指标的列表:

SQL 指标 含义 操作符
number of output rows 操作符的输出行数 聚合操作符、连接操作符、取样、范围、扫描操作符、过滤等
data size 操作符的广播/洗牌/收集数据的大小 BroadcastExchange, ShuffleExchange, Subquery
time to collect 收集数据花费的时间 BroadcastExchange, Subquery
scan time 扫描数据花费的时间 ColumnarBatchScan, FileSourceScan
metadata time 获取元数据(如分区数量、文件数量)花费的时间 FileSourceScan
shuffle bytes written 写入的字节数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
shuffle records written 写入的记录数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
shuffle write time 洗牌写入花费的时间 CollectLimit, TakeOrderedAndProject, ShuffleExchange
remote blocks read 远程读取的块数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
remote bytes read 远程读取的字节数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
remote bytes read to disk 从远程读取到本地磁盘的字节数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
local blocks read 本地读取的块数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
local bytes read 本地读取的字节数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
fetch wait time 获取数据(本地和远程)花费的时间 CollectLimit, TakeOrderedAndProject, ShuffleExchange
records read 读取的记录数 CollectLimit, TakeOrderedAndProject, ShuffleExchange
sort time 排序花费的时间 Sort
peak memory 操作符的峰值内存使用量 Sort, HashAggregate
spill size 操作符中从内存溢出到磁盘的字节数 Sort, HashAggregate
time in aggregation build 聚合花费的时间 HashAggregate, ObjectHashAggregate
avg hash probe bucket list iters 聚合过程中每次查找的平均桶列表迭代次数 HashAggregate
data size of build side 构建的哈希映射的大小 ShuffledHashJoin
time to build hash map 构建哈希映射花费的时间 ShuffledHashJoin
task commit time 在写入成功后提交任务输出花费的时间 任何基于文件的表的写操作
job commit time 在写入成功后提交作业输出花费的时间 任何基于文件的表的写操作
data sent to Python workers 发送到 Python 工作者的序列化数据的字节数 ArrowEvalPython, AggregateInPandas, BatchEvalPython, FlatMapGroupsInPandas, FlatMapsCoGroupsInPandas, FlatMapsCoGroupsInPandasWithState, MapInPandas, PythonMapInArrow, WindowsInPandas
data returned from Python workers 从 Python 工作者接收到的序列化数据的字节数 ArrowEvalPython, AggregateInPandas, BatchEvalPython, FlatMapGroupsInPandas, FlatMapsCoGroupsInPandas, FlatMapsCoGroupsInPandasWithState, MapInPandas, PythonMapInArrow, WindowsInPandas

结构化流处理标签

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

结构化流查询统计

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

作为早期发布版本,统计页面仍在开发中,将在未来的版本中进行改进。

流式(DStreams)标签

如果应用程序使用 Spark Streaming 和 DStream API,则网页 UI 包含一个 Streaming 选项卡。该选项卡显示数据流中每个微批次的调度延迟和处理时间,这对于故障排除流应用程序非常有用。

JDBC/ODBC 服务器选项卡

当 Spark 作为 分布式 SQL 引擎 运行时,我们可以看到这个标签。它显示了有关会话和提交的 SQL 操作的信息。

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

JDBC/ODBC 头部

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

JDBC/ODBC 会话

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

JDBC/ODBC SQL 统计信息