spark数据倾斜解决方案之原理

Spark 3.0 - AQE浅析 (Adaptive Query Execution) 1、前言 近些年来,在对Spark SQL优化上,CBO是最成功的一个特性之一。 CBO会计算一些和业务数据相关的统计数据,来优化查询,例如行数、去重后的行数、空值、最大最小值等。 Spark根据这些数据,自动选择BHJ或者SMJ,对于多Join场景下的Cost-based Join Reorder(可以参考之前写的这篇文章),来达到优化执行计划的目的。 但是,由于这些统计数据是需要预先处理的,会过时,所以我们在用过时的数据进行判断,在某些情况下反而会变成负面效果,拉低了SQL执行效率。 AQE在执行过程中 阅读详情

定位原因与出现问题的位置:

根据log去定位

出现数据倾斜的原因,基本只可能是因为发生了shuffle操作,在shuffle的过程中,出现了数据倾斜的问题。

因为某个,或者某些key对应的数据,远远的高于其他的key。

1、你在自己的程序里面找找,哪些地方用了会产生shuffle的算子,groupByKey、countByKey、reduceByKey、join

2、看log

log一般会报是在你的哪一行代码,导致了OOM异常;或者呢,看log,看看是执行到了第几个stage!!!

我们这里不会去剖析stage的划分算法,spark代码,是怎么划分成一个一个的stage的。哪一个stage,task特别慢,就能够自己用肉眼去对你的spark代码进行stage的划分,就能够通过stage定位到你的代码,哪里发生了数据倾斜

去找找,代码那个地方,是哪个shuffle操作。

 

1.聚合源数据

第一种做法

咱们现在,做一些聚合的操作,groupByKey、reduceByKey;groupByKey,说白了,就是拿到每个key对应的values;reduceByKey,说白了,就是对每个key对应的values执行一定的计算。

现在这些操作,比如groupByKey和reduceByKey,包括之前说的join。都是在spark作业中执行的。

spark作业的数据来源,通常是哪里呢?90%的情况下,数据来源都是hive表(hdfs,大数据分布式存储系统)。hdfs上存储的大数据。hive表,hive表中的数据,通常是怎么出来的呢?有了spark以后,hive比较适合做什么事情?hive就是适合做离线的,晚上凌晨跑的,ETL(extract transform load,数据的采集、清洗、导入),hive sql,去做这些事情,从而去形成一个完整的hive中的数据仓库;说白了,数据仓库,就是一堆表。

spark作业的源表,hive表,其实通常情况下来说,也是通过某些hive etl生成的。hive etl可能是晚上凌晨在那儿跑。今天跑昨天的数九。

数据倾斜,某个key对应的80万数据,某些key对应几百条,某些key对应几十条;现在,咱们直接在生成hive表的hive etl中,对数据进行聚合。比如按key来分组,将key对应的所有的values,全部用一种特殊的格式,拼接到一个字符串里面去,比如“key=sessionid, value: action_seq=1|user_id=1|search_keyword=火锅|category_id=001;action_seq=2|user_id=1|search_keyword=涮肉|category_id=001”。

对key进行group,在spark中,拿到key=sessionid,values<Iterable>;hive etl中,直接对key进行了聚合。那么也就意味着,每个key就只对应一条数据。在spark中,就不需要再去执行groupByKey+map这种操作了。直接对每个key对应的values字符串,map操作,进行你需要的操作即可。key,values串。

spark中,可能对这个操作,就不需要执行shffule操作了,也就根本不可能导致数据倾斜。

或者是,对每个key在hive etl中进行聚合,对所有values聚合一下,不一定是拼接起来,可能是直接进行计算。reduceByKey,计算函数,应用在hive etl中,每个key的values。

第二种做法

你可能没有办法对每个key,就聚合出来一条数据;

那么也可以做一个妥协;对每个key对应的数据,10万条;有好几个粒度,比如10万条里面包含了几个城市、几天、几个地区的数据,现在放粗粒度;直接就按照城市粒度,做一下聚合,几个城市,几天、几个地区粒度的数据,都给聚合起来。比如说

