李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
01.SparkStreaming概述
Leefs
2021-10-18 AM
1005℃
0条
[TOC] ### 前言 在介绍SparkStreaming之前需要先理解几个概念: + **流式计算** 流式计算的上游算子处理完一条数据后,会立马发送给下游算子,所以一条数据从进入流式系统到输出结果的时间间隔较短(当然有的流式系统为了保证吞吐,也会对数据做buffer)。 + **批量计算** 批量计算按数据块来处理数据,每一个task接收一定大小的数据块,比如MR,map任务在处理完一个完整的数据块后(比如128M),然后将中间数据发送给reduce任务。 **批量计算往往得等任务全部跑完之后才能得到结果,而流式计算则可以实时获取最新的计算结果。** + **实时计算** 输入数据是可以以序列化的方式一个个输入并进行处理的,也就是说在开始的时候并不需要知道所有的输入数据。与离线计算相比,`运行时间短,计算量级相对较小`。强调计算过程的时间要短,即所查当下给出结果。 主要侧重于对当日数据的`实时监控`,通常业务逻辑相对离线需求简单一些,统计指标也少一些,但是`更注重数据的时效性,以及用户的交互性`。 + **离线计算** 就是在计算开始前`已知所有输入数据`,输入数据不会产生变化,一般`计算量级较大,计算时间也较长`。 一般是根据前一日的数据`生成报表`,虽然统计指标、报表繁多,但是`对时效性不敏感`。即根据确定范围的数据一次性计算。 #### 误区 习惯上我们认为**离线和批量等价;实时和流式等价**,但其实这种观点并不完全正确。 假设一种情况:当我们拥有一个非常强大的硬件系统,可以毫秒级的处理Gb级别的数据,那么批量计算也可以毫秒级得到统计结果(当然这种情况非常极端,目前不可能),那我们还能说它是离线计算吗? **离线和实时应该指的是:数据处理的延迟;批量和流式指的是:数据处理的方式。**两者并没有必然的关系。事实上Spark streaming就是采用小批量(batch)的方式来实现实时计算。 ### 一、简介 SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理。 Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:Kafka、 Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语 如:map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。 ![01.SparkStreaming概述01.png](https://lilinchao.com/usr/uploads/2021/10/823381097.png) 总结起来,SparkStreaming框架可以分为如下三个方面:**输入 --> 计算 --> 输出**。 ### 二、Micro-Batch Architecture Spark Streaming 将接收到的实时流数据,按照一定时间间隔,对数据进行拆分,交给 Spark Engine 引擎,最终得到一批批的结果。 ![01.SparkStreaming概述02.png](https://lilinchao.com/usr/uploads/2021/10/2342295458.png) + DStream:Spark Streaming 提供了表示连续数据流的、高度抽象的被称为离散流的 DStream。 + 假如外部数据不断涌入,按照一分钟切片,每个一分钟内部的数据是连续的(连续数据流),而一分钟与一分钟的切片却是相互独立的(离散流)。 ### 三、SparkStreaming特点 + 易用 Spark Streaming将Apache Spark的 语言集成API 引入流处理,使您可以像编写批处理作业一样编写流作业。它支持Java,Scala和Python。 + 容错 Spark Streaming可以立即恢复丢失的工作和操作员状态(例如,滑动窗口),而无需任何额外的代码。 + 易整合到Spark体系 通过在Spark上运行,Spark Streaming可让您将相同的代码重用于批处理,针对历史数据加入流或对流状态运行临时查询。构建功能强大的交互式应用程序,而不仅仅是分析。 ### 四、架构 #### 4.1 架构说明 Spark Streaming使用“微批次”的架构,把流式计算当作一系列连续的小规模批处理来对待。Spark Streaming从各种输入源中读取数据,并把数据分组为小的批次。新的批次按均匀的时间间隔创建出来。在每个时间区间开始的时候,一个新的批次就创建出来,在该区间内收到的数据都会被添加到这个批次中。在时间区间结束时,批次停止增长。时间区间的大小是由批次间隔这个参数决定的。批次间隔一般设在500毫秒到几秒之间,由应用开发者配置。每个输入批次都形成一个RDD,以 Spark 作业的方式处理并生成其他的 RDD。 处理的结果可以以批处理的方式传给外部系统。 ![01.SparkStreaming概述03.png](https://lilinchao.com/usr/uploads/2021/10/1994902529.png) Spark Streaming的编程抽象是离散化流,也就是DStream。它是一个 RDD 序列,每个RDD代表数据流中一个时间片内的数据。 ![01.SparkStreaming概述04.png](https://lilinchao.com/usr/uploads/2021/10/2463060426.png) Spark Streaming为每个输入源启动对应的接收器。接收器以任务的形式运行在应用的执行器进程中,从输入源收集数据并保存为 RDD。它们收集到输入数据后会把数据复制到另一个执行器进程来保障容错性(默认行为)。数据保存在执行器进程的内存中,和缓存RDD 的方式一样。驱动器程序中的 StreamingContext 会周期性地运行 Spark 作业来处理这些数据,把数据与之前时间区间中的 RDD 进行整合。 ![01.SparkStreaming概述05.png](https://lilinchao.com/usr/uploads/2021/10/3897832263.png) #### 4.2 背压机制 Spark 1.5 以前版本,用户如果要限制 Receiver 的数据接收速率,可以通过设置静态配制参数“`spark.streaming.receiver.maxRate`”的值来实现,此举虽然可以通过限制接收速率,来适配当前的处理能力,防止内存溢出,但也会引入其它问题。比如:producer 数据生产高于 maxRate,当前集群处理能力也高于 数maxRate,这就会造成资源利用率下降等问题。 为了更好的协调数据接收速率与资源处理能力,1.5 版本开始 Spark Streaming 可以动态控制数据接收速率来适配集群数据处理能力。背压机制(即 Spark Streaming Backpressure): 根据 JobScheduler 反馈作业的执行信息来动态调整 Receiver 数据接收率。 通过属性“`spark.streaming.backpressure.enabled`”来控制是否启用 backpressure 机制,默认值 false,即不启用 *附:* [参考文章链接地址](https://www.codenong.com/cs109440271/)
标签:
Spark
,
Spark Streaming
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1572.html
上一篇
18.【终章】Kafka监控工具Eagle最新版安装
下一篇
02.DStream入门
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Jenkins
Spark
数据结构和算法
队列
序列化和反序列化
Yarn
数据结构
Filter
SpringCloud
递归
Hbase
Spark SQL
Azkaban
Java
Stream流
Linux
JVM
Quartz
Golang
MyBatisX
微服务
FileBeat
并发线程
GET和POST
BurpSuite
高并发
Elastisearch
Http
Zookeeper
字符串
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