spark性能优化

spark性能优化 High Performance Spark 学习《 High Performance Spark 》持续更新中 一起学习《High Performance Spark 》 本人想在spark性能优化上深耕一下,最近在学习《High Performance Spark 》这本书,感觉收获挺大,所以和大家分享一下。下面是对书中的内容的简单记录和一些学习理解。 Chapter 2. How Spark Works 1、并行计算 Spark与分布式存储系统(例如HDFS、Cassandra或S3)和集群管理器一起使用,集群管理器用于存储用Spark处... 阅读详情

1.分配资源,并行度,rdd架构与缓存

2.shuffle调优

3.spark算子调优

4.jvm调优,广播大变量。。。

 

 

 

 

1:分配更多的资源

  分配那些资源?

 excutor ,cpu  per ececuter,memory  per  executer

 在哪里分配资源?

 在提交spark提交作业的脚步中,提交参数

 调节到多大算是最大呢?

为什么调节了资源之后,性能可以提升?

 

2:调节并行度

并行度设置成CPU数据的2-3倍,通过新建spark上下文设置参数

如何设置一个Spark Application的并行度?

spark.default.parallelism

SparkConf conf = new SparkConf()

  .set("spark.default.parallelism", "500")

 

3:重构RDD已经RDD持久化

3.1.rdd架构重构与优化

  尽量去复用rdd,差不多的rdd,可以抽取成一个共同的rdd,供后面的rdd计算时,反复的使用

3.2.公共的rdd 一定要持久化

3.3.持久化是可以序列化的 (正常数据持久化,可能导致内存过大)

内存不够时,首先可以序列化后存在内存中-获取数据时需要反序列化

OOM  内存溢出

优先  内存

      内存+序列化

其次  考虑 内存+磁盘的方式

最次的  是  内存+磁盘 +序列化

 

3.4.为了数据的可靠性  可以是用双副本机制。

把持久化的每个副本单元 存在其他节点,一个副本丢失,不需要重新计算

资源很充足

 

4:广播大变量

5.实际羡慕中使用kryo序列化

SparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

 

首先第一步,在SparkConf中设置一个属性,spark.serializer,org.apache.spark.serializer.KryoSerializer类;

 

Kryo之所以没有被作为默认的序列化类库的原因,就要出现了:主要是因为Kryo要求,如果要达到它的最佳性能的话,那么就一定要注册你自定义的类(比如,你的算子函数中使用到了外部自定义类型的对象变量,这时,就要求必须注册你的类,否则Kryo达不到最佳性能)。

 

第二步,注册你使用到的,需要通过Kryo序列化的,一些自定义类,SparkConf.registerKryoClasses()

 

项目中的使用:

.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

.registerKryoClasses(new Class[]{CategorySortKey.class})

 

 

 

6.在实际项目中使用fastutil优化数据格式

 

7.在实际项目中调节数据本地化等待时长.

数据本地化级别

PROCESS_LOCAL:进程本地化,代码和数据在同一个进程中,也就是在同一个executor中;计算数据的task由executor执行,数据在executor的BlockManager中;性能最好

NODE_LOCAL:节点本地化,代码和数据在同一个节点中;比如说,数据作为一个HDFS block块,就在节点上,而task在节点上某个executor中运行;或者是,数据和task在一个节点上的不同executor中;数据需要在进程间进行传输

NO_PREF:对于task来说,数据从哪里获取都一样,没有好坏之分

RACK_LOCAL:机架本地化,数据和task在一个机架的两个节点上;数据需要通过网络在节点之间进行传输

ANY:数据和task可能在集群中的任何地方,而且不在一个机架中,性能最差

 

spark.locality.wait,默认是3s

 

 

8.JVM调优之原理概述以及降低cache操作的内存占比

spark.storage.memoryFraction,0.6 -> 0.5 -> 0.4 -> 0.2

 

 

 

9.用户访问session分析JVM调优之调节executor堆外内存与连接等待时长

 

调节executor堆外内存

--conf spark.yarn.executor.memoryOverhead=2048

spark-submit脚本里面,去用--conf的方式,去添加配置;一定要注意

 

连接等待时长

--conf spark.core.connection.ack.wait.timeout=300

 

 

10.Shuffle调优之合并map端输出文件

new SparkConf().set("spark.shuffle.consolidateFiles", "true")

开启shuffle map端输出文件合并的机制;默认情况下,是不开启的,就是会发生如上所述的大量map端输出文件的操作,严重影响性能。

 

 

11.Shuffle调优之调节map端内存缓冲与reduce端内存占比

调优:

 

调节map task内存缓冲:spark.shuffle.file.buffer,默认32k(spark 1.3.x不是这个参数,后面还有一个后缀,kb;spark 1.5.x以后,变了,就是现在这个参数)

调节reduce端聚合内存占比:spark.shuffle.memoryFraction,0.2

 

在实际生产环境中,我们在什么时候来调节两个参数?

