Spark Streaming揭秘 Day17

资源动态分配

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

Spark core:动态资源控制

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

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

其中有两个关键部分:

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

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

通过定时器,会根据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中,关键代码大致如下:

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

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

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

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

Spark Streaming揭秘 Day17 资源动态分配的更多相关文章

  1. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  2. Spark Streaming揭秘 Day24 Transformation和action图解

    Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...

  3. Spark Streaming揭秘 Day21 动态Batch size实现初探(下)

    Spark Streaming揭秘 Day21 动态Batch size实现初探(下) 接昨天的描述,今天继续解析动态Batch size调整的实现. 算法 动态调整采用了Fix-point迭代算法, ...

  4. Spark Streaming揭秘 Day20 动态Batch size实现初探(上)

    Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...

  5. Spark Streaming揭秘 Day4-事务一致性(Exactly one)

    Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...

  6. Spark Streaming揭秘 Day2-五大核心特征

    Spark Streaming揭秘 Day2 五大核心特征 引子 书接上回,Streaming更像Spark上的一个应用程序,会有多个Job的配合,是最复杂的Spark应用程序.让我们先从特征角度进行 ...

  7. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  8. Spark Streaming揭秘 Day34 解析UI监听模式

    Spark Streaming揭秘 Day34 解析UI监听模式 今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式. ...

  9. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

随机推荐

  1. C++ _access和_waccess的使用方法

      C++ _access和_waccess的使用方法 概述 头文件:<io.h> 判断文件的访问权限 原型 int _access( const char *path,   int mo ...

  2. SQlServer2008 之 定时执行sql语句作业的制定

    1.打开[SQL Server Management Studio],在[对象资源管理器]列表中选择[SQL Server 代理]: 2.鼠标右击[SQL Server 代理],选择[启动(S)],如 ...

  3. myeclipse2014如何添加源码反编译工具插件

    Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝 ...

  4. jQuery中利用JSONP解决AJAX跨域问题

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

  5. Asp.net封装js的类

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...

  6. java.lang.IllegalStateException

    java.lang.IllegalStateExceptionorg.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFac ...

  7. Sqlite和CoreData的区别

    使用方便性.实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心.因此,即使习惯写SQL查询的人,也应该避免在业务 ...

  8. Java作业代写

    作业一 试用java编写一个九九乘法表并打印. 作业二: 设计两个人类与书类,并设置两者的关系,试用人去找书,书去找人,假如某人有一个儿子,它也有一本书,试用儿子去找书,书找儿子. 大作业 熟悉QQ农 ...

  9. zlib导致Ubuntu登录管理器失效

    ubuntu版本:10.04 现象:开机之后无法启动登录管理器. 原因:zlib与登录管理器冲突. 解决:卸载zlib.

  10. 笔记——js 数组

    JS阅读笔记--数组[Array] 最近在看zepto源码,里面用到了很多基础知识,借此机会又把基础知识复习和整理了一遍,算是温故而知新吧.先从引用类型Array写起吧 1. length属性 代码: ...