SparkUI 讲解

目录

Executors

Environment

Storage

SQL

Exchange

Sort

Aggregate

Jobs

Stages

Stage DAG

Event Timeline

Task Metrics

Summary Metrics

Tasks


💐💐扫码关注公众号,回复 spark 关键字下载geekbang 原价 90 元 零基础入门 Spark 学习资料💐💐

 

Executors

为了叙述方便,我们以表格的形式说明这些 Metrics 的含义与作用。

Executors 页面清清楚楚地记录着每一个 Executor 消耗的数据量,以及它们对 CPU、内存与磁盘等硬件资源的消耗。基于这些信息,我们可以轻松判断不同 Executors 之间是否存在负载不均衡的情况,进而判断应用中是否存在数据倾斜的隐患。

Environment

就类别来说,它包含 5 大类环境信息,为了方便叙述,我把它们罗列到了下面的表格中。

这 5 类信息中,Spark Properties 是重点,其中记录着所有在运行时生效的 Spark 配置项设置。通过 Spark Properties,我们可以确认运行时的设置,与我们预期的设置是否一致,从而排除因配置项设置错误而导致的稳定性或是性能问题。

Storage

Storage 详情页,记录着每一个分布式缓存(RDD Cache、DataFrame Cache)的细节,包括缓存级别、已缓存的分区数、缓存比例、内存大小与磁盘大小。Spark 支持的不同缓存级别,它是存储介质(内存、磁盘)、存储形式(对象、序列化字节)与副本数量的排列组合。对于 DataFrame 来说,默认的级别是单副本的 Disk Memory Deserialized,如上图所示,也就是存储介质为内存加磁盘,存储形式为对象的单一副本存储方式。

Cached Partitions 与 Fraction Cached 分别记录着数据集成功缓存的分区数量,以及这些缓存的分区占所有分区的比例。当 Fraction Cached 小于 100% 的时候,说明分布式数据集并没有完全缓存到内存(或是磁盘),对于这种情况,我们要警惕缓存换入换出可能会带来的性能隐患。

后面的 Size in Memory 与 Size in Disk,则更加直观地展示了数据集缓存在内存与硬盘中的分布。从上图中可以看到,由于内存受限(3GB/Executor),摇号数据几乎全部被缓存到了磁盘,只有 584MB 的数据,缓存到了内存中。坦白地说,这样的缓存,对于数据集的重复访问,并没有带来实质上的性能收益。基于 Storage 页面提供的详细信息,我们可以有的放矢地设置与内存有关的配置项,如 spark.executor.memory、spark.memory.fraction、spark.memory.storageFraction,从而有针对性对 Storage Memory 进行调整。

SQL

当我们的应用包含 DataFrame、Dataset 或是 SQL 的时候,Spark UI 的 SQL 页面,就会展示相应的内容,如下图所示。

一级入口页面,以 Actions 为单位,记录着每个 Action 对应的 Spark SQL 执行计划。我们需要点击“Description”列中的超链接,才能进入到二级页面,去了解每个执行计划的详细信息。

点击图中的“save at:27”,即可进入到该作业的执行计划页面,如下图所示。

图中红色的部分为 Exchange,代表的是 Shuffle 操作,蓝色的部分为 Sort,也就是排序,而绿色的部分是 Aggregate,表示的是(局部与全局的)数据聚合,这三部分是硬件资源的主要消费者。

Exchange

下图中并列的两个 Exchange,对应的是示意图中 SortMergeJoin 之前的两个 Exchange。它们的作用是对申请编码数据与中签编码数据做 Shuffle,为数据关联做准备。

对于每一个 Exchange,Spark UI 都提供了丰富的 Metrics 来刻画 Shuffle 的计算过程。从 Shuffle Write 到 Shuffle Read,从数据量到处理时间,应有尽有。