city_id date area_id

select ... from ... group by city_id

尽量去聚合,减少每个key对应的数量,也许聚合到比较粗的粒度之后,原先有10万数据量的key,现在只有1万数据量。减轻数据倾斜的现象和问题。

 

2.过滤导致倾斜的key

第二个方案:过滤导致倾斜的key

如果你能够接受某些数据,在spark作业中直接就摒弃掉,不使用。比如说,总共有100万个key。只有2个key,是数据量达到10万的。其他所有的key,对应的数量都是几十。

这个时候,你自己可以去取舍,如果业务和需求可以理解和接受的话,在你从hive表查询源数据的时候,直接在sql中用where条件,过滤掉某几个key。

那么这几个原先有大量数据,会导致数据倾斜的key,被过滤掉之后,那么在你的spark作业中,自然就不会发生数据倾斜了。

 

3.提高shuffle操作reduce并行度.

spark.default.parallelism,100

 

4.使用随机key实现双重聚合

1. 第一次聚合的时候,在key中加入随机前缀,将相同可以的数据打散。

 然后第二次聚合的时候,去掉随机前缀

2、使用场景

(1)groupByKey

(2)reduceByKey

 

5.将reduce join转换为map join

reduce join转换为map join,适合在什么样的情况下,可以来使用?

 

如果两个RDD要进行join,其中一个RDD是比较小的。一个RDD是100万数据,一个RDD是1万数据。(一个RDD是1亿数据,一个RDD是100万数据)

其中一个RDD必须是比较小的,broadcast出去那个小RDD的数据以后,就会在每个executor的block manager中都驻留一份。要确保你的内存足够存放那个小RDD中的数据

 

这种方式下,根本不会发生shuffle操作,肯定也不会发生数据倾斜;从根本上杜绝了join操作可能导致的数据倾斜的问题;

 

对于join中有数据倾斜的情况,大家尽量第一时间先考虑这种方式,效果非常好;如果某个RDD比较小的情况下。

不适合的情况:

两个RDD都比较大,那么这个时候,你去将其中一个RDD做成broadcast,就很笨拙了。很可能导致内存不足。最终导致内存溢出,程序挂掉。

而且其中某些key(或者是某个key),还发生了数据倾斜;此时可以采用最后两种方式。

6.sample采样倾斜key单独进行join

 使用数据抽样,判断出 出现数据倾斜的key,将这个key单独放在一个rdd中进行数据处理,

rdd中只有一个key时,默认将数据打散进入不同的task

 

其实关键之处在于,将发生数据倾斜的key,单独拉出来,放到一个RDD中去;就用这个原本会倾斜的key RDD跟其他RDD,单独去join一下,这个时候,key对应的数据,可能就会分散到多个task中去进行join操作。

就不至于说是,这个key跟之前其他的key混合在一个RDD中时,肯定是会导致一个key对应的所有数据,都到一个task中去,就会导致数据倾斜。

这种方案什么时候适合使用?

优先对于join,肯定是希望能够采用上一讲讲的,reduce join转换map join。两个RDD数据都比较大,那么就不要那么搞了。

针对你的RDD的数据,你可以自己把它转换成一个中间表,或者是直接用countByKey()的方式,你可以看一下这个RDD各个key对应的数据量;此时如果你发现整个RDD就一个,或者少数几个key,是对应的数据量特别多;尽量建议,比如就是一个key对应的数据量特别多。

此时可以采用咱们的这种方案,单拉出来那个最多的key;单独进行join,尽可能地将key分散到各个task上去进行join操作。

什么时候不适用呢?

如果一个RDD中,导致数据倾斜的key,特别多;那么此时,最好还是不要这样了;还是使用我们最后一个方案,终极的join

就是说,咱们单拉出来了,一个或者少数几个可能会产生数据倾斜的key,然后还可以进行更加优化的一个操作;

