数据倾斜产生,原因及其解决方案

目录

第七章 数据倾斜 

7.1 数据倾斜的产生,表现与原因

7.1.1 数据倾斜的定义

7.1.2 数据倾斜的危害

7.1.3 数据倾斜发生的现象

7.2 数据倾斜倾斜造成的原因

7.3 几种常见的数据倾斜及其解决方案

7.3.1 空值引发的数据倾斜

7.3.2 不同数据类型引发的数据倾斜

7.3.3 表连接时引发的数据倾斜

7.3.4 group by分组时候key值分布不均

7.3.5 count distinct去重的时候key值分布不均

7.3.6 排序过程

7.2.7 数据膨胀引起

7.4 实践与定位


第七章 数据倾斜 

7.1 数据倾斜的产生,表现与原因

7.1.1 数据倾斜的定义

        数据倾斜是指在并行进行数据处理的时候,由于单个partition的数据显著多余其他部分,分布不均匀,导致大量数据集中分布到一台或者某几台计算节点上,使得该部分的处理速度远低于平均计算速度,成为整个数据集处理的瓶颈,从而影响整体计算性能。

7.1.2 数据倾斜的危害

        对于分布式系统来说,理想的处理方式应该是各台机器共同工作,整体耗时随着计算节点数量的增加而线性下降。但在实际情况下,很多机器所分配的任务是不均匀的,例如大部分任务被分配到个别机器上,其他机器只处理小部分任务,则执行效率提升不明显,远低于理想值。由此可见,根据“水桶效应”,分布式系统的计算能力由耗时最长的任务所决定,对于大数据系统来说,可怕的不是大数据量,而是数据倾斜。

        当数据出现数据倾斜的时候,某机器计算耗时远高于其他机器,带来的主要问题有两点:一是整体耗时过大,不能充分发挥分布式系统的并行计算优势;二是部分机器处理的数据量过大,可能导致内存不足,任务失败。

7.1.3 数据倾斜发生的现象

        通过检查日志可以看到,出现数据倾斜主要有一下3种现象:

  • 绝大多数任务执行的很快,但个别Executor执行时间很长,导致整体任务卡在某一阶段不能结束,整体执行时间过长;

  • 原本能够正常执行的Spark作业,爆出内存溢出异常,无法正常产出数据;

  • 个别Reduce处理的数据量与平均数据量相比差异过大,通常可达3倍甚至更多,远远超过其他正常reduce,

7.2 数据倾斜倾斜造成的原因

        数据倾斜产生原因主要有以下几点:数据key值分布不均,机器配置和数据量比例不合理,业务数据本身特性导致。

  • key-value值分布不均

例如join连接,group by分组,distinct去重

  • 机器配置不合理

当机器配置与所需的数据量不相匹配的时候,总会出现部分需要处理的key值数量超出机器处理能力的情况,由此造成Reduce进程卡顿。

  • 业务数据自身特性

除了技术上的原因,业务本身的特性也会导致数据分布不均匀的情况,如不同品牌门店的数据量,订单量。

  • 小文件过多,笛卡尔积造成的数据膨胀等

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值