Spark资源调优

Spark资源调优

在Spark作业submit之后,会启动对应的Driver进程,Driver进程会根据我们设置的参数向资源管理器申请对应的资源(大多数是Yarn)启动一定数量的Executor,每个Executor进程都占有一定数量的内存和Core数,对于于都这篇文章的读者,默认已经对spark各个组件和Spark的运行流程有了基本的认识。

num-executors

这个参数用于设置spark作业总共要有多少个Executor进程来运行。Driver在向Yarn申请资源时,Yarn会尽可能按照设置的参数在工作节点上启动对应数量的Executor。每个Spark作业一般设置50-100个,具体可能需要看作业的计算量和集群的资源使用情况。

executor-memory

该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常以及频繁的GC,也有直接的关联。建议设置到4G-8G,这个参数也是具体情况具体分析,设置的过大如果集群中没有那么多资源,会导致任务一直在等待。

executor-cores

该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。建议设置在2-4之间。

driver-memory

该参数用于设置Driver进程的内存。一般不设置,或是1G,注意的是如果有collect算子会把数据拉到Driver端,此时应该把这个参数调大,不建议使用collect算子。

spark.default.parallelism

该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。在开发过程中发现很多同学不去设置这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,比如Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值