对于那个key,从另外一个要join的表中,也过滤出来一份数据,比如可能就只有一条数据。userid2infoRDD,一个userid key,就对应一条数据。

然后呢,采取对那个只有一条数据的RDD,进行flatMap操作,打上100个随机数,作为前缀,返回100条数据。

单独拉出来的可能产生数据倾斜的RDD,给每一条数据,都打上一个100以内的随机数,作为前缀。

再去进行join,是不是性能就更好了。肯定可以将数据进行打散,去进行join。join完以后,可以执行map操作,去将之前打上的随机数,给去掉,然后再和另外一个普通RDD join以后的结果,进行union操作。

7.使用随机数以及扩容表进行join

1、选择一个RDD,要用flatMap,进行扩容,将每条数据,映射为多条数据,每个映射出来的数据,都带了一个n以内的随机数,通常来说,会选择10。

2、将另外一个RDD,做普通的map映射操作,每条数据,都打上一个10以内的随机数。

3、最后,将两个处理后的RDD,进行join操作。

 

局限性:

1、因为你的两个RDD都很大,所以你没有办法去将某一个RDD扩的特别大,一般咱们就是10倍。

2、如果就是10倍的话,那么数据倾斜问题,的确是只能说是缓解和减轻,不能说彻底解决。

 

1、聚合源数据

2、过滤导致倾斜的key

3、提高shuffle并行度:spark.sql.shuffle.partitions

4、双重group by

5、reduce join转换为map join:spark.sql.autoBroadcastJoinThreshold

6、采样倾斜key并单独进行join

7、随机key与扩容表

 

由于Spark的这种都是基于RDD的特性;哪怕是Spark SQL,原本你是用纯的SQL来实现的;各位想一想,其实你用纯RDD,也能够实现一模一样的功能。

之前使用在Spark Core中的数据倾斜解决方案,全部都可以直接套用在Spark SQL上。

我们要讲一下,之前讲解的方案,如果是用纯的Spark SQL来实现,应该如何来实现。

 

1、聚合源数据:Spark Core和Spark SQL没有任何的区别

2、过滤导致倾斜的key:在sql中用where条件

3、提高shuffle并行度:groupByKey(1000),spark.sql.shuffle.partitions(默认是200)

4、双重group by:改写SQL,两次group by

5、reduce join转换为map join:spark.sql.autoBroadcastJoinThreshold(默认是10485760 )

  你可以自己将表做成RDD,自己手动去实现map join

  Spark SQL内置的map join,默认是如果有一个小表,是在10M以内,默认就会将该表进行broadcast,然后执行map join;调节这个阈值,比如调节到20M、50M、甚至1G。20 971 520

6、采样倾斜key并单独进行join:纯Spark Core的一种方式,sample、filter等算子

7、随机key与扩容表:Spark SQL+Spark Core

 

 

 

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

 

 

 

 

 

 

Spark 自适应查询执行(AQE) AQE 是 Spark SQL 的一种动态优化机制,它的诞生解决了 RBO、CBO,这些启发式、静态优化机制的局限性。想要用好 AQE,我们就要掌握它的特点,以及它支持的三种优化特性的工作原理和使用方法。如果用一句话来概括 AQE 的定义,就是每当 Shuffle Map 阶段执行完毕,它都会结合这个阶段的统计信息,根据既定的规则和策略动态地调整、修正尚未执行的逻辑计划和物理计划,从而完成对原始查询语句的运行时优化。 阅读详情

相关推荐

大数据面试题 —— Spark数据倾斜及其解决方案

有的时候,我们可能会遇到大数据计算中一个最棘手的问题 ——数据倾斜,此时 Spark 作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证 Spark 作业的性能。

hu_wei123的博客 2223

spark优化三部曲(二)--代码优化

spark 在代码层面上的优化

dkk2014的博客 1305

Spark性能调优之数据倾斜调优一站式解决方案原理与实战

