Spark性能调优九之常用算子调优
1.使用mapPartitions算子提高性能
mapPartition的优点:使用普通的map操作,假设一个partition中有1万条数据,那么function就要被执行1万次,但是使用mapPartitions操作之后,function仅仅会被执行一次,显然性能得到了很大的提升,这个就没必要在多废话了。
mapPartition的缺点:使用普通的map操作,调用一次function执行一条数据,不会出现内存不够使用的情况;但是使用mapPartitions操作,很显然,如果数据量太过于大的时候,由于内存有限导致发生OOM,内存溢出。
总结:通过以上以上优缺点的对比,我们可以得出一个结论;就是在数据量不是很大的情况下使用mapPartition操作,性能可以得到一定的提升,在使用mapPartition前,我们需要预先估计一下每个partition的量和每个executor可以被分配到的内存资源。然后尝试去运行程序,如果程序没有问题就大可放心的使用即可,下图是一个实际的应用例子,仅供参考。
2.filter操作之后使用coalesce算子提高性能
经过一次filter操作以后,每个partition的数据量不同程度的变少了,这里就出现了一个问题;由于每个partition的数据量不一样,出现了数据倾斜的问题。比如上图中执行filter之后的第一个partition的数据量还有9000条。
解决方案:针对上述出现的问题,我们可以将filter操作之后的数据进行压缩处理;一方面减少partition的数量,从而减少task的数量;另一方面通过压缩处理之后,尽量让每个partition的数据量差不多,减少数据倾斜情况的出现,从而避免某个task运行速度特别慢。coalesce算子就是针对上述出现的问题的一个解决方案
3.使用foreachPartition算子进行
4.使用repartition解决SparkSQL低并行度的问题
在spark项目中,如果在某些地方使用了SparkSQL,那么使用了SparkSQL的那个stage的并行度就没有办法通过手动设置了,而是由程序自己决定。那么,我们通过什么样的手段来提高这些stage的并行度呢?其实解决这个问题的办法就是使partition的数量增多,从而间接的提高了task的并发度,要提高partition的数量,该怎么做呢?就是使用repartition算子,对SparkSQL查询出来的数据重新进行分区操作,此时可以增加分区的个数。
作者:z小赵
链接:https://www.jianshu.com/p/a1ca2ff91d9c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Spark性能调优九之常用算子调优的更多相关文章
- Spark 系列(四)—— RDD常用算子详解
一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...
- 【大数据】Spark性能优化和故障处理
第一章 Spark 性能调优 1.1 常规性能调优 1.1.1 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的, ...
- spark 性能优化 数据倾斜 故障排除
版本:V2.0 第一章 Spark 性能调优 1.1 常规性能调优 1.1.1 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围 ...
- Spark性能调优-RDD算子调优篇(深度好文,面试常问,建议收藏)
RDD算子调优 不废话,直接进入正题! 1. RDD复用 在对RDD进行算子时,要避免相同的算子和计算逻辑之下对RDD进行重复的计算,如下图所示: 对上图中的RDD计算架构进行修改,得到如下图所示的优 ...
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优
摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...
- Spark性能优化:数据倾斜调优
前言 继<Spark性能优化:开发调优篇>和<Spark性能优化:资源调优篇>讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化 ...
- Spark性能优化--数据倾斜调优与shuffle调优
一.数据倾斜发生的原理 原理:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作.此时如果某个key对应的数据量特 ...
- Spark 性能调优零散知识
1. 如果 Spark 中 CPU 的使用率不够高,可以考虑为当前的程序分配更多的 Executor, 或者增加更多的 Worker 实例来充分的使用多核的潜能 2. 适当设置 Partition 分 ...
- Spark性能优化:开发调优篇
1.前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算 ...
随机推荐
- guitar pro系列教程(十六):Guitar Pro如何编辑琵音
上一章节我们讲了播放没有声音的解决,本章节我们通过图文结合的方式为大家讲解使用Guitar Pro如何来编辑琵音,有兴趣的朋友可以一起来学习哦. 首先我们要先搞明白什么事吉他的琵音. 其实吉他琶音就是 ...
- 「CSP-S 2019」划分
description loj 3212 solution 首先容易想到\(n^3\)DP,即令\(f_{i,j}\)表示前\(i\)个数的划分,其中最后一段是从\(j\)开始时的答案 于是有 \[f ...
- 前端(web)知识-html
前端由三部分组成: HTML(标签)--CSS(美化,修饰)--JS(执行指令) HTML(超文本标记语言,Hypertext Markup Language):是一种用于创建网页的标记语言. 本质上 ...
- Shell编程规范:Don't use ls | grep
目录 一.背景 二.ShellCheck的规范 三.修改写法 1.ls | grep file 2.ls | grep regexp 3.ls | grep -v multi 四.最后 五.参考 一. ...
- php数组学习记录01
array_change_key_case array_change_key_case - 将数组中的所有键名修改为全大写或小写 <?php $input_array = array(" ...
- yii2.0 模态框简单使用
1 <?php foreach($data as $model) :?> 2 3 <!-- 按钮触发模态框 --> 4 <button class="btn b ...
- DjangoForm表单组件
Form组件的介绍: 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验 ...
- 在 Windows 中使用 C# 启动其他程序
因为某些原因需要自动启动一个 Winform 程序,可能是因为第三方资源的原因,使用 System.Diagnostics.Process 无法成功启动 (可以看到界面,但是会报 Unhandled ...
- Cys_Control(二) MButton
一.添加自定义Button 二.Xaml文件自动关联 Custom Control 取名与资源文件相同加.cs文件将自动关联 Themes文件下Generic.xaml引入该控件,用于对外公布样式 & ...
- OpenCV阈值处理函数threshold处理32位彩色图像的案例
☞ ░ 前往老猿Python博文目录 ░ 一.概述 openCV图像的阈值处理又称为二值化,之所以称为二值化,是它可以将一幅图转换为感兴趣的部分(前景)和不感兴趣的部分(背景).转换时,通常将某个值( ...