看Spark UI,如果你的公司是决定采用standalone模式,那么狠简单,你的spark跑起来,会显示一个Spark UI的地址,4040的端口,进去看,依次点击进去,可以看到,你的每个stage的详情,有哪些executor,有哪些task,每个task的shuffle write和shuffle read的量,shuffle的磁盘和内存,读写的数据量;如果是用的yarn模式来提交,课程最前面,从yarn的界面进去,点击对应的application,进入Spark UI,查看详情。

 

如果发现shuffle 磁盘的write和read,很大。这个时候,就意味着最好调节一些shuffle的参数。进行调优。首先当然是考虑开启map端输出文件合并机制。

 

调节上面说的那两个参数。调节的时候的原则。spark.shuffle.file.buffer,每次扩大一倍,然后看看效果,64,128;spark.shuffle.memoryFraction,每次提高0.1,看看效果。

 

不能调节的太大,太大了以后过犹不及,因为内存资源是有限的,你这里调节的太大了,其他环节的内存使用就会有问题了。

 

调节了以后,效果?map task内存缓冲变大了,减少spill到磁盘文件的次数;reduce端聚合内存变大了,减少spill到磁盘的次数,而且减少了后面聚合读取磁盘文件的数量。

 

12.Shuffle调优之HashShuffleManager与SortShuffleManager

spark.shuffle.manager:hash、sort、tungsten-sort(自己实现内存管理)

spark.shuffle.sort.bypassMergeThreshold:200

 

 

大家理解的更加深入了。hash、sort、tungsten-sort。如何来选择?

 

1、需不需要数据默认就让spark给你进行排序?就好像mapreduce,默认就是有按照key的排序。如果不需要的话,其实还是建议搭建就使用最基本的HashShuffleManager,因为最开始就是考虑的是不排序,换取高性能;

 

2、什么时候需要用sort shuffle manager?如果你需要你的那些数据按key排序了,那么就选择这种吧,而且要注意,reduce task的数量应该是超过200的,这样sort、merge(多个文件合并成一个)的机制,才能生效把。但是这里要注意,你一定要自己考量一下,有没有必要在shuffle的过程中,就做这个事情,毕竟对性能是有影响的。

 

3、如果你不需要排序,而且你希望你的每个task输出的文件最终是会合并成一份的,你自己认为可以减少性能开销;可以去调节bypassMergeThreshold这个阈值,比如你的reduce task数量是500,默认阈值是200,所以默认还是会进行sort和直接merge的;可以将阈值调节成550,不会进行sort,按照hash的做法,每个reduce task创建一份输出文件,最后合并成一份文件。(一定要提醒大家,这个参数,其实我们通常不会在生产环境里去使用,也没有经过验证说,这样的方式,到底有多少性能的提升)

 

4、如果你想选用sort based shuffle manager,而且你们公司的spark版本比较高,是1.5.x版本的,那么可以考虑去尝试使用tungsten-sort shuffle manager。看看性能的提升与稳定性怎么样。

 

总结:

1、在生产环境中,不建议大家贸然使用第三点和第四点:

2、如果你不想要你的数据在shuffle时排序,那么就自己设置一下,用hash shuffle manager。

3、如果你的确是需要你的数据在shuffle时进行排序的,那么就默认不用动,默认就是sort shuffle manager;或者是什么?如果你压根儿不care是否排序这个事儿,那么就默认让他就是sort的。调节一些其他的参数(consolidation机制)。(80%,都是用这种)

 

spark.shuffle.manager:hash、sort、tungsten-sort

 

new SparkConf().set("spark.shuffle.manager", "hash")

new SparkConf().set("spark.shuffle.manager", "tungsten-sort")

 

// 默认就是,new SparkConf().set("spark.shuffle.manager", "sort")

new SparkConf().set("spark.shuffle.sort.bypassMergeThreshold", "550")

 

 

13.算子调优之filter过后使用coalesce减少分区数量

 

14.算子调优之使用foreachPartition优化写数据库性能

正式生产环境中一般都是是foreachPartition进行数据的的写操作,一次性操作一个分片的数据

但是一个分片的数据量特别大时,可能会导致OOM

 

 

15.算子调优之使用repartition解决Spark SQL低并行度的性能问题

spark SQL 并不能设置并行度,通过repartition进行重新分区

 

通常情况下 设置 spark.default.parallelism  设置并行度

 

16.算子调优之reduceByKey本地聚合 的特性

 

 

 

 

 

 

 

Oracle OCP 19c 认证1Z0-083考试大纲(Oracle官方版) Oracle Database: Managing Multitenant Architecture Ed 1 course 阅读详情

相关推荐

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2133

Spark性能优化

Spark性能优化 最新文章访问我的博客:http://bryce-loski.github.io/ 在大数据处理过程中,涉及到最多的就是性能优化。这个也是大数据场景的重点与难点。 本文将从常见的几个方面与实现spark的优化 常规性能调优 1.1 常规性能调优一:最优资源配置   Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。    资源的分配在使用脚本提交Spark任务时进行指

