Spark动态资源分配

0x0 介绍

再java中使用SparkSession来执行spark任务在代码编写上很方便,但是有个问题:SparkSession关闭后无法再次开启,这导致我们会一致占用申请到的Spark集群资源(包括内存和CPU),为了优化这一问题,笔者采用两种方式:
一、 采用SparkSubmit来提交任务,从而达到每次执行完JOB就释放资源,但是有个弊端:无法自由监控JOB执行过程;
关于编程式提交spark任务的教程:
http://blog.csdn.net/gx304419380/article/details/79361645
二、 利用Spark的动态资源分配机制!

0x1 废话不多说,直接上教程

开启Spark动态资源分配的两个必要条件:
一、代码中要有两个属性

.config("spark.dynamicAllocation.enabled", "true")
.config("spark.shuffle.service.enabled", "true")

二、Spark的Worker要有如下配置:
打开worker的$SPARK_HOME/conf/spark-defaults.conf
添加:

spark.shuffle.service.enabled true

启动Spark集群(StandAlone模式)
调用spark job,当任务执行完成后,等待60s,你会发现任务申请的资源(Executor)都自动释放了!


PS:一些有用的参数:

spark.dynamicAllocation.executorIdleTimeout 默认60s,如果executor超过这个时间未执行任务,则自动释放资源
spark.dynamicAllocation.initialExecutors    spark.dynamicAllocation.minExecutors 默认0,JOB申请的executor最小个数,默认是0个
spark.dynamicAllocation.maxExecutors 默认infinite,JOB申请的executor最大个数,默认是无限个
spark.dynamicAllocation.minExecutors 默认等于最小个数

猜你喜欢

转载自blog.csdn.net/gx304419380/article/details/79402113