【Spark2运算效率】第四节 影响生产集群运算效率的原因之数据倾斜
【Spark2运算效率】【Spark2运算效率】第四节 影响生产集群运算效率的原因之数据倾斜
- 前言
- 倾斜实例
- 治理过程
- 结语
- 跳转
前言
当ETL调度任务所能拥有的资源能够满足其在较为资源冗余的状况下实施运算,长时间的运算过程中可能是涉及了数据倾斜的现象;数据倾斜可以说是分布式运算中不可避免的一种现象,这种现象带来的后果就是任务执行时长会随着倾斜度的增加而变长,甚至会有Fail的风险(任务重跑);
不管是任务执行延时还是任务重跑,这都在一定程度上增加了集群的运营压力,所幸的是,只要编写过程稍加注意,还是能避免很大一部分的数据倾斜事件,剩余的部分也能通过一些固定的手法进行更正解决。
倾斜实例
如图所示,在查看任务执行流程时,stage67发生了超大体量TB级别的数据输入:
数据倾斜带来的现象比较明显,通常是99%的task跑完后等待最后一个task的执行,在随后的stage150发生了数据倾斜,卡了2.4个小时仍未执行完成:
在集群资源紧张的时长,单个任务时间跨度过长可能存在响应心跳失败或者卡住的task被GC的现象,这会导致任务失败重跑,以至于在治理之前,该任务的执行时长在5-9个小时之间浮动,具体如图:
治理过程
由于涉及大体量数据表,因此首要是对任务submit资源进行了上调。这里特别说明:
拥有超大体量数据的表通常为分区表,在涉及进行分区表操作的任务中,首要保证的是资源充足,其次是要满足并发。
其次,如果是分区表经过查询、聚合动作后,最终写入临时表时(注意,这在开发过程中很常见,通常表现为DROP TABLE xxxxxx;CREATE TABLE xxxxxx AS 或者INSERT OVERWRITE TABLE xxxxxx AS),因为是临时表我们无需担心小文件累积的现象发生,因此,我们可以在代码段前设置spark.sql.shuffle.partition数目,来完成大体量数据的分发聚合操作,以此来提高执行效率。但如果是INSERT INTO TABLE这种追加操作,则要考虑落地小文件的累加问题。
最后,对于数据倾斜问题,通常是因为某个单一的KEY导致的数据分布不均匀,最直接的表现是在一些配置表(尤其是小表,在编写聚合逻辑的时候,开发人员往往认为左表或右表只有几十或几百行的数据,认为运算量不大,故直接进行了join聚合操作,这实际上是冒着很大风险,因为正是这种小表,才容易造成极为夸张的数据倾斜现象),比如在本job中的第一个数据倾斜点,就是因为引用了一张数据体量为74行的交易类型配置表:
在解决该数据倾斜点的时候,考虑SparkSQL shuffle遵行的基本规范,对该交易类型配置表进行了预处理落地,落地表继续执行原有的操作,这样的做法使得导致数据倾斜的KEY被提前筛掉,从而较为均匀的分配数据,最大化运用申请得到的资源(另一种方案是直接cache该表,然后开启广播分发该表,这样可以规避聚合操作带来的数据倾斜),那么再贴一下这一块调整前的运行时长:
这里贴一下stage明细,有超过5G的数据被分配到一个task上,而其他task获得的数据不足1M,由此,这个发生数据倾斜的task承担的运算量可以想象(运算量由聚合的另一张表决定):
调整过后,倾斜现象已经得到治理(采用预处理+cache广播的办法):
运行时长(这里博主已经将代码彻底打乱,这部分代码被提在前部执行):
采用广播的方法,该处数据倾斜点效率提升几十倍,该Job其他处的数据倾斜点均是使用:诊断-修改-测试的思路进行操作的,该任务整体运行时长最终稳定在1小时上下效率提升5-9倍:
结语
数据倾斜进行预判比较困难,多是在运行时刻才会显现出来,但是有超过一半的数据倾斜还是可以通过预防手段进行避免,以博主的经验和接触的业务类型来参看,起因往往都是因为一些配置表,因此可以总结出一些经验和数据倾斜的特征供大家开发时规避数据倾斜的参考:
- 大部分数据倾斜是由配置表引起的,在涉及交易类型tradetype、专户产品a_dim_smotype、客户类型custtype等数据量很小,代表某一种特性或特征的编写时,应做到该类小表的数据提前过滤(落地操作,目的是过滤掉引发数据倾斜的字段),若是引发数据倾斜的字段恰好是需要的,可先将聚合结果写入临时表,再将特征表进行cache操作,用该临时表与特征表进行聚合,则可避免数据倾斜。
- 若是进行聚合操作时,如果是涉及一些隐性的条件是不需要的,则应该对小表进行提前落地,这样可避免聚合时数据分发可能引起的数据倾斜。
- 可尝试多使用cache操作,具体格式如下:
cache table table_name_1 select a,b,c,d from table_name_2;
这样就可以正常使用table_name_1表了。
大家在实际操作过程中如果碰到什么问题,可以下方流言交流。
跳转
目录
【Spark2运算效率】第四节 影响生产集群运算效率的原因之数据倾斜相关推荐
- 【Spark2运算效率】第三节 影响生产集群运算效率的原因之资源缺乏
[Spark2运算效率][Spark2运算效率]第三节 影响生产集群运算效率的原因之资源缺乏 前言 问题概述 调整办法 结语 跳转 前言 面对复杂的业务问题,以及日益增多的需求,我们开发的脚本也越来越 ...
- 初等数学O 集合论基础 第四节 二元关系、等价类与运算
初等数学O 集合论基础 第四节 二元关系.等价类与运算 这一讲的目标是在非空集合上定义关系与运算,我们学过的常见的关系有大小关系.整除关系.同余关系等:常见的运算有四则运算.乘方运算.开方运算等,但这 ...
- 传热学环肋肋效率matlab程序,传热学 第二章第四节 通过肋片的导热.pdf
传热学 第二章第四节 通过肋片的导热 第四节 通过肋片的导热 第二章 导热基本定律及稳态导热 传热 学 第一节 导热基本定律 (Heat Transfer ) 第二节 导热微分方程式 (Heat Tr ...
- 三菱四节传送带控制梯形图_基于三菱FX—2N系列PLC的四节传送带模拟控制设计...
龙源期刊网 http://www.qikan.com.cn 基于三菱 FX - 2N 系列 PLC 的四节传送带 模拟控制设计 作者:侯芳 李子都 来源:<无线互联科技> 2018 年第 ...
- 三菱四节传送带控制梯形图_基于三菱FX-2N系列PLC的四节传送带模拟控制设计
基于三菱 FX-2N 系列 PLC 的四节传送带模拟控制设计 侯 芳 1 ,李子都 2 [摘 要] 文章以模拟某企业的四节传送带的 PLC 控制为例,通过 I/O 分配.接 口电路图.工作原理图.梯形 ...
- 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
第十四节过拟合解决手段L1和L2正则 第十三节中,我们讲解了过拟合的情 ...
- mysql时间相减得到天数保留两位_【敲黑板!】分布式事务数据库 —-MySQL 数据库开发规范(第四节)...
今天Amy着重为大家讲解一下关于函数的一些硬核知识,也是本文中非常重要的一个章节,记得认真看(dianzan)哦~ 第四节.函数 4.1 字符串连接函数 MySQL 数据库中字符串连接方法,需使用 C ...
- python中的除法运算定律_四年级上册数学《运算定律》教学总结(精选6篇)
四年级上册数学<运算定律>教学总结(精选6篇) 人生天地之间,若白驹过隙,忽然而已,回顾一段时间以来的教学经历,付出了汗水,也收获了成果,写一份教学总结,好好地把它记录下来吧.那么如何避免 ...
- 三菱四节传送带控制梯形图_四节传送带PLC控制课程设计.doc
四节传送带PLC控制课程设计 四节传送带PLC控制课程设计 一 设计背景和功能概述 二 电气原理图与功能详细分析说明 三 部分元件的说明 四 软件流程图 五 总结 六 源程序清单 七 参考文献 四节传 ...
最新文章
- RESTful API 最佳实践
- PHP APC安装与使用
- 渗透知识-linux基础命令
- 控制器中添加DB类才可以操作数据库表中的数据
- CentOS下C++开发环境搭建
- 【MySQL数据库】一天学会MySQL笔记——MarkDown版
- 如何在客户端调用服务端代码
- 微信小程序部分功能介绍和实现
- Spark K-Means
- Web Service和SOAP以及HTTP的关系?
- 关于前段与后端数据库的连接
- 静态Web开发 JavaScript
- CMD中文显示为乱码
- 每天几道面试题SSM面试题
- 微软 苏州STCA 2022暑期实习生 平行面+终面 面经
- Unity3d之贴图融合
- js闭包循环原因_「js基础」JavaScript入门,难不难你来说
- 游戏服务器稳定ping值,网友玩游戏时Ping值超过了2亿!
- 计算机比赛小组名称和口号,小组名称和口号大全励志,小组名称和口号大全励志...
- Vue 生成海报图的方法