概要描述
Inceptor 性能问题除了通过 Log 进行数据分析,还可以利用 Spark UI 做性能调整和优化。
那么本篇就介绍一下 Spark UI 的信息,以及如何利用 Spark UI 进行性能问题的排查。
详细说明
大致会按照以下几个部分做简单介绍:
- Spark UI 页面信息的基本概念;
- Spark UI 页面信息的作用;
- Spark UI 页面常见问题的总结;
Spark UI 页面信息基本概念
Spark UI 入口,在运行了 Inceptor server 角色的节点的 4040 端口即可访问;可以直接登陆:http://Inceptor-server-ip:4040 。
如果是新版本的 TDH ,可能已经安装了 dbaservice 希望切换回旧版本的 Spark UI 可以参考这个连接:关闭DBAService,使用旧版Spark UI
主页介绍
此文档只介绍性能相关的信息,其他内容不做介绍;
- Jobs 标签,可以看到当前所有任务,以及 Job 的执行时间;
- Stages 页面,可以看到应用的所有 stage,以及详细的 task 执行情况;
- Executors 页面,这里可以看到 executor 使用的内存、并发的 task 数量,还可以搜集一些jvm 相关信息(jstack、jmap等);
1、Jobs 标签
Jobs 页面可以显示总体的运行情况,包括调度模式(Scheduling Mode),运行模式(Cluster 或者 local);
Jobs Event timeline 下面显示具体的 sql 内容、提交用户、提交时间、执行时间;以及这一个 sql 被分成了几个 stage、几个 task ;以及 task 执行的情况等信息;
-
Stages:Succeeded/Total 下面的 0/1 代表当前 job 被分成了 1 个 stage,完成了 0 个;
-
Tasks:Succeeded/Total 下面的 0/15 代表当前 job 被分成了 15 个 task,完成了 0 个;
PS:深蓝色部分代表已经完成的,浅蓝色部分代表分配了 CPU core 正在运行的,空白部门代表 executor 没有可用 CPU core 资源,未执行的任务
-
Duration 可以按照升序、降序排列,可以通过这个查看当前运行时间最久的 job 是哪一个,是否异常的 job;
通过 job 的 description 的 link 能点击进去看到 job 的更详细的执行情况;
2、Detail for Job
Group id 后面的部分就是 当前 Job 的唯一标识符,这个页面可以看到 Job 的当前执行情况;
3、Detail for Stage
-
Summary Metrics for 18 Completed Tasks:已完成task 的性能指标总结,是task 级别的:
- 我们需要关注的,25%的,50%的,75%的,比如最短的1s ,25% 的都是60s,那就说明 1s 的这个没有什么参考价值,同样道理最大的也是一样
-
Aggregated Metrics by Executor,executor 级别的性能指标:
- 某个节点上执行的时间差异,以及某个节点上的executor 的执行情况,和executor 页面很类似;
-
Tasks,更详细的每个 task 的性能指标统计,包括:
- task id
- attempt:任务重试次数
- status:任务状态
- locality Level:数据本地化级别
- Executor:在哪个节点执行
- launch time:启动时间
- scheduler delay:调度延迟
- duration:运行时长
- Gctime:任务 Gctime
- errors:报错信息
需要重点关注的是几个时间指标:
- scheduler delay 超过 3s 时;
- 当 GCTime 超过 Duration 的 10% 时,就有可能是因为出现了 FGC,需要调整 executor 的内存,或者优化 sql;
4、Executors
Executors 页面可以看到有多少个 executor,并且可以点击特定的 executor 后面的 Thread Dump 获取 jstack 信息;
其中 driver 代表的是 Inceptor-server 的信息,点击 driver 后面的 Thread Dump 可以获取 server 的jstack,点击 Heap Histogram 可以获取 server 的 jmap 信息;