数据倾斜的处理方案有哪些?

数据倾斜会在数据量级较大的表中,查询的时候时常遇到,如何理解数据倾斜?大数据的处理目前大多都依赖分布式计算,在并行处理的过程中数据在不同的节点中分布不均,导致数据大量集中在某一个节点,查询时被卡住的现象;在hivesql中的distinct、group by 、join 时出现的频率较高;

首先我们剖析一下导致倾斜的原因:

1)、某个数据源表本身存在倾斜,节点数据分布不均,导致任务长时间挂起,导致资源利用率下降;在嵌套查询中,任务1需要依赖在任务0计算结果的情况下,这时任务0由于数据倾斜,导致宕机(任务执行时间过长或者直接挂起),那么这个整个作业都会被挂起;

2)、在shuffle阶段造成倾斜,比如特定key值数量过多,导致join发生时,大量数据涌向一个节点,导致数据严重倾斜,个别节点的读写压力是其他节点的好几倍,引发OOM错误内存溢出,导致任务失败;

3)、数据写入时,出现的数据分布不均;

4)、数据清洗过程中,过滤大量的数据导致节点分布不均;

常见的处理方式有以下几种:

1)、用group by 替换distinct,原理是将数据先分组,再处理;

2)、两表数据量级差距大时,用map join ,原理是行列缩减,省去shuffle的过程(使用DistributedCache机制将小表存储到各个Mapper进程所在机器的磁盘空间上,各个Mapper进程读取不同的大表分片,将分片中的每一条记录与小表中所有记录进行合并,合并后直接输出map结果即可得到最终结果);

3)、group by时把数据量大的分组单独计算,再union all合并到一起;

4)、特殊的key处理join前优化;

5)、在对大表数据进行过滤后,做一次repartition,让数据重回均匀分布的状态,避免后续查询时发生倾斜;

6)、保证数据源质量,尽量不要用coalesce,而是用repartition,这样写出的数据,各文件大小往往是均衡的;

本文是个人的学习笔记,记录了产生数据倾斜的原因及一些常用的解决方案,欢迎大家补充,一起探讨,如果遇到类似问题,可以快速破解

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值