关于Hadoop中Spark Streaming的基本概念
作者:晓之以理的喵~~
前言
Spark Streaming是构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。
Spark Streaming可结合批处理和交互式查询,因此,可以适用于一些需要对历史数据和实时数据进行结合分析的应用场景。
流计算是一种典型的大数据计算模式,可以实现对源源不断到达的流数据的实时处理分析。
一、静态数据和流数据
1.静态数据
如果把数据存储系统比作一个“水库”,那么,存储在数据存储系统中的静态数据就像水库中的水一样,是静止不动的。
很多企业为了支持决策分析而构建的数据仓库系统(见图6-1),其中存放的大量历史数据就是静态数据,这些数据来自不同的数据源,利用ETL(Extract-Transform-Load)工具加载到数据仓库中,并且不会发生更新,技术人员可以利用数据挖掘和OLAP(On-LineAnalytical Processing)分析工具从这些静态数据中找到对企业有价值的信息。
2.流数据
流数据(或数据流)是指在时间分布和数量上无限的一系列动态数据集合体;数据记录是流数据的最小组成单元。流数据具有如下特征。
(1)数据快速持续到达,潜在大小也许是无穷无尽的。
(2)数据来源众多,格式复杂。
(3)数据量大,但是不十分关注存储,一旦流数据中的某个元素经过处理,要么被丢弃,要么被归档存储。
(4)注重数据的整体价值,不过分关注个别数据。
(5)数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。
二、流计算
1.流计算的基本概念
流计算是数据的价值随着时间的流逝而降低。
因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。
为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎。对于一个流计算系统来说,
流计算的特性:
(1)高性能。处理大数据的基本要求,如每秒处理几十万条数据。
(2)海量式。支持TB级甚至是PB级的数据规模。
(3)实时性。必须保证一个较低的延迟时间,达到秒级别,甚至是毫秒级别。
(4)分布式。支持大数据的基本架构,必须能够平滑扩展。
(5)易用性。能够快速进行开发和部署。
(6)可靠性。能可靠地处理流数据。
2.流计算处理流程
(1)数据实时采集
数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠。以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器上的日志数据。
数据采集系统的基本架构一般有3个部分:
1)Agent:主动采集数据,并把数据推送到Collector部分。
2)Collector:接收多个Agent的数据,并实现有序、可靠、高性能的转发。
3)Store:存储Collector转发过来的数据。
(2)数据实时计算
数据实时计算阶段对采集的数据进行实时的分析和计算。流处理系统接收数据采集系统不断发来的实时数据,实时地进行分析计算,并反馈实时结果。经流处理系统处理后的数据,可视情况进行存储,以便之后再进行分析计算。在时效性要求较高的场景中,处理之后的数据也可以直接丢弃。
(3)实时查询服务
流计算的第三个阶段是实时查询服务,经由流计算框架得出的结果可供用户进行实时查询、展示或储存。
传统的数据处理流程,用户需要主动发出查询才能获得想要的结果。
而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户。
虽然通过对传统的数据处理系统进行定时查询,也可以实现不断更新结果和结果推送,但通过这样的方式获取的结果,仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别。
流处理系统与传统的数据处理系统的区别
1)流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据。
2)用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统获取的是过去某一时刻的结果。并且,流处理系统无需用户主动发出查询,实时查询服务可以主动将实时结果推送给用户。
三、Spark Streaming
1.Spark Streaming的定义
Spark Streaming 是个批处理的流式(实时)计算框架。其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流。
支持从多种数据源获取数据,包括Kafk、Flume、Twitter、ZeroMQ、Kinesis以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join等高级函数进行复杂算法的处理。
最后还可以将处理结果存储到文件系统,数据库等数据持久化系统。
2.Spark Streaming与Storm的对比
Spark Streaming和Storm最大的区别在于,Spark Streaming无法实现毫秒级的流计算,而Storm可以实现毫秒级响应。
Spark Streaming无法实现毫秒级的流计算,是因为其将流数据分解为一系列批处理作业,在这个过程中,会产生多个Spark作业,且每一段数据的处理都会经过Spark DAG图分解、任务调度等过程,需要一定的开销,因此,无法实现毫秒级响应。
Spark Streaming难以满足对实时性要求非常高(如高频实时交易)的场景,但足以胜任其他流式准实时计算场景。
相比之下,Storm处理的数据单位为元组,只会产生极小的延迟。 Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面,相比于Storm,RDD数据集更容易做高效的容错处理。
此外,SparkStreaming采用的小批量处理的方式,使得它可以同时兼容批量和实时数据处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场合。
3.Spark Streaming 优缺点
与传统流式框架相比,Spark Streaming 最大的不同点在于它对待数据是粗粒度的处理方式,即一次处理一小批数据,而其他框架往往采用细粒度的处理模式,即依次处理一条数据。
Spark Streaming 这样的设计实现既为其带来了显而易见的优点,又引入了不可避免的缺点。
优点
1)Spark Streaming 内部的实现和调度方式高度依赖 Spark 的 DAG 调度器和 RDD,这就决定了 Spark Streaming 的设计初衷必须是粗粒度方式的,同时,由于 Spark 内部调度器足够快速和高效,可以快速地处理小批量数据,这就获得准实时的特性。
2)Spark Streaming 的粗粒度执行方式使其确保“处理且仅处理一次”的特性,同时也可以更方便地实现容错恢复机制。
3)由于 Spark Streaming 的 DStream 本质是 RDD 在流式数据上的抽象,因此基于 RDD 的各种操作也有相应的基于 DStream 的版本,这样就大大降低了用户对于新框架的学习成本,在了解 Spark 的情况下用户将很容易使用 Spark Streaming。
4)由于 DStream 是在 RDD 上的抽象,那么也就更容易与 RDD 进行交互操作,在需要将流式数据和批处理数据结合进行分析的情况下,将会变得非常方便。
缺点
Spark Streaming 的粗粒度处理方式也造成了不可避免的延迟。
在细粒度处理方式下,理想情况下每一条记录都会被实时处理,而在 Spark Streaming 中,数据需要汇总到一定的量后再一次性处理,这就增加了数据处理的延迟,这种延迟是由框架的设计引入的,并不是由网络或其他情况造成的。
到此这篇关于关于Hadoop中Spark Streaming的基本概念的文章就介绍到这了,更多相关Spark Streaming的基本概念内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!