Bryce_Loski的博客 1674

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1008

Spark性能调优指南来了!

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(,简称RDD)的API定义。Spark SQL:是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL或者版本的HQL来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。本文首先讲解了Spark的底层的Shuffle。

笑看风云路的博客 4105

C# 实现文件和字符串的AES加密解密

C# 实现文件和字符串的AES128加密解密

m0_72044573的博客 5935

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

Spark常见优化原则

一、参数调优: 提交任务参数请参考这篇文章(包括优化建议):http://www.gaohongwei.cn/551/ spark任务:编写脚本或代码里设置参数 • 第一块:让task执行代码时,默认占executor总内存的20%。 • 第二块:task通过shuffle过程拉取上一个stage的task的输出后,进行聚合等操作时默认...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1682

禾赛PandarXT-16/阿努比LpmsIG1运行lio-sam

课题是多传感器融合,将GNSS/INS/LIDAR做融合定位导航,故考虑使用lio-sam开源算法,在此记录一下我在适配传感器数据时遇到的一些问题;

qq_44705939的博客 2963

Spark优化大全总结实操,含数据格式/数据倾斜/算子优化/Join优化/参数调优等

Spark优化总结大全,含数据格式/数据倾斜/算子优化/Join优化/参数调优等,spark任务重RDD持久化数据在Executor内存中占用比例为60%,当数据量较大内存放不下时,就会溢写到磁盘,如果spark任务中有较多需持久化的RDD,建议调大此参,避免内存不足时数据只能写磁盘的情况.若没有或者发现作业频繁gc或者运行较慢时,则可适当调小此比例。如果觉得数据发生了倾斜(数据分布不均,很多数据都打到了一个分区中),建议在Join之前先进行Repartition操作,增加分区数,这样可以将分区内的数据打散

qq_39285950的博客 4084

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

[VCS]VCS checkpoint简介以及其在SoC验证加速中的作用

VCS checkpoint是Synopsys VCS提供的快照/恢复机制,可显著加速SoC验证。其核心是在仿真关键节点(如完成初始化后)保存系统状态,后续测试可直接从该点恢复,避免重复执行冗长的初始化阶段(如boot、DDR训练等)。该技术特别适用于多测试用例共享同一初始状态的场景,通过分离初始化与功能验证流程,可提升回归效率3-5倍。需注意处理DPI-C状态同步、版本管理及存储优化等问题,结合UVM和自动化脚本可实现更高效的验证流程。典型应用可节省数百万cycle的重复仿真时间。

元直的博客 776

Spark 常规性能调优

1. 常规性能调优 一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。--driver-memory 配置Driver内存(影响不大) 内存大小影响不大 资源的分配在使用脚本提交Spark任务时进行指定,标准的Spark任务提交脚本...

weixin_30681615的博客 630

QGC4.0.11界面修改

QGC4.0.11。

超维空间科技的博客 2467

Spark调优 | Spark性能优化实战手册

本文分为四个部分,基本涵盖了所有Spark优化的点,面试和实际工作中必备。《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优篇》《Spa...

Focus on Lakehouse 3118

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spark性能优化之一

Spark性能优化

sflotus的专栏 511

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spark 性能优化之Map-Join

Spark 性能优化之Map-Join 文章目录Spark 性能优化之Map-Join1. Spark Stage的划分1.1 RDD的依赖关系1.1.1 窄依赖的实现1.1.2 宽依赖的实现1.2 Lineage(血统)与DAG中Stage的划分1.2.1 Lineage1.2.2 Stage的划分2. Reduce-Join和Map-Join2.1 Reduce-Join 的原理2.2 Map-Join 的原理3. Map-Join的手动实现 1. Spark Stage的划分 1.1 RDD的依赖关系

洪城浪子的博客 5738

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

超全spark性能优化总结

Spark是大数据分析的利器,在工作中用到spark的地方也比较多,这篇总结是希望能将自己使用spark的一些调优经验分享出来。 一、常用参数说明 --driver-memory 4g : driver内存大小,一般没有广播变量(broadcast)时,设置4g足够,如果有广播变量,视情况而定,可设置6G,8G,12G等均可 --executor-memory 4g : 每个executor的内存...

journey_fan的专栏 2091

【计算引擎】spark笔记-spark性能优化

文章目录1. spark基本概念2. 数据倾斜优化2.1 数据倾斜是什么?2.2 如何定位数据倾斜?2.3 数据倾斜的几种典型情况2.4 缓解数据倾斜-避免数据源的数据倾斜2.5 缓解数据倾斜-调整并行度2.6 缓解数据倾斜-自定义Partitioner2.7 缓解数据倾斜- Reduce side Join转变为Map side Join2.8 缓解数据倾斜-两阶段聚合(局部聚合+全局聚合)2....

孟知之的搬砖填坑历险记 960
上一篇: spark-troubleshooting
下一篇: spark数据倾斜解决方案之原理
FMSCOTT
博客等级 码龄11年 5粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值