美文网首页
数据倾斜(二):数据倾斜原理及解决思路

数据倾斜(二):数据倾斜原理及解决思路

作者: longLiveData | 来源:发表于2020-05-23 11:01 被阅读0次

三、数据倾斜的原理

3.1 数据倾斜产生原因概述

我们以Spark和Hive的使用场景为例。

他们在做数据运算的时候会涉及到,count distinctgroup byjoin on等操作,这些都会触发Shuffle动作。一旦触发Shuffle,所有相同key的值就会被拉到一个或几个Reducer节点上,容易发生单点计算问题,导致数据倾斜。

一般来说,数据倾斜原因有以下几方面:

  • key分布不均匀
  • 业务数据本身的特性
  • 建表时考虑不周
  • 某些SQL语句本身就有数据倾斜

3.2 Shuffle与数据倾斜

Hadoop和Spark在Shuffle过程中产生数据倾斜的原理基本类似即数据不均匀。如下图:

大部分数据倾斜的原理就类似于上图,很明了,因为数据分布不均匀,导致大量的数据分配到了一个节点。

3.3 数据本身与数据倾斜

我们举一个例子,就说数据默认值的设计吧,假设我们有两张表:

user(用户信息表):userid,register_ip

ip(IP表):ip,register_user_cnt

这可能是两个不同的人开发的数据表。如果我们的数据规范不太完善的话,会出现一种情况:

user表中的register_ip字段,如果获取不到这个信息,我们默认为null;

但是在ip表中,我们在统计这个值的时候,为了方便,我们把获取不到ip的用户,统一认为他们的ip为0。

两边其实都没有错的,但是一旦我们做关联了,这个任务会在做关联的阶段,也就是sql的on的阶段卡死。

3.4 业务逻辑与数据倾斜

数据往往和业务是强相关的,业务的场景直接影响到了数据的分布。

再举一个例子,比如就说订单场景吧,我们在某一天在北京和上海两个城市多了强力的推广,结果可能是这两个城市的订单量增长了10000%,其余城市的数据量不变。

然后我们要统计不同城市的订单情况,这样,一做group操作,可能直接就数据倾斜了。

四、 解决数据倾斜思路

4.1 概述

数据倾斜的产生是有一些讨论的,解决它们也是有一些讨论的,本章会先给出几个解决数据倾斜的思路,然后对Hadoop和Spark分别给出一些解决数据倾斜的方案。

注意: 很多数据倾斜的问题,都可以用和平台无关的方式解决,比如更好的数据预处理, 异常值的过滤等,因此笔者认为,解决数据倾斜的重点在于对数据设计和业务的理解,这两个搞清楚了,数据倾斜就解决了大部分了。

4.2 解决思路

解决数据倾斜有这几个思路:

4.2.1 业务逻辑

我们从业务逻辑的层面上来优化数据倾斜,比如上面的两个城市做推广活动导致那两个城市数据量激增的例子,我们可以单独对这两个城市来做count,单独做时可用两次MR,第一次打散计算,第二次再最终聚合计算。完成后和其它城市做整合。

4.2.2 程序层面

比如说在Hive中,经常遇到count(distinct)操作,这样会导致最终只有一个Reduce任务。

我们可以先group by,再在外面包一层count,就可以了。比如计算按用户名去重后的总用户量:

// 优化前 只有一个reduce,先去重再count负担比较大:

select name,count(distinct name)from user;

//优化后

// 设置该任务的每个job的reducer个数为3个。Hive默认-1,自动推断。

set mapred.reduce.tasks=3;

// 启动两个job,一个负责子查询(可以有多个reduce),另一个负责count(1):

select count(1) from (select name from user group by name) tmp;

4.2.3 调参方面

Hadoop和Spark都自带了很多的参数和机制来调节数据倾斜,合理利用它们就能解决大部分问题。

4.3 从业务和数据上解决数据倾斜

很多数据倾斜都是在数据的使用上造成的。我们举几个场景,并分别给出它们的解决方案。

数据分布不均匀:

前面提到的“从数据角度来理解数据倾斜”和“从业务计角度来理解数据倾斜”中的例子,其实都是数据分布不均匀的类型,这种情况和计算平台无关,我们能通过设计的角度尝试解决它。

有损的方法:

  • 找到异常数据,比如ip为0的数据,过滤掉

无损的方法:

  • 对分布不均匀的数据,单独计算
  • 先对key做一层hash,先将数据随机打散让它的并行度变大,再汇集
  • 数据预处理

相关文章

网友评论

      本文标题:数据倾斜(二):数据倾斜原理及解决思路

      本文链接:https://www.haomeiwen.com/subject/xalkahtx.html