Spark Web UI及任务优化实战-了解 web ui
Spark专题
Spark Web UI
课程简介:
- 认识Spark Web Ui :Spark Web Ui 的基础信息介绍
- 使用Spark Web Ui:Spark Web Ui 从问题定位到问题解决
课程难度:⭐️⭐️
课程使用的平台:EasyData spark版本:3.3.1.2
Spark Web UI 是什么?
- Spark Web UI 是 Apache Spark 提供的一个基于 Web 的用户界面。它是 Spark 监控和调试的重要工具,随着 Spark 应用程序的运行而自动启动,用于展示应用程序运行过程中的各种详细信息。
Spark Web UI 作用
Web UI 作用 | 详情 | |
监控作业执行情况 | 作业进度跟踪 | Spark Web UI 的 Jobs 页面可以清晰地展示每个作业的状态,包括作业的提交时间、开始时间、结束时间等信息。 |
阶段划分与依赖分析 | Web UI 能够呈现出各个阶段之间的依赖关系。这有助于理解数据在不同阶段是如何流动和转换的。例如,在一个基于 Spark SQL 的数据分析任务中,数据的读取、过滤、聚合和输出可能分别是不同的阶段,通过查看阶段的划分和依赖 | |
性能分析与优化 | 任务执行时间监测 | Web UI 的 Tasks 页面可以显示每个任务的执行时间。通过分析任务执行时间的分布,可以发现性能瓶颈 |
资源利用评估 | 通过 Executors 页面可以查看执行器(Executors)的资源使用情况,包括 CPU 使用率、内存使用率等。 | |
故障诊断与调试 | 任务失败原因查找 | 当任务出现失败时,Spark Web UI 能够提供详细的错误信息。快速定位故障原因,例如是由于数据格式错误、OOM、网络故障等等 |
数据倾斜分析 | 通过查看各个任务的数据输入量和处理时间,可以发现是否存在数据倾斜现象。 |
Spark Web UI 模块
模块 | 功能 |
Jobs |
|
Stages |
|
Storage |
|
environment |
|
Executors |
|
SQL/DaraFrame |
|
通过Sql 看 UI
select * from mammut_user.dws_tradels_order_cus_1d where dt = '2024-03-26'
Jobs模块
在提交spark任务运行后,点击日志链接,Jobs展示的是整个spark应用任务的job整体信息
Jobs
User | hadoop账号,spark任务提交的用户,用以进行权限控制与资源分配 |
Total Uptime | Spark 应用从启动到当前时刻的持续运行时间。它就像一个计时器,记录了应用在集群环境中的存活时长 |
Scheduling Model | Job的调度模式, Spark 用于安排任务执行顺序和资源分配的策略。分为FIFO(先进先出)和FAIR(公平调度) |
Completed Jobs | 执行完成的Job |
Active Jobs | 正在执行的Job |
Event Timeline | Event Timeline 提供了一个时间序列上的任务执行视图。Job执行时间线和Exector的增加和删除事件时间线 |
Job details
点击某个job,查看该job的详细信息
Status | job的运行状态:running、succeeded、 failed |
Submitted | Job提交时间 |
Duration | Job执行时长 |
Associated SQL Query | 关联的SQL模块的query id |
Job Group | 任务组。通过 Job Group,用户可以对一组作业进行统一的操作,可以为不同的 Job Group 分配不同的资源配额 |
Event Timeline | 当前Job执行时间线和Exector的增加和删除事件时间线 |
DAG Visualization | DAG可视化展示, 当前Job所包含的所有stage信息 |
Completed Stages | 执行完成的stages信息 |
Skipped Stages | 跳过执行的stages信息 |
为什么stage被跳过?
skipped的stage代表是之前被其他stage执行过并落盘了,并不需要重新计算,可以直接使用之前的结果。
Stage模块(重点)
Stage概览
点击Stages模块,可进入到Stage界面
Completed Stages | 所有任务的stages信息 |
Skipped Stages | 跳过执行的stages信息 |
Stage详细(重点)
在Stages页点击进入某个stage后,可以查看某一stage的详细信息:
Resource Profile Id | 用于标识资源配置文件的唯一标识符,定义 Spark 应用在运行过程中所使用的资源分配方式。例如: 包括了诸如每个执行器(Executor)分配多少内存、多少 CPU 核心数等资源分配细节 | |
Total Time Across All Tasks | 当前stage中所有task总花费的时长 | |
Locality Level Summary | 数据本地化方式和数量 | |
Associated Job Ids | stage关联的job id | |
DAG Visualization | DAG可视化图,表示当前stage中包含的详细的tranformation操作流程图 | |
Event Timeline | 同之前 | |
Summary Metrics for x Completed Tasks | 已完成的Task的执行汇总情况:(task层面)
| |
Aggregated Metrics by Executor | task运行的指标信息按executor做聚合后的统计信息 | |
Output Size / Records | 输出的数据字节数大小/记录条数 | |
Input Size / Records | 输入的数据字节数大小/记录条数 | |
Shuffle Write | 有多少数据Shuffle写,一般是map task写数据,也可以是reduce task写数据。为下一个依赖的stage提供输入数据,shuffle过程中通过网络传输的数据字节数/记录条数 | |
Shuffle read | 表示有多少数据Shuffle读, 该项值有内容表示为reduce task | |
Tasks | 当前stage所有task信息 |
数据本地化:数据离计算它的代码有多近。基于数据距离代码的距离,有几种数据本地化级别:
- PROCESS_LOCAL :数据和计算它的代码在同一个Executor JVM进程中。
- NODE_LOCAL : 数据和计算它的代码在同一个节点,但不在同一个进程中,比如在不同的executor进程中,或者是数据在HDFS文件的block中。因为数据需要在不同的进程之间传递或从文件中读取。分为两种情况,第一种:task 要计算的数据是在同一个 worker 的不同 Executor 进程中。第二种:task 要计算的数据是在同一个 worker 的磁盘上,或在 HDFS 上恰好有 block 在同一个节点上。如果 Spark 要计算的数据来源于 HDFS 上,那么最好的本地化级别就是 NODE_LOCAL。
- NO_PREF : 从任何地方访问数据速度都是一样,不关心数据的位置。
- RACK_LOCAL : 机架本地化,数据在同一机架的不同节点上。需要通过网络传输数据以及文件 IO,比NODE_LOCAL 慢。情况一:task 计算的数据在 worker2 的 EXecutor 中。情况二:task 计算的数据在 work2 的磁盘上。
越往前的级别等待时间应该设置的长一点,因为越是前面性能越好
Storge模块
用于展示存储情况,能呈现 RDD、DataFrame 等存储对象的存储级别
Environment模块
提供全面的环境信息展示。它清晰呈现出 Spark 应用运行时所处的各类环境参数
概览信息 | |
Runtime Information | |
Spark Properties | |
Resource Profiles | |
Hadoop Properties | |
System Properties | |
Classpath Entries |
Executor模块
executors页面展示了executor和driver的一些统计信息和明细信息,汇总信息包括内存、磁盘、cpu的使用量,任务执行时间、GC时间,成功、失败、完成的task数量,以及输入输出的数据量等内容
SQL模块(重点)
完整的展示了任务的DAG过程,跟Stages结合可以对应该Stages与SQL代码的关系,也就是这是在运行哪一串代码,用于定位数据倾斜的核心功能之一
SQL算子和 UI SQl关键词对应关系
- WholeStageCodegen:全阶段代码生成,把一个stage里的算子进行了整合、优化
- Filter:where
- Project:select 后的字段
- Exchange:shuffle
- Sort:排序,一般在Exchange之后
- CustomShuffleReader:定制化shuffle,存在该算子说明启用了AE
- HashAggregate:group by (hash聚合)
- SortAggregate:group by(sort聚合,内存不足会采用sort兜底)
- Expand:对于select中存在多个distinct 或 group by id,name with cube会存在该算子
- Generate:explode函数
- ColumnarToRow:spark内部优化,向量化读
- SortMergeJoin(skew=true):join方式是SMJ,并且命中了AE自动处理倾斜的逻辑