4000-9696-28

数据倾斜你被问到过吗?

2023年01月12日 11:10供稿中心:北大青鸟总部

摘要: 数据倾斜是真实工作中常遇见的一个问题,也是大数据面试中经常遇到的问题,了解数据倾斜以及它产生的原因才能更好的对症下药去解决。

前段时间,小编的一些从事大数据开发的朋友在市场寒流和年终评比上败下阵来。不过痛定思痛,为了来年招聘黄金季做准备,小编的朋友们都选择在这时去招聘市场先试试水,好针对性的准备面试。通过与他们的聊天中,小编发现,他们在面试过程中几乎都被问到了同一个问题或关键词,那就是“数据倾斜”。

小编本着独乐乐不如众乐乐的原则,为了同学们能够在面试场上取得好成绩,给同学们押一次题,小编今天就来好好讲讲前几天补课学习完的“数据倾斜”到底是怎么回事儿。

什么是数据倾斜?

数据倾斜,指的是并行处理的过程中,某些分区或节点处理的数据,显著高于其他分区或节点,导致这部分的数据处理任务比其他任务要大很多,从而成为这个阶段执行最慢的部分,进而成为整个作业执行的瓶颈,甚至直接导致作业失败。

通俗的说,就是大量的数据计算任务被分配到了一个节点上,造成“一个人说忙死了,其他人说闲着没事儿干”的场景。

数据倾斜是如何表现出来的?

当我们看任务进度长时间维持在99%,有一个或者几个reduce节点运行很慢,导致整个作业的处理时间很长,reduce进度停留在某个值,有时百分比甚至会回退,最终导致作业失败的这种情况,大概率是出现了数据倾斜。

数据倾斜产生的原因?

俗话说,解铃还须系铃人,我们首先需要知道数据倾斜是如何产生的,才好最终对症下药,最终解决这个棘手问题。

产生数据倾斜的原因较多较杂,比较常见的有shuffle过程导致的,还有过滤时导致的。例如在处理数据时,当数据某一个key值过多时,在进行join或groupby操作时容易导致数据倾斜。还如,有些场景下,数据原本是均衡的,但是由于进行了一系列的数据剔除操作,可能在过滤掉大量数据后,造成数据的倾斜。

数据倾斜发生后如何优化解决?

拿Hive优化数据倾斜来说,在不同的情形下可以有不同的解决办法。

1. 通常情况下产生数据倾斜可以考虑的方法

  • 了解数据分布,寻找分布更加均匀的字段作为key值

  • 增加节点JVM内存,起码遇到数据倾斜时,不至于程序崩溃

  • 对key值“加盐”,有一种方案是在map阶段时给key加上一个随机数,有了随机数的key就不会被大量的分配到同一节点(小几率),待到reduce后再把随机数去掉即可。

2. 当使用groupby产生数据倾斜时

  • 设置map端聚合,hive.map.aggr=true。它减轻了map端向reduce端发送的数据量,也就是减轻了数据I/O

  • 设置负载均衡,hive.groupby.skewindata=true,它会让整个MR任务变成两个任务,第一个任务中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的。第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中,最后完成最终的聚合操作。

3. 当使用Join产生数据倾斜时

  • 选用join key分布最均匀的表作为驱动表

  • 小表join大表时,使用map join操作


总结一下,数据倾斜是真实工作中常遇见的一个问题,也是大数据面试中经常遇到的问题,了解数据倾斜以及它产生的原因才能更好的对症下药去解决。在实际工作中往往需要对所遇见的场景进行具体的分析,找出解决对策。以上介绍的解决对策足以解决80%Hive数据倾斜的问题啦。


标签:
关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
学习客户端下载
青鸟优师
青鸟云课堂
微信 公众号 咨询 顶部 首页
官方新版意见收集

*

官方新版意见收集

提交成功,感谢您的反馈。

我们会认真阅读和考虑每个用户的反馈。