第29章Spark性能调优之数据倾斜调优一站式解决方案原理与实战29.1为什么说数据倾斜是分布式大数据系统的性能噩梦?大数据有基本的三个特性:第一个是数据多样化,有着不同类型的数据,其中包括结构化和非结构化数据;第二个就是庞大的数据量;第三就是数据的流动性,从批处理到流处理。一般在处理大数据的时候都会面对这三个特性的问题,而Spark就是基于内存的分布式计算引擎,以处理高效和稳定著称,是目前处理大

大模型与Agent智能体 2833

SPARK调优:AQE特性(含脑图总结)

SparkAQE是spark 3.0引入的一大重要功能,今天我们来聊一聊AQE的实现原理。了解一个功能,先来了解其面临的问题。当涉及到大型集群中的复杂查询性能时,处理的并行度和正确Join策略选择已被证明是影响性能的关键因素。

ALX3li的博客 3206

如何使用windows搭建一个公网ftp/sftp服务器

在有公网ip的情况下,使用windows系统搭建一个ftp/sftp服务器会带来很多的方便,可以实现远程移动端的一键式访问,对于文件的备份、多设备的共享都十分的方便。然而网上许多的教程都是基于windows自带的iis搭建一个局域网ftp服务器,然而在搭建好后,我想要通过端口映射的方式实现在外网访问时,却发现连接不上的问题,感觉可能是因为windows家庭版的原因导致的。因此在查阅很多资料之后终于找到了一个公网ftp/sftp服务器的搭建方式,实测可用。这里把流程记录一下,做一个备忘录,也方便大家搭建。

weixin_43354138的博客 1万+

在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用

VTK+MSVC+Qt Creator + CMake配置

qq_42279379的博客 1000

是时候学习真正的 spark 技术了

 spark sql 可以说是 spark 中的精华部分了,我感觉整体复杂度是 spark streaming 的 5 倍以上,现在 spark 官方主推 structed streaming, spark streaming 维护的也不积极了, 我们基于 spark 来构建大数据计算任务,重心也要向 DataSet 转移,原来基于 RDD 写的代码迁移过来,好处是非常大的,尤其是在性能方面,...

weixin_33963189的博客 253

STM32 上 FreeRTOS 的启动与任务调度详解

4. SysTick定时器:FreeRTOS启动调度器后,会接管STM32的SysTick定时器,用于生成系统节拍,因此不要在HAL库中重复配置SysTick(比如HAL_Init()中已配置,无需再手动调用SysTick_Config()),否则会导致系统节拍异常,任务延迟不准。2. 任务栈大小需按需配置,不是越大越好(浪费RAM),也不能太小(会导致栈溢出),比如简单的传感器读取任务,1024字(4096字节)足够,复杂任务(比如串口接收+数据解析)可调整为2048字。

qq_40170041的博客 867

spark数据倾斜解决方案--原理及现象分析

数据倾斜解决方案 原理及现象分析 最最有含金量,最最有实战性,最最有价值,最最有意义的这么个部分 1、大数据开发流程(需求分析。。。性能调优) 2、用户行为分析的业务(聚合统计、随机抽取、topn、排序) 3、技术点:大数据项目模块的技术架构、spark core各种算子、自定义Accumulator、随机抽取算法、 分组取topn、二次排序 4、大数据项目中的性能调优

谭谦的博客 1709

RV1126B RV1126B-P 瑞芯微 高性能视觉处理器SoC 芯片

它集成了大量算法加速器,如 HDR、3A、LSC、3DNR、2DNR、锐化、去雾、鱼眼校正、伽马校正、特征点检测等。此外,还配备了一款最多8兆像素的 AI-ISP,作为对传统ISP 的补充,以提供卓越的空间去噪性能和增强的图像增强效果。除了先前的高性能多媒体区块外,RV1126B还包含丰富的音频、内存和其他外围接口,如I2C、SPI、PWM等。借助这-特性,来自相机的视频可以以高分辨率进行编码,并存储在本地内存中,同时还能将另-段较低分辨率的视频传输到云存储。

szhorsway的博客 1860

WRF和WPS模型在Ubuntu系统上的安装与常见问题解决指南