为了让你获得直观感受,我还是举个例子说明。比方说,我们观察到过滤之后的中签编号数据大小不足 10MB(7.4MB),这时我们首先会想到,对于这样的大表 Join 小表,Spark SQL 选择了 SortMergeJoin 策略是不合理的。基于这样的判断,我们完全可以让 Spark SQL 选择 BroadcastHashJoin 策略来提供更好的执行性能。至于调优的具体方法,想必不用我多说,你也早已心领神会:要么用强制广播,要么利用 Spark 3.x 版本提供的 AQE 特性。

Sort

可以看到,“Peak memory total”和“Spill size total”这两个数值,足以指导我们更有针对性地去设置 spark.executor.memory、spark.memory.fraction、spark.memory.storageFraction,从而使得 Execution Memory 区域得到充分的保障。以上图为例,结合 18.8GB 的峰值消耗,以及 12.5GB 的磁盘溢出这两条信息,我们可以判断出,当前 3GB 的 Executor Memory 是远远不够的。那么我们自然要去调整上面的 3 个参数,来加速 Sort 的执行性能。

Aggregate

对于 Aggregate 操作,Spark UI 也记录着磁盘溢出与峰值消耗,即 Spill size 和 Peak memory total。这两个数值也为内存的调整提供了依据,以上图为例,零溢出与 3.2GB 的峰值消耗,证明当前 3GB 的 Executor Memory 设置,对于 Aggregate 计算来说是绰绰有余的。

Jobs

对于 Jobs 页面来说,Spark UI 也是以 Actions 为粒度,记录着每个 Action 对应作业的执行情况。我们想要了解作业详情,也必须通过“Description”页面提供的二级入口链接。在 Jobs 页面,Spark UI 会把数据的读取、访问与移动,也看作是一类“Actions”,比如图中 Job Id 为 0、1、3、4 的那些。这几个 Job,实际上都是在读取源数据(元数据与数据集本身)。

Stages

Stage DAG

tage DAG 仅仅是 SQL 页面完整 DAG 的一个子集

Event Timeline

Event Timeline,记录着分布式任务调度与执行的过程中,不同计算环节主要的时间花销。图中的每一个条带,都代表着一个分布式任务,条带由不同的颜色构成。其中不同颜色的矩形,代表不同环节的计算时间。

理想情况下,条带的大部分应该都是绿色的(如图中所示),也就是任务的时间消耗,大部分都是执行时间。不过,实际情况并不总是如此,比如,有些时候,蓝色的部分占比较多,或是橙色的部分占比较大。在这些情况下,我们就可以结合 Event Timeline,来判断作业是否存在调度开销过大、或是 Shuffle 负载过重的问题,从而有针对性地对不同环节做调优。比方说,如果条带中深蓝的部分(Scheduler Delay)很多,那就说明任务的调度开销很重。这个时候,我们就需要参考公式:D / P ~ M / C,来相应地调整 CPU、内存与并行度,从而减低任务的调度开销。其中,D 是数据集尺寸,P 为并行度,M 是 Executor 内存,而 C 是 Executor 的 CPU 核数。波浪线~ 表示的是,等式两边的数值,要在同一量级。再比如,如果条带中黄色(Shuffle Write Time)与橙色(Shuffle Read Time)的面积较大,就说明任务的 Shuffle 负载很重,这个时候,我们就需要考虑,有没有可能通过利用 Broadcast Join 来消除 Shuffle,从而缓解任务的 Shuffle 负担。

Task Metrics

Summary Metrics

对于这些详尽的 Task Metrics,难能可贵地,Spark UI 以最大最小(max、min)以及分位点(25% 分位、50% 分位、75% 分位)的方式,提供了不同 Metrics 的统计分布。这一点非常重要,原因在于,这些 Metrics 的统计分布,可以让我们非常清晰地量化任务的负载分布。换句话说,根据不同 Metrics 的统计分布信息,我们就可以轻而易举地判定,当前作业的不同任务之间,是相对均衡,还是存在严重的倾斜。如果判定计算负载存在倾斜,那么我们就要利用 AQE 的自动倾斜处理,去消除任务之间的不均衡,从而改善作业性能。

