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语言指针函数与函数指针

    例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...

  2. 小白日记28:kali渗透测试之Web渗透-扫描工具-Nikto

    扫描工具-Nikto #WEB渗透 靶机:metasploitable 靶场:DVWA[默认账号/密码:admin/password] #新手先将DVWA的安全性,调到最低,可容易发现漏洞 侦察[减少 ...

  3. Swift 3必看:新的访问控制fileprivate和open

    在swift 3中新增加了两中访问控制权限 fileprivate和 open.下面将对这两种新增访问控制做详细介绍. fileprivate 在原有的swift中的 private其实并不是真正的私 ...

  4. 在Code first中使用数据库里的视图

    如果想在Code first中使用数据库里的视图 (不管你出于什么原因),目前的方法有2种. 一.使用Database.SqlQuery<T>("查询语句"),如: v ...

  5. LAMP平台搭建详解

    准备工作 安装编译工具 # yum -y install gcc # yum -y install gcc-c++ 如果系统之前已经安装有rpm包的mysql和apache,那么可以: #servic ...

  6. CF Polycarpus' Dice (数学)

    Polycarpus' Dice time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. android图片压缩方法

    android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...

  8. javascript基础知识--函数定义

    函数声明式 function funname( 参数 ){ ...执行的代码 } 声明式的函数并不会马上执行,需要我们调用才会执行:funname(); * 分号是用来分隔可执行JavaScript语 ...

  9. Jersey(1.19.1) - Root Resource Classes

    Root resource classes are POJOs (Plain Old Java Objects) that are annotated with @Path have at least ...

  10. iOS设备中WiFi、蓝牙和飞行模式的开启与关闭

    转自:http://www.cnblogs.com/OtionSky/archive/2011/11/08/iOS_WiFi_Controller.html 今天写了一段有关在iPhone程序中开关W ...