本文详细介绍了在Ubuntu系统上安装WRF和WPS模型的完整教程,涵盖系统环境配置、依赖库安装、源代码编译以及常见问题的解决方案。重点解决了WPS编译中intmath.f文件的修改、环境变量设置和编译器兼容性等关键难点,帮助用户高效部署气象研究与预报模型。

weixin_29213525的博客 382

Spark数据倾斜实战:从原理到解决方案的深度剖析

在分布式计算中,数据倾斜是一个普遍存在的性能瓶颈问题,其本质是数据在分区间的分布严重不均。这种现象在需要进行Shuffle操作的场景下尤为突出,例如聚合(GroupByKey、ReduceByKey)和连接(Join)操作。从原理上讲,Shuffle过程决定了数据如何在节点间重新分配,当少数Key承载了绝大部分数据时,对应的Task就会成为整个作业的短板,导致资源闲置、任务延迟甚至内存溢出(OOM)。其技术价值在于,有效解决数据倾斜能极大提升集群资源利用率和作业稳定性,是保障大规模数据处理流水线高效运行的关

weixin_28267011的博客 260

手把手教你用VS Code + Codex在WSL中高效编程(避坑指南)

本文提供了一份详细的避坑指南,教你如何在WSL环境中高效配置和使用VS Code与OpenAI Codex。文章核心在于解决WSL内Codex扩展的OAuth登录失败问题,推荐将扩展安装在Windows本地,并通过UNC路径直接访问WSL文件系统,从而实现AI辅助编程与Linux开发环境的无缝结合,提升编码效率。

weixin_28677451的博客 1063

Spark数据倾斜诊断与7种解决方案:从Shuffle原理到AQE实战

在大数据处理中,Spark作业的性能瓶颈往往并非源于资源不足,而是数据分布不均引发的数据倾斜问题。当Shuffle阶段按Key分区后,少数分区承接海量数据,导致Task Duration、Shuffle Read Size和GC Time等指标出现极端分化,作业运行缓慢甚至OOM。理解Hash Partitioner与Shuffle机制是定位问题的关键,而解决倾斜则需要从诊断出发,结合聚合、Join等不同场景选择合适策略。本文系统梳理了过滤脏数据、广播小表、加盐两阶段聚合、Join膨胀、自定义分区、AQE自

weixin_32597009的博客 253

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 801

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1149

Spark调优-数据倾斜解决方案 原理及现象分析

数据倾斜解决方案 原理及现象分析 项目,第一个模块,用户访问session分析模块 1、大数据开发流程(需求分析。。。性能调优) 2、用户行为分析的业务(聚合统计、随机抽取、topn、排序) 3、技术点:大数据项目模块的技术架构、spark core各种算子、自定义Accumulator、随机抽取算法、 分组取topn、二次排序 4、大数据项目中的性能调优和troubl

u013939918的博客 731

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spark项目实战-数据倾斜解决方案之原理以及现象分析

一、数据倾斜的原理 在执行shuffle操作的时候,大家都知道是按照key来进行values的数据的输出、拉取和聚合的。同一个key的values,一定是分配到一个reduce task进行处理的。假设多个key对应的values,总共是90万。但是问题是可能某个key对应了88万数据,key-88万values,分配到一个task上去面去执行。另外两个task,可能各分配到了1万数据,可能是数...

上海一九四三 483

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spark系列文章二——Spark数据倾斜及调优

摘要 相信大家在使用Spark进行大数据计算的时候,都遇到过一个问题——数据倾斜。当发生数据倾斜的时候,spark程序就会发生运行效率低下,甚至发生内存溢出异常,导致任务失败。为了防止这种情况,开发人员就需要使用技术手段进行数据调优,保证Spark运行效率。 本文将从spark数据倾斜的现象、原理、倾斜代码定位及调优四个方面来详细描述Spark数据倾斜及调优,希望小伙伴们看完本文之后会有所收获。 一、数据倾斜现象。 数据倾斜的体现主要表现在以下两方面。 1、任务中极大...

