spark性能优化

理解SparkSession SparkSession是DataSet和DataFrame编写Spark程序的入口 SparkSession的功能: 创建DataFrame 以关系型数据库中表的形式生成DataFrame,之后便可以执行SQL语句,适合小数据量的操作 读取.parquet格式的文件,得到DataFrame 创建SparkSession对象: >>> spark = SparkSession.builder \ .master("local") \ ... 阅读详情

1、分配更多的资源

1.1、分配哪些资源

executor-memory、executor-cores、num-executor

1.2、在哪里设置这些资源

在生成环境中,提交spark任务时,使用spark-submit shell脚本,可以调整对应的参数
提交任务的脚本

spark-submit \
--master saprk://node01:7077 \
--class cn.tuyou.Wordcount \
--num-executor 3 \      //配置executor的数量
--driver-memory 5g \	//配置driver的内存(无太大影响)
--executor-memory 1g \  //配置每一个executor的内存大小
--executor-cores 3 \    //配置每一个executor的cpu个数
1.3、设置这些资源为什么能优化

提高executor-memory,能提高executor的内存大小,本质提高的读取文件的速度
提高executor-cores,能提高每个executor的cpu个数,本质增强的处理task的并行执行能力
提高num-executor,即提高集群部署的主机数量,这个是最有效的优化(有钱就是任性)
在这里插入图片描述

2、提高并行度

假设,一个application设置的分区数=10个,我们设置的cpu总核数=50个,假设每个task要处理的数据量1G。
目前cpu资源同一时间可以运行50个task,但是目前我们只有10个task,所以会有40个cpu处于空闲状态。

那么如果我们将分区数设置为50个,那每一个taks处理的数据量是0.2G,同一时间,50个task都可以运行。然后整个的运行效率就有所提升。在项目中分区数一般设置为cpu核数的2-3倍最佳

2.1、设置分区数的方式
  • 参数设置
    • sparkCore参数:spark.default.parallelism
    • sparkSQL参数:spark.sql.shuffle.partitions
  • 通过算子:repartition、coalese

3、RDD重用与持久化

3.1、未持久化与持久化的比较

在这里插入图片描述

如上图所示的计算逻辑:
(1)当第一次使用rdd3做相应的算子操作得到rdd4的时候,就会从rdd1开始计算,先读取HDFS上的文件,然后对rdd1 做对应的算子操作得到rdd2,再由rdd2计算之后得到rdd3,rdd3计算之后得到rdd4。同样为了计算得到rdd5,前面的逻辑会被重新计算。
(2)默认情况下多次对一个rdd执行算子操作,去获取不同的rdd,都会对这个rdd及之前的父rdd全部重新计算一次。 这种情况在实际开发代码的时候会经常遇到,但是我们一定要避免一个rdd重复计算多次,否则会导致性能急剧降低。 总结:可以把多次使用到的rdd,也就是公共rdd进行持久化,避免后续需要,再次重新计算,提升效率。

3.2、如何对rdd进行持久化
  • 可以调用rdd的cache或者persist方法。
    • cache方法默认是把数据持久化到内存中 ,例如:rdd.cache ,其本质还是调用了persist方法
    • persist方法中有丰富的缓存级别,这些缓存级别都定义在StorageLevel这个object中,可以结合实际的应用场景合理的设置缓存级别。例如: rdd.persist(StorageLevel.MEMORY_ONLY),这是cache方法的实现。

4、序列化

  • 比如当对rdd进行持久化时,如果选择缓存级别选了磁盘备份,就会涉及到序列化;
    在计算之后的结果内存放不下,spark也会涉及序列化;
    选择正确的序列化本质上可以减少占用的空间和便于网络传输;

  • 项目中一般使用kryo序列化,使用方式,在代码中设置参数:

SparkSession.builder().config(“spark.serializer” , “org.apache.spark.serializer.KryoSerializer”)
Spark支持使用Kryo序列化机制。Kryo序列化机制,比默认的Java序列化机制,速度要快,序列化后的数据要更小,
大概是Java序列化机制的1/10。