这里特别值得你关注的,是 Spill(Memory)和 Spill(Disk)这两个指标。Spill,也即溢出数据,它指的是因内存数据结构(PartitionedPairBuffer、AppendOnlyMap,等等)空间受限,而腾挪出去的数据。Spill(Memory)表示的是,这部分数据在内存中的存储大小,而 Spill(Disk)表示的是,这些数据在磁盘中的大小。因此,用 Spill(Memory)除以 Spill(Disk),就可以得到“数据膨胀系数”的近似值,我们把它记为 Explosion ratio。有了 Explosion ratio,对于一份存储在磁盘中的数据,我们就可以估算它在内存中的存储大小,从而准确地把握数据的内存消耗。

Tasks

每个 Task 都有自己的本地性倾向。结合本地性倾向,调度系统会把 Tasks 调度到合适的 Executors 或是计算节点,尽可能保证“数据不动、代码动”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA2023 开发环境配置

目录 1. 关闭IDEA自动更新1.2 IDEA 新版样式切换 2. Maven配置2.1本地仓库优先加载2.2 maven.config配置文件中 3. 全局配置JDK4. 配置文件编码:UTF-85. 开启自动编译(全局配置)6. 开启自动导包7. 开启鼠标悬浮(提示文档信息)8. 设…

golang 使用栈模拟计算器

思路: // Author sunwenbo // 2024/4/12 16:51 package mainimport ("errors""fmt""strconv" )// 使用数组来模拟一个栈的应用 type Stack struct {MaxTop int //表示栈最大可以存放数的个数Top int //表示栈底&#xff…

2024年阿里云4核8G配置云服务器价格低性能高!

阿里云4核8G服务器租用优惠价格700元1年,配置为ECS通用算力型u1实例(ecs.u1-c1m2.xlarge)4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选,CPU采用Intel(R) Xeon(R) Platinum处理器,阿里云优惠 aliyunfuwuqi…

代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、46.全排列II

491. 非递减子序列 思路: 在90.子集II (opens new window)中我们是通过排序,再加一个标记数组来达到去重的目的。 而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。 所以不能使用之前的去重逻辑&…

【模拟】Leetcode 数青蛙

