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 默认等于最小个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值