spark数据倾斜

数据倾斜的主要问题在于,某个分区数量很巨大,在做map运算的时候,将会发生别的分区task很快计算完成,但是某几个分区task的计算成为了系统的瓶颈,明显超过其他分区时间;

1.方案:Kafka的随机主题

如果kafka的topic和分区关联,而且kafka是专用的,那么其实kafka如果能够和随机主机,那么数据将会随机打入到各个分区中,这样可以解决数据热点问题;

2. 方案:将不可切割的文件转换为可切割文件

对于gzip这类文件最好转化为可切割文件;因为对于不可切割的压缩文件,将会作为一个单独分区来处理,比如8.5G压缩到了23.5M,但是因为数据量巨大,这个gzip文件所在的分区将会成为性能瓶颈。

3. 方案:调整并行度

大量的key分配到同一个分区/Task里面;spark在数据分区的时候,默认使用的HashPartition;通过增加/减少并行度,来对于热点key进行重新分区;

另外一种方式类似:自定义分区函数,将HashPartition中集中分配的key,通过自定义的方式进行分散处理;

4. 方案:Reduce侧的Join通过BroadCast转换为Map侧的Join

select... from t1 join t2 on t1.aa=t2.bb

这个sql语句spark正常的执行方式是t1表中map,t2表中数据map(t2表数据量表较小),然后reduce到一起进行关联操作;因为t1表返回的粒度和t2表返回数据粒度不一样,所以导致reduce侧分区可能出现倾斜;

对于这场场景处理,通常都是将t2表中的数据通过broadcast的方式广播到各个分区中;这样各个分区在map阶段就可以进行数据关联,避免了shuffle到reduce阶段再进行关联。

5. 方案:拆分热点key

如果倾斜发生在一张表A中(另外一张表数据B比较均匀),而且数据热点集中在少数几个key;

1. 把大表中这几个key单独拎出来:skewRDD,在拎出来的时候,对于key添加随机数,保证对这些(添加了前缀的)key进行合理分区;然后skewRDD和B表进行join;skewJoinedRDD;

2. 过滤A表中那几个key,形成unskewRDD,和B表做join,形成unskewJoinedRDD;

3. skewJoinedRDD和unskewJoinedRDD做union(联合);

6. 方案:大表key全部进行添加随机数,小表扩大N倍

如果热点key太多了,那么就需要:

1. 把大表A所有的key都添加随机值,这样,对于大表数据进行数据重新分区,比如48取随机数,填充到key的前面,通过“,”分割;

2. 对于小表B里面所有的数据都扩充N倍,比如数据1,现在有48条数据1,48条记录value都是一样的,但是key为“1,key”,“2,key“... "48, key"

3. 然后A,B做join,这样小表B中必然有一条会和A表关联上(其余47条记录成为冗余记录)

4. A,Bjoin结果做mapToPair,去掉之前前缀,结果集OK;

看了这么多的方案,你会发现其实本质就是发现了数据倾斜,考虑怎么将热点数据进行分散(重新分区);这里可以考虑kafka的随机分区;调整并行度;把倾斜的key对应数据单独拎出来进行分区,最后和不包含这些key的key做union;全体key添加随机数,导致全体数据重新分区,再对具有N倍冗余数据的小表进行join获取数据;

比较特殊两个方案一个是对于不可分割的数据的处理,尽量转化为可分割数据(比如压缩文件搞成非压缩文件);另外一个是将join的表(小表)通过broadcast将数据进行广播,reduce阶段的join转化为map阶段的join。

参考(我觉得作者有些神人之感)

http://www.jasongj.com/spark/skew/

原文地址:https://www.cnblogs.com/xiashiwendao/p/9278778.html

时间: 2024-10-08 04:47:47

spark数据倾斜的相关文章

Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势

原创文章,转载请务必将下面这段话置于文章开头处.本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ 摘要 本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partitioner,使用Map侧Join代替Reduce侧Join,给倾斜Key加上随机前缀等. 为何要处理数据倾斜(Data Skew) 什么是数据倾斜 对Spark/Hadoop这样的大数据系统来讲,数据量大并不可怕,可怕的是

Spark 数据倾斜及其解决方案

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/lqMu6lfk-Ny1ZHYruEeBdA 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班).先后从事过电子商务.开放平台.移动浏览器.推荐广告和大数据.人工智能等相关开发和架构.目前在vivo智能平台中心从事 AI中台建设以及广告推荐业务.擅长各种业务形态的业务架构.平台化以及各种业务解决方案. 本文从数据倾斜的危害.现象.原因等方面,由浅入深阐述Spark数据倾斜及其解决方案.

Spark性能调优之道——解决Spark数据倾斜(Data Skew)的N种姿势

原文:http://blog.csdn.net/tanglizhe1105/article/details/51050974 背景 很多使用Spark的朋友很想知道rdd里的元素是怎么存储的,它们占用多少存储空间?本次我们将以实验的方式进行测试,展示rdd存储开销性能. 关于rdd的元素怎么存储,Spark里面实现了好几种不同类型的rdd,如最常见的MapPartitionsRDD,它处理map,filter,mapPartition等不引起shuffle的算子:再如ShuffledRDD它由s

spark性能优化:数据倾斜调优

调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 1.绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时.这种情况很常见. 2.原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常

数据倾斜是多么痛?spark作业调优秘籍

目录视图 摘要视图 订阅 [观点]物联网与大数据将助推工业应用的崛起,你认同么?      CSDN日报20170703--<从高考到程序员--我一直在寻找答案>      [直播]探究Linux的总线.设备.驱动模型! 数据倾斜是多么痛?spark作业调优秘籍 2017-06-27 13:28 39人阅读 评论(0) 收藏 举报  分类: Spark(124)  原文:https://mp.weixin.qq.com/s?__biz=MzI5OTAwMTM1MQ==&mid=2456

Spark性能优化(2)——广播变量、本地缓存目录、RDD操作、数据倾斜

广播变量 背景 一般Task大小超过10K时(Spark官方建议是20K),需要考虑使用广播变量进行优化.大表小表Join,小表使用广播的方式,减少Join操作. 参考:Spark广播变量与累加器 Local Dir 背景 shuffle过程中,临时数据需要写入本地磁盘.本地磁盘的临时目录通过参数spark.local.dir配置. 性能优化点 spark.local.dir支持配置多个目录.配置spark.local.dir有多个目录,每个目录对应不同的磁盘,这样可以提升IO效率.另外,可以采

Spark性能调优之解决数据倾斜

Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    ? 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hive表中的数据本身很不均匀(比如某个 key对应了100万数据,其他key才对应了10条数据),而且业务场景需要频繁使用Spark对Hive表 执行某个分析操作,那么比较适合使用这种技术方案.    ? 方案实现思路:此时可以评估一下,是否可以通过Hive来进行数据预处理(即通过Hive ETL预先对

解决spark中遇到的数据倾斜问题

一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey,groupByKey,join等操作. 数据问题 key本身分布不均匀(包括大量的key为空) key的设置不合理 spark使用问题 shuffle时的并发度不够 计算方式有误 三. 数据倾斜的后果 spark中一个stage的执行时间受限于最后那个执行完的task,因此运行缓慢的任务会拖累整个

Spark学习之路 (九)SparkCore的调优之数据倾斜调优

摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要