5、本地化等待时间

  • 设置参数:“spark.locality.wait”例如设置为“8s”
    • 首先采用最佳的方式,等待8s后降级,还是不行,继续降级…,最后还是不行,只能够采用最差的。
  • 本地化级别

    process_local:进程本地化
    node_local: 节点本地化
    rack_local: 机架本地化
    any: 无限制

  • 查看task的本地化的级别,可以打开sparkUI界面查看,
  • 也可以把程序提交到spark集群中运行,注意观察日志,spark作业的运行日志,推荐大家在测试的时候,先用client模式,在本地就直接可以看到比较全的日志。 日志里面会显示,starting task … PROCESS LOCAL、NODE LOCAL…

6、内存比例调优

6.1、executor内存分析

在这里插入图片描述
在这里插入图片描述

6.2、内存参数调整
  • 指定spark执行与存储的内存比例

    spark.memory.fraction=“0.6”

  • 指定spark存储的内存比例

    spark.memory.storageFraction=“0.5”

7、JVM调优

7.1、JVM内存分析

在这里插入图片描述

  • 1、初始创建对象的时候,对象放在Eden中。
  • 2、随时间的流逝,Eden中存放的对象越来越多,当Eden区域满了的时候,会进行minor GC,会将Eden中还在使用的对象放入到survivor0中,不需要的对象清除掉,清除掉之后Eden就变空了
  • 3、Eden中有可以重新接纳对象,随时间的流逝,Eden中存放的对象越来越多,当Eden区域满了的时候,又会进行minor GC,会将Eden与Survivor中还在使用的对象放入到survivor1中,Eden与survivor0中不再使用的对象清除掉
  • 4、循环第3个步骤
  • 5、当survivor中空间不足,会将还在使用的对象放入到老年代中
  • 6、循环3-5的步骤
  • 7、随着时间的流逝,老年代中空间不足,这时候就需要major GC(即full GC),full GC的时候,进行对暂停一切操作,优先GC。这时候就可能还会出现拉取shuffle数据失败。
7.2、GC调优参数
  • 如果在sparkUI发现GC的时间特别长,证明存储对象的内存空间过小,这时候需要增大内存
    • 增大内存有两种方式:一种是直接将executor-memory设置大一点,
    • 第二种就是将执行与存储的内存比例调小
  • 如果在spark任务中存储的数据比较小,就可以将存储的内存比例调小,将更多的空间给执行区
  • 如果在GC的时候拉取shuffle数据失败,会有一个重试次数,如果重试之后,任然没有拉取到数据,任务报错,停止执行,针对这个问题,可以调整拉取shuffle失败的参数,可以有效解决
    • spark.shuffle.io.maxRetries=“6”
    • spark.shuffle.io.retryWait=“10s”
