spark性能调优

本文探讨了Spark性能调优的关键措施,包括RDD分片数与executor个数的匹配,优化数据结构以减少内存使用,利用广播变量提升效率,以及调整集群并行度以充分利用资源。通过合理设置相关参数,可以显著提升Spark作业的执行效率。
摘要由CSDN通过智能技术生成

spark性能调优有很多措施,下面说说我用到的一些调优手段。

1.RDD分片数和executor个数的协调

要想充分的使数据并行执行,并且能充分的利用每一个executor,则在rdd的个数与executor的个数之间要有一个合适的值。若rdd的个数较多而executor的个数较少,则会导致部分rdd需要等待空闲的executor,这样不能使所有数据同时并行执行。若rdd较少,而executor的个数较多,则会导致部分ecexutor空闲,浪费资源。所以最理想的状态是rdd的个数与executor的个数一致,这样可以达到完全并行,但每个executor的执行能力又是不一样的,有的执行的快,则先执行完的会出现等待的情况,所以应该根据内存的大小来分配executor的个数,一般是取rdd个数不小于executor的数量。

rdd分片数可在程序中设置,一般是textFile()函数的第二个参数。executor的个数通过命令:--num-executors args来设置。


2. 优化数据结构


Spark 默认使用Java序列化对象,虽然Java对象的访问速度更快,但其占用的空间通常比其内部的属性数据大2-5倍。为了减少内存的使用,减少Java序列化后的额外开销,下面列举一些Spark官网(http://spark.apache.org/docs/latest/tuning.html#tuning-data-structures)提供的方法。


(1)使用对象数组以及原始类型(primitive type)数组以替代Java或者Scala集合类(collection class)。fastutil 库为原始数据类型提供了非常方便的集合类,且兼容Java标准类库。


(2)尽可能地避免采用含有指针的嵌套数据结构来保存小对象。


(3)考虑采用数字ID或者枚举类型以便替代String类型的主键。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值