博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark Streaming揭秘 Day17 资源动态分配
阅读量:6838 次
发布时间:2019-06-26

本文共 1147 字,大约阅读时间需要 3 分钟。

Spark Streaming揭秘 Day17

资源动态分配

今天,让我们研究一下一个在Spark中非常重要的特性:资源动态分配。

为什么要动态分配?于Spark不断运行,对资源也有不小的消耗,在默认情况下,Spark采用的是粗粒度分配,那么低峰值时会产生大量的资源浪费。
比较有意思的是,在Spark Core和Spark Streaming中对于动态资源管理,采用了两种不同的思路。

Spark core:动态资源控制

在SparkContext启动时,可以看到就有一个动态资源分配的属性控制,默认为关闭。

Snip20160530_1

从代码分析,其实现是在类ExecutorAllocationManager中

其中有两个关键部分:

首先,动态资源分配,是一个定时发起的任务,采用周期性触发的方式来发起。

Snip20160530_2

其次,从实现方法来看,主要就是包含了增加Executor和减少Executor两步操作。

Snip20160530_3

通过定时器,会根据Dirver中的元数据,不断的扫描Executor的情况,满足条件就会进行Executor的添加和删除。例如说正在运行的Stage运行在不同的Executor中,如果60秒时间,发现Executor中一个task也没运行,那就会remove掉,如果发现资源不够的话,会申请更多的资源。

同时,调整资源时,要考虑下资源的粒度,每个Executor的core是3-5个,奇数设置时,稳定性比较高。

Spark Streaming:动态速率控制

Spark Streaming中,Spark Core的动态资源控制方法不太适用,因为在每个Batch Duration可能要求的资源差别很大,有可能还没调整完资源,运行就过期了。

所以,在Spark Streaming中考虑以Batch Duration为周期来进行调整,Spark会判断处理速率,如果来不及处理,会控制处理的速度,叫做动态速率控制。

具体来说,SparkStreaming有一个rate功能可以控制流入的速率,在这个基础上提供了一套算法,根据流入数据和处理时间的比例关系,根据一定的关系,将流入的rate提高或者降低。其实现在PIDRateEstimator中,关键代码大致如下:

Snip20160530_4

关键算法如下,即会以前两个Batch的运行时间来进行判断,按照运行趋势,计算下一周的窗口时间。

Snip20160530_5

资源动态控制,比较适合长时间耗时的任务,Spark Streaming都是微处理,比较适合动态速率控制,而不是资源控制。同时调整的时候,是逐步调整的,并不是一步到位那种。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

转载于:https://www.cnblogs.com/dt-zhw/p/5543983.html

你可能感兴趣的文章
oracle-sql系统学习-ddl-dml
查看>>
java创建文件写入内容,并实现下载该文件
查看>>
C# Graphics 字体倒置
查看>>
Cisco Easy ***综合配置示例
查看>>
18岁的他从月薪2000到月薪11000经历了什么?
查看>>
Cloud Service Process Pack
查看>>
rsync应用拓展多模块同步13
查看>>
FreeBSD下安装配置Hadoop集群(一)
查看>>
组合问题的求解
查看>>
zabbix专题:第十二章 zabbix proxy分布式监控配置
查看>>
为什么总觉得自己不适合搞IT?
查看>>
vmware克隆server2008R2造成SID冲突
查看>>
python调用zabbix api接口实时展示数据
查看>>
VMware下Windows2003R2虚拟机磁盘扩容方法
查看>>
运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)
查看>>
利用Linux的文件命名规范在Windows中建立“高权限”文件
查看>>
失败者的共同特点
查看>>
Tokyo Tyrant基本规范(4)--协议
查看>>
【Go语言】【14】GO语言的接口类型
查看>>
配置CAS应用客户端
查看>>