spark安装包_Spark实战:资源动态分配

033523157b6c4576b7d6d19e5231f5de.png

前面介绍过Spark可以在启动命令中配置使用的资源数,但是无论是否运行task都会长期占用executor的资源,导致集群利用率不高。此时可以开启动态资源申请服务,应用可以根据任务执行的情况选择申请还是释放executor,释放后的executor的资源也会归还到yarn,从而提高资源利用率。

但是executor不仅仅运行task还负责维护计算后的数据,以供shuffle读取使用。如果仅仅是任务执行完就释放资源,那么shuffle的数据就读取不到了,因此动态资源申请还需要配合外部shuffle服务来工作。

前面也介绍过外部shuffle服务,是通过在nodemanager上启动一个shuffle服务进程,各个executor通过这个进程来进行shuffle操作,这样有几个好处:第一个是executor不会再因为task的计算所引起的长时间GC停顿而导致shuffle任务卡死;第二个是基于nodemanager统一管理上面所有的executor的shuffle操作,提高数据交换利用率。

下面就看看在cdh中如何开启这项服务吧:

1 上传资源

拷贝jar包到yarn的lib目录下,这个操作需要在每台nodemanager上执行。首先在下载好的spark安装包下有一个yarn目录,有一个spark-version-yarn-shuffle.jar,这里面就包含了external shuffle的spark实现。

d1f5db1a82f9ffc190cbe1afda770424.png

拷贝到nodemanager对应的lib下面,在cdh里面以我们的安装目录为例,是在:

cd /opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/hadoop-yarn/lib

目录中,由于之前cdh版本比较老,已经安装了spark 1.6,因此这个目录下有两个链接,指向了1.6版本的jar包,需要替换掉。

dc44424ea0dc0e5ff871b614958b1d28.png

2 修改配置文件

接下来需要修改yarn-site.xml配置文件,增加spark shuffle相关的配置:

<property>
<name>yarn.nodemanager.aux-services</name>
<value>spark_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>spark.shuffle.service.port</name>
<value>7337</value>
</property>

f6a393be2d8cbd548a057a4d147461c3.png

配置好后重启服务 yarn 服务。

3 在spark应用中增加配置

# 开启动态资源申请服务
spark.dynamicAllocation.enabled=true
# 最多允许申请8个executor
spark.dynamicAllocation.maxExecutors=8
# 开启 external shuffle服务
spark.shuffle.service.enabled=true
# shuffle服务的端口号为7337
spark.shuffle.service.port=7337

4 试验

以我这边的开发平台为例(可以理解成spark-shell),支持用户创建一个Spark应用,不断的提交spark sql。

00ff1c4c50d0f113807a329498136ce2.png

初始启动的时候,应用按照默认的配置,申请了一个driver和3个executor。开始的时候并没有提交任何任务,而系统默认的空闲时间是1分钟,因此1分钟后三个executor都被移除,资源还给yarn。当提交一段sql时,此时driver没有与之关联的executor,因此需要创建executor4,执行完毕后,空闲一分钟释放。后面的过程都差不多。

可以看到在这种交互式的应用中,spark在空闲的时候释放executor,繁忙的时候申请executor,达到了动态资源管理的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值