Spark Streaming中动态Batch Size实现初探
本期内容 :
- BatchDuration与 Process Time
- 动态Batch Size
Spark Streaming中有很多算子,是否每一个算子都是预期中的类似线性规律的时间消耗呢?
例如:join操作和普通Map操作的处理数据的时间消耗是否会呈现出一致的线性规律呢,也就是说,并非数据量规模越大就是简单加大BatchDuration
就可以解决问题的,数据量是一个方面,计算的算子也是一个考量的因素。
使用BatchSize来适配我们的流处理程序 :
线上的处理程序越来越重要,流入的数据规模越来越大的时候,传统的一台机器不能够容纳此刻流入的数据并处理此刻流入的数据,所以需要分
布式。分布式的流处理程序其根源在于此1秒中流入的数据我们一台机器无法容纳且无法完成及时的处理,也就是大数据,更谈不上实时性处理和在
线处理 。数据处理的过程中最重要问题是在不同的算子和工作负载对我们处理时间的影响以及这种影响是否是我们预期中的结果。
目前有很多的计算框架,这些所有的计算框架有一个共同特征,就是在连续不断的流进来的一系列数据中使用MapReduce的思想去处理接收到的
数据, MapReduce是一种思想,无论是Hadoop还是Spark都是MapReduce的思想实现,MapReduce的实现有一个很好的方面就是容错性,他有自
己的一套完整的容错机制。流处理程序在具体处理线上数据的时候,借助MapReduce容错机制能够快速从错误中恢复的能力。
构建一套稳定的处理程序,有很多维度需要去考虑,如实时性、波峰,如每秒处理1G的数据,突然一个波峰需要处理100T的数据,此时将如何处
理,整个流处理应该怎样去应对这种情况?
以往的流处理系统中,一种是流处理框架可以动态调整资源,如内存、CPU等资源。另外一种是在来不及处理时使用丢弃部分数据。那如何在保证
数据的完整性的情况下,且数据一定会处理。如何应对现实突发的情况,如果直接调整内存、CPU等资源其代价非常大而且也不太好调整。
Spark Streaming的处理模型是以Batch为模型然后不断的在Queue中把每个BatchDuration的数据进行排队:
Spark Streaming的数据一批批的放在队列中,然后一个个的在集群中处理的,无论是数据本身还是元数据,Job都是以队列的方式获取信息来控制整
个作业的运行。随着数据规模变的越来越大的时候,并不是简简单单的增加内存、CPU等硬件资源就可以的,因为很多时候并不是线性规律的变化。
什么因素导致了Batch处理数据的延时:
01、 接收数据并且把接收到的数据放到Batch待处理的队列中(也就是BatchSize会极大的影响其延时性)
02、 等待时间
03、 处理时间
静态处理模型 :
图中的虚线就是安全区域,安全区域就是数据流进来的速度能够及时在这个BatchDuration中被消化。对Reduce与Join的操作进行对比,不同的算子存在不同的
线性规律,不是随着数据量的增加呈现线性的处理速度,流处理有很多因素影响 .
一般使用几个BatchDuration进行流处理,直接配置一些参数,每隔10S中就有一个BatchDuration然后处理,这样的处理方式是不可取的。从上图可以看出,实
际不是这样的,随着数据量的改变,原来的数据量运行很好,预期也有评估,如每秒处理100M的数据(单节点),使用线性方式评估在500M的时候是怎样的,然后就设
置相对应的静态模型,是基于你现有的硬件资源(内存、CPU、网络),这样评估是不准确的,而且很难预测,因为当消费数据的容量的不同很难去预测其运行行为。
在改变其数据rate时,状态有不稳定性,如果能够改变BatchSize的话其相对稳定,所以需要设计一种算法或者实现,不是去调整内存、CPU等硬件资源,而是调
整其Batch的大小,当Batch足够小或者小得适当的时候,应该是个更好的思路,低延时、灵活性、通用性、简单性。
要完成BatchSize的变化的不断的调整肯定需要对Job信息进行统计,动态的调整这个模式,这个模式就是配置相应的参数。随着处理的不断运行,在下一次运行
之前看一下上次统计的信息,是否需要调整我们的模型,但是这样做会比较困难。因为会出现一些非线性的行为,把你认为的线性的资源改变一下就是可以的,处理
规模不一样,处理算子不一样,有很多不可预测的因素,需要实现对BatchSize的动态调整。
Spark Streaming中动态Batch Size实现初探的更多相关文章
- Spark Streaming揭秘 Day21 动态Batch size实现初探(下)
Spark Streaming揭秘 Day21 动态Batch size实现初探(下) 接昨天的描述,今天继续解析动态Batch size调整的实现. 算法 动态调整采用了Fix-point迭代算法, ...
- Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...
- Spark Streaming中的操作函数分析
根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J ...
- spark streaming中维护kafka偏移量到外部介质
spark streaming中维护kafka偏移量到外部介质 以kafka偏移量维护到redis为例. redis存储格式 使用的数据结构为string,其中key为topic:partition, ...
- Spark Streaming中的操作函数讲解
Spark Streaming中的操作函数讲解 根据根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transform ...
- 一文读懂神经网络训练中的Batch Size,Epoch,Iteration
一文读懂神经网络训练中的Batch Size,Epoch,Iteration 作为在各种神经网络训练时都无法避免的几个名词,本文将全面解析他们的含义和关系. 1. Batch Size 释义:批大小, ...
- Spark Streaming中向flume拉取数据
在这里看到的解决方法 https://issues.apache.org/jira/browse/SPARK-1729 请是个人理解,有问题请大家留言. 其实本身flume是不支持像KAFKA一样的发 ...
- spark streaming中使用flume数据源
有两种方式,一种是sparkstreaming中的driver起监听,flume来推数据:另一种是sparkstreaming按照时间策略轮训的向flume拉数据. 最开始我以为只有第一种方法,但是尼 ...
- flink和spark Streaming中的Back Pressure
Spark Streaming的back pressure 在讲flink的back pressure之前,我们先讲讲Spark Streaming的back pressure.Spark Strea ...
随机推荐
- php mb_convert_encoding的使用
mb_convert_encoding( $str, $encoding1,$encoding2 ): $str,要转换编码的字符串 $encoding1,目标编码,如utf-8,gbk,大小写均可 ...
- 怎样用vs 2008 编译C程序
在大学里都习惯了vc6.0,但是它的集成度并不好,刚试着用vs2008,简单说一下用vs2008编译c的方法吧 首先,在file中新建工程project ,确定之后,会出现新工程(new projec ...
- 图片垂直居中 和 float
//图片垂直居中, display:table-cell; vertical-align:middle; 不能和 css (float)元素共存,可以在元素外面多加一个层 css .th-left ...
- ROS->The Official Tutorial
系统安装 我的使用环境是Ubuntu 16.04LTS 32bit # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (2016 ...
- Linux监控分析实战-1
监控概述及5个大指标 cpu mem 内存 io 磁盘交互 load 负载 Network 网络 它们之间关系是相互彼此依赖,任何一个高负载都会到导致其他指标出现问题: 网卡 ...
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:
security-sdk-1.0.jar已经存在于D:/secServerSDK-test/src/main/resources/lib下 报错如下: xxxxxx@xxxxxxxx /d/secSe ...
- [Linux] - 阿里云CentOS 6.5 安装Docker
因为阿里云的CentOS 6.5版本默认内核kernel版本是2.6的,比较低.安装docker的后,运行不了. 步骤: 1.使用命令更新: yum update 2.安装Docker.这里忽略500 ...
- VR外包团队:VR和AR技术已经红得发紫
近6个月以来,VR和AR技术已经红得发紫. 不管是创业公司还是互联网巨头,如果不在VR领域有所涉猎,都不好意思跟外界打招呼.最近,阿里巴巴公布VR战略并推出了一条VR购物的视频,更是给业界打了满满一碗 ...
- 几种I/O模型功能和性能对比
对比图 同步阻塞I/O服务端通信模型(一客户端一线程) 伪异步I/O服务端通信模型(M:N) NIO服务端和客户端通信时序图
- php三维数组去重
假设叫数组 $my_array; // 新建一个空的数组. $tmp_array = array(); $new_array = array(); // 1. 循环出所有的行. ( $val 就是某个 ...