Spark | 基于源码解析SparkSession初始化过程 Spark.version: 2.4.4 Apache Spark 2.0引入了SparkSession,其为用户提供了一个统一的切入点来使用Spark的各项功能,例如不再需要显式地创建SparkConf, SparkContext 以及 SQLContext,因为这些对象已经封装在SparkSession中。另外SparkSession允许用户通过它调用DataFrame和Dataset相关API来编写Spark程序。 其次SparkSession通过生成器设计模式(Builder Design Pa 阅读详情

相关推荐

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处...

weixin_48323547的博客 722

Spark操作实例

创建spark对象 spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate() 读取文件 1.直接读取为dataframe格式 data=spark.read.orc(r"gaowang.orc") 2.读取为rdd格式 data = spark.sparkContext.tex...

fff2zrx的博客 954

微信小程序真机HTTPS证书链失效排查与修复指南

HTTPS证书信任链是保障Web通信安全的基础机制,其核心在于客户端能否通过服务器提供的证书及其上级签发者,逐级回溯至自身预置的可信根证书。在微信小程序场景中,由于客户端不复用系统根证书库,而是采用固化、精简且更新滞后的自研CA白名单,导致大量符合浏览器标准的证书(如Let’s Encrypt新版ISRG Root X1、TrustAsia等)在真机环境下触发net::ERR_CERT_AUTHORITY_INVALID错误。该问题本质是证书链断裂或签名算法/密钥长度不合规,而非域名配置或CORS策略异常。

weixin_33935636的博客 676

Spark SQL(一):核心类、Spark Session APIs、Configuration、Input and Output

文章目录一.核心类二.Spark Session APIs1.SparkSession.builder.config2.SparkSession.builder.getOrCreate3.SparkSession.createDataFrame4.SparkSession.getActiveSession5.SparkSession.range6.SparkSession.table三.配置四.输入与输出 一.核心类 类名 概述 SparkSession(sparkContext[, jsp

YFater的博客 2092

AD9361 官方例程详解(一)

文章目录前言一、pandas是什么?二、使用步骤总结 前言 一、pandas是什么? 二、使用步骤 总结

weixin_44630490的博客 4万+

CocosCreator3.8.2实战:5分钟搞定多分辨率适配与横竖屏自动翻转(附完整Demo)

本文针对CocosCreator3.8.2开发者,提供了一套5分钟快速集成、开箱即用的多分辨率屏幕适配与横竖屏自动翻转解决方案。通过封装好的ScreenAdapter组件,开发者无需处理复杂计算,即可实现等比缩放或拉伸全屏两种主流适配模式,并自动响应设备旋转,有效解决移动端UI在不同屏幕比例和方向下的显示问题。文末附完整Demo。

z4a5b6的博客 721

SparkContext、SparkConf和SparkSession的初始化

SparkContext和SparkConf   任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。 初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。 val conf = new SparkConf().s...

u011250186的博客 1388

Microsemi Libero系列教程(全网首发)

关于Libero IDE和Libero SoC Libero分为Libero IDE和Libero SoC,Libero IDE最新版本是v9.2 SP3(2016年4月4日)已经不再更新维护了,而Libero SoC是Libero IDE的升级版,官方推荐的开发工具,文中的Libero指的是Libero SoC。 Libero SoC Libero® SoC是Microsemi(美高森美)官方...

whik1194的博客 2万+

Spark性能优化

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

Bryce_Loski的博客 1674

Keras深度学习实战(32)——基于LSTM预测股价

股价预测是时间序列预测中最具挑战性的问题之一,研究股价预测问题具有重要的理论意义和应用价值。针对循环神经网络在股价预测中存在的长期依赖等缺点,本文引入了长短时记忆神经网络以提高股价预测的效果。同时,我们把有关公司的新闻标题的文本数据作为模型的输入变量时,发现预测效果更好,因此我们可以把有关公司的新闻标题的文本数据作为一个有效的输入变量。最后,通过利用 Keras 实现了以上两个股价预测模型,并进行了性能分析和对比。

盼小辉丶的博客 1万+

华为OD机试真题2025双机位A卷 Java&Go 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 1255

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

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

Focus on Lakehouse 3118

励磁电感 Lm 选对了,LLC 才真“高效”:半桥 LLC 效率优化

你有没有遇到过这种 LLC:参数一套下来,ZVS 也有了,波形看着也“挺谐振”,但一上功率——,效率就是死活上不去。我说句直白的:LLC 的“高效”,很大一部分其实是在背后控场。Lm 选小了,励磁电流蹭蹭涨,谐振电流 RMS 变大,导通损耗、开关损耗、整流损耗一起上天;Lm 选太大,又可能把 ZVS 的门槛抬高,轻载掉 ZVS,EMI 也开始作妖。

weixin_43199439的博客 434

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的依赖关系

洪城浪子的博客 5736

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spark性能优化之一

Spark性能优化

sflotus的专栏 511

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

超全spark性能优化总结

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

journey_fan的专栏 2090

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【计算引擎】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....

孟知之的搬砖填坑历险记 959
上一篇: spark数据倾斜情况与解决代码
下一篇: spark的shuffle和原理分析
Imflash
博客等级 码龄8年 66粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值