题目讲解 1419. 数青蛙 算法讲解 class Solution { public:int minNumberOfFrogs(string croakOfFrogs) {string target "croak";int n target.size();//保存target每个字符的位置indexunordered_map<char, int>index;for(int i 0; i < n; i)index[tar…

必应Bing国内广告推广,帮助企业降低获客成本!

搜索引擎广告作为数字营销的重要手段之一&#xff0c;因其精准定位和效果可衡量而备受青睐。而在众多搜索引擎平台中&#xff0c;必应Bing以其独特的市场定位和用户群体成为不可忽视的广告推广渠道。云衔科技作为一家专业的数字营销服务提供商&#xff0c;致力于帮助企业实现高…

深入理解GCC/G++在CentOS上的应用

文章目录 深入理解GCC/G在CentOS上的应用编译C和C源文件C语言编译C语言编译 编译过程的详解预处理编译汇编链接 链接动态库和静态库静态库和动态库安装静态库 结论 深入理解GCC/G在CentOS上的应用 在前文的基础上&#xff0c;我们已经了解了CentOS的基本特性和如何在其上安装及…

Windows 部署ChatGLM3大语言模型

一、环境要求 硬件 内存&#xff1a;> 16GB 显存: > 13GB&#xff08;4080 16GB&#xff09; 硬盘&#xff1a;60G 软件 python 版本推荐3.10 - 3.11 transformers 库版本推荐为 4.36.2 torch 推荐使用 2.0 及以上的版本&#xff0c;以获得最佳的推理性能 二、部…

你觉得职场能力重要还是情商重要?

职场能力和情商都是职业成功的关键因素&#xff0c;它们在不同的情境和角色中扮演着不同的作用。很难简单地说哪一个更重要&#xff0c;因为它们通常是相辅相成的。 职场能力包括专业技能、知识水平、解决问题的能力、工作效率、创新思维等。这些能力是完成工作任务、达成职业目…

【NUCLEO-G071RB】003——GPIO-按键控制LED灯

NUCLEO-G071RB&#xff1a;003——GPIO-按键控制LED灯 设计目标电路原理图芯片配置程序修改 设计目标 用输入控制输出&#xff0c;即以蓝色按键B1的输入控制LED4灯的输出 细节&#xff1a; 若判定为按键按下中&#xff0c;则LED灭灯&#xff0c;否则亮灯按键按下和抬起的检查…

【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解

文章目录 一、基于注解的AOP1、配置Spring环境2、在beans.xml文件中定义AOP约束3、定义记录日志的类【切面】4、定义Bean5、在主配置文件中配置扫描的包6、在主配置文件中去开启AOP的注解支持7、测试8、优化改进9、总结 一、基于注解的AOP 1、配置Spring环境 <dependencie…

多ip证书实现多个ip地址https加密

在互联网快速发展的现在&#xff0c;很多用户会使用由正规数字证书颁发机构颁发的数字证书&#xff0c;其中IP数字证书就是只有公网IP地址网站的用户用来维护网站安全的手段。由于域名网站比较方便记忆&#xff0c;只有公网IP地址的网站是很少的&#xff0c;相应的IP数字证书产…

向量数据库与图数据库:理解它们的区别

作者&#xff1a;Elastic Platform Team 大数据管理不仅仅是尽可能存储更多的数据。它关乎能够识别有意义的见解、发现隐藏的模式&#xff0c;并做出明智的决策。这种对高级分析的追求一直是数据建模和存储解决方案创新的驱动力&#xff0c;远远超出了传统关系数据库。 这些创…

单链表的应用

文章目录 目录1. 单链表经典算法OJ题目1.1 [移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/description/)1.2 [链表的中间节点](https://leetcode.cn/problems/middle-of-the-linked-list/description/)1.3 [反转链表](https://leetcode.cn/problem…

考研数学|《1800》《660》《880》如何选择和搭配?(附资料分享)

直接说结论&#xff1a;基础不好先做1800、强化之前660&#xff0c;强化可选880/1000题。 首先&#xff0c;传统习题册存在的一个问题是题量较大&#xff0c;但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大&#xff0c;但有些题目难度不够平衡&#xff0c;有些过于简单…

使用 ECharts 绘制咖啡店各年订单的可视化分析

使用 ECharts 绘制咖啡店各年订单的可视化分析 在这篇博客中&#xff0c;我将分享一段使用 ECharts 库创建可视化图表的代码。通过这段代码&#xff0c;我们可以直观地分析咖啡店各年订单的情况。 饼图 这段代码包含了两个 ECharts 图表&#xff0c;一个是饼图&#xff0c;用…

Linux安装及应用管理

目录 一.Linux应用程序基础 应用程序与系统命令的关系​编辑 典型应用程序的目录结构 常见的软件包封装类型 二.rpm软件包操作管理 RPM Red-Hat Package Manager rmp命令的格式 rpm软件包操作管理 查询已安装的RPM软件信息 查询未安装的RPM软件包文件中信息 安装、升…

1.SCI各模块

1.学会“抄” 写论文&#xff0c;一定要学会“抄”&#xff01;这样才能事半功倍&#xff0c;尤其是对于初次写作的新手&#xff0c;否则写作过程一定会让你痛不欲生&#xff0c;而且写出来的东西就是一坨shi&#xff0c;不仅折磨自己&#xff0c;也折磨导师。 写论文与建大楼…

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示32行点x128列点字模串的应用

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示32行点x128列点字模串的应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显…

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树

1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…