暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spark数据倾斜方案实战(一)

DLab数据实验室 2020-11-17
186

导读:数据倾斜在大数据任务中十分常见,用最通俗易懂的话来说,数据倾斜无非就是大量的相同或取模相同的key被partition分配到一个分区里,造成了'一个人累死,其他人闲死'的情况,这种情况是我们不能接受的,这也违背了并行计算的初衷,首先一个节点要承受着巨大的压力,而其他节点计算完毕后要一直等待这个忙碌的节点,也拖累了整体的计算时间,可以说效率是十分低下的。

本系列文章,模拟数据倾斜场景,探索数据倾斜解决方案。

本文经授权转自公众号DLab数据实验室
作者 | 小舰
出品 | DLab数据实验室(ID:rucdlab)





01

数据准备


1.1准备数据
首先准备一份数据,导入hive表中,类似下表,当然也可以创建一个外表,总之,准备一份足量数据:(以下表只用于描述过程,大家可以根据自己的表做调整)

1.2 新增一个有序的id列


1.3 制造数据倾斜

我的数据总共3亿条左右,但是我用不了这么多,就用了前1.2亿条数据,现在做如下处理:

id为1-1亿的数据不做任何处理;

id为1亿-1.2亿的数据将id进行修改,改为模10余8,也就是,如果以并行度为10的时候,这2000万条数据会倾斜到task8里;




02

数据倾斜调优-提高并发


2.1 进行wordcount任务


2.2 查看任务运行
我们可以看到,task8里面确实比其他task多了2000w条数据,发生了数据倾斜(ps:由于我自己数据的原因,实际数据总条数是120773171,后面的若干条数据可以无视)

2.3 修改并发度


2.4 查看任务运行
发现数据倾斜得到了改善,虽然task数量变多了,但是每个task的数据量变少了,这如果在数据量很大的情况下,是会缓解某个节点的压力的;


03

总结


调整并发度的方式是改善数据倾斜的一个方法,但是优缺点已经很明显了,他会带来task任务数量的增多。而且,试想一些,如果倾斜的key并不是都不相同,而是都相同,这种方法其实并不能起到作用。那应该怎么解决呢?期待下一期吧~


●大数据计算生态之数据计算(二)

●大数据计算生态之数据计算(一)

●大数据计算生态之数据存储

Spark训练营(一)-- 开发环境搭建及wordCount实战

●Spark训练营(二)-- SparkStreaming流计算组件wordCount实战

●Spark训练营(三)-- GraphX图计算组件最短路算法实战

一文纵览大数据计算生态

●原创|带你厘清分布式、数据库的那些一致性

深入浅出大数据组件之Kafka消息队列

一个故事让你理解什么是区块链

实时数据流计算引擎Flink和Spark剖析

自定义Hadoop的输入格式


文章都看完了不点个 吗

欢迎    点赞、在看、分享  三连哦~~

文章转载自DLab数据实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论