数据倾斜的主要问题在于,某个分区数量很巨大,在做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。
 
 
参考(我觉得作者有些神人之感)
 

spark数据倾斜的更多相关文章

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

    原创文章,同步首发自作者个人博客转载请务必在文章开头处注明出处. 摘要 本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partitio ...

  2. Spark 数据倾斜

    Spark 数据倾斜解决方案 2017年03月29日 17:09:58 阅读数:382 现象       当你的应用程序发生以下情况时你该考虑下数据倾斜的问题了: 绝大多数task都可以愉快的执行,总 ...

  3. spark 数据倾斜的一些表现

    spark 数据倾斜的一些表现 https://yq.aliyun.com/articles/62541

  4. Spark数据倾斜解决方案(转)

    本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势  发表于 2017 ...

  5. spark数据倾斜处理

    spark数据倾斜处理 危害: 当出现数据倾斜时,小量任务耗时远高于其它任务,从而使得整体耗时过大,未能充分发挥分布式系统的并行计算优势. 当发生数据倾斜时,部分任务处理的数据量过大,可能造成内存不足 ...

  6. 最详细10招Spark数据倾斜调优

    最详细10招Spark数据倾斜调优 数据量大并不可怕,可怕的是数据倾斜 . 数据倾斜发生的现象 绝大多数 task 执行得都非常快,但个别 task 执行极慢. 数据倾斜发生的原理 在进行 shuff ...

  7. Spark数据倾斜及解决方案

    一.场景 1.绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有100个task,97个task都在1s之内执行完了,但是剩余的task却要一两分钟.这种情况很常见. 2.原本能够正 ...

  8. Spark 数据倾斜调优

    一.what is a shuffle? 1.1 shuffle简介 一个stage执行完后,下一个stage开始执行的每个task会从上一个stage执行的task所在的节点,通过网络传输获取tas ...

  9. Spark数据倾斜解决方案及shuffle原理

    数据倾斜调优与shuffle调优 数据倾斜发生时的现象 1)个别task的执行速度明显慢于绝大多数task(常见情况) 2)spark作业突然报OOM异常(少见情况) 数据倾斜发生的原理 在进行shu ...

随机推荐

  1. Leetcode 784

    //这代码可真丑陋,但我学到了两点1:char和string可以无缝互相转换2:char可以直接加减数字进行转换string不行 class Solution { public: vector< ...

  2. plsql导入excel文件

    plsql导入excel文件   CREATE TABLE     DWSB_GRMX1     (         XH VARCHAR2(40),         SFZH VARCHAR2(40 ...

  3. 063——VUE中vue-router之重定向redirct的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. SQL Server SqlCacheDependency 缓存依赖

     SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持 主要包含以下几步:  1. ...

  5. iis 7 asp.net ajax post 请求字节过大报错问题解决办法

    遇到一个ajax post 提交新闻资讯类的文章,报 {"Message":"There was an error processing the request.&quo ...

  6. 做了一个vue的同步tree 的npm组件包

    前言:因为现成的tree组件没有找到.亦或是其依赖的其他东西太多,不太合适引入我们的项目,所以自己做了一个.大概样式: 在线例子: https://hamupp.github.io/t-vue-tre ...

  7. ios平台cocos2d-x播放音频、视频、音效的Demo(支持网络视频)

    最近由ios应用转做游戏,游戏开始时需要播放一个视频,由于本身cocos2d-x播放视频的相关库,在网上搜到的资料都不是很全,我自己试过在cocos2dx直接调用ios的MediaPlayer来播放, ...

  8. js文件引入

    js文件内引用js文件使用 document.write("<script language='javascript' src='scripts/lang/chs.js'>< ...

  9. OO面向对象多线程编程作业总结

    第五次作业:多线程电梯调度 设计策略 ​ 在本次电梯作业当中,我构造了一个电梯请求队列线程,一个调度器线程,三个电梯线程,一个文件输出线程,还有主线程. ​ 调度器扫描用户的请求队列,将每个队列分配给 ...

  10. 微信小程序插件开发

    小程序插件功能介绍 插件,是可被添加到小程序内直接使用的功能组件.开发者可以像开发小程序一样开发一个插件,供其他小程序使用.同时,小程序开发者可直接在小程序内使用插件,无需重复开发,为用户提供更丰富的 ...