myc1234567的博客 396

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

82.Spark大型电商项目-用户访问session分析-数据倾斜解决方案之原理以及现象分析

目录 数据倾斜的原理 发生数据倾斜以后的现象 定位原因与出现问题的位置 本篇文章记录用户访问session分析-数据倾斜解决方案之原理以及现象分析。 数据倾斜的原理 在执行shuffle操作的时候,大家都知道,我们之前讲解过shuffle的原理。是按照key,来进行values的数据的输出、拉取和聚合的。 同一个key的values,一定是分配到一个reduce task进行处理...

someby的博客 301

spark 大型项目实战(五十二):数据倾斜解决方案之原理以及现象分析

数据倾斜 在任何大数据类的项目中,都是最棘手的性能问题,最能体现人的技术能力,最能体现RD(Research Developer,研发工程师)的技术水平。 数据倾斜 = 性能杀手 如果没有丰富的经验,或者没有受过专业的技术培训,是很难解决数据倾斜问题的 在执行shuffle操作的时候,大家都知道,我们之前讲解过shuffle的原理。是按照key,来进行values的数据的输出、拉取和聚...

u012957549的博客 3164

spark数据倾斜的解决方案

数据倾斜调优 简述 有时候,大家可能会遇到大数据开发过程中一个比较棘手的问题,那就是数据倾斜,此时Spark作业的性能会比预期差很多,数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。 数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三...

我丶怀念的的博客 729

Spark数据倾斜七种解决方案:从原理到生产落地

数据倾斜是分布式计算中典型的负载不均现象,源于Shuffle阶段Key分布与哈希分区机制的结构性错配。其本质是分布式哈希表(DHT)在真实数据分布下失效的表现,导致少数Task承载过高计算与内存压力,引发OOM、长尾延迟和资源浪费。解决该问题需兼顾语义正确性、性能开销与工程可维护性,常见手段包括加盐(Salting)、两阶段聚合、过滤隔离、扩展Join Key、Broadcast Join、动态分区调整及自定义Partitioner。本文聚焦Spark场景,结合熵值分析、运行时监控与业务根因归因,系统阐述各

weixin_32285357的博客 251

Spark数据倾斜的完美解决

数据倾斜解决方案数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙。性能调优中最有效最直接最简单的方式就是加资源加并行度,并注意RDD架构(复用同一个RDD,加上cache缓存)。相对于前面,shuffle、jvm等是次要的。6.1、原理以及现象分析6.1.1、数据倾斜怎么出现的在执行shuffle操作的时候,是按照key,来进行values的数据的输出、拉取和聚合的。同一个key的valu...

qq_38247150的博客 1万+

Spark之数据倾斜调优

数据本身问题(1)、key本身分布不均衡(包括大量的key为空)(2)、key的设置不合理spark使用不当的问题(1)、shuffle时的并发度不够(2)、计算方式有误数据倾斜调优的场景和解决方式,也适用于SparkStremaing中去Shuffle调优面试题:你在工作当中遇到哪些数据倾斜的场景,你是如何处理的?你在工作当中调过优吗?怎么处理的?效果怎么样?Spark Shuffle的发展过程。

我的博客 1336

Spark数据倾斜定位及解决方案

因为自己编写的代码的bug,以及偶然出现的数据异常,也可能会导致内存溢出。此外,倒数第一列显示了每个task处理的数据量,明显可以看到,运行时间特别短的task只需要处理几百KB的数据即可,而运行时间特别长的task需要处理几千KB的数据,处理的数据量差了10倍。:该方案通常无法彻底解决数据倾斜,因为如果出现一些极端情况,比如某个key对应的数据量有100万,那么无论你的task数量增加到多少,这个对应着100万数据的key肯定还是会分配到一个task中去处理,因此注定还是会发生数据倾斜的。

m0_48457267的博客 2646
上一篇: spark性能优化
下一篇: oracle SQL性能优化小技巧
FMSCOTT
博客等级 码龄11年 5粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值