Spark Streaming笔记整理(一):基本工做原理介绍

概述

大数据实时计算介绍

一、Spark Streaming,其实就是一种Spark提供的,对于大数据,进行实时计算的一种框架。它的底层,其实,也是基于咱们以前讲解的Spark Core的。基本的计算模型,仍是基于内存的大数据实时计算模型。并且,它的底层的核心组件仍是咱们在Spark Core中常常用到的RDD。算法

二、针对实时计算的特色,在RDD之上,进行了一层封装,叫作DStream。其实,学过了Spark SQL以后,你理解这种封装就容易了。以前学习Spark SQL是否是也是发现,它针对数据查询这种应用,提供了一种基于RDD之上的全新概念,DataFrame,可是,其底层仍是基于RDD的。因此,RDD是整个Spark技术生态中的核心。数据库

正如市面上存在众多可用的流处理引擎,人们常常询问咱们Spark Streaming有何独特的优点?那么首先要说的就是Apache Spark在批处理以及流处理上提供了原生支持。这与别的系统不一样之处在于其余系统的处理引擎要么只专一于流处理,要么只负责批处理且仅提供须要外部实现的流处理API接口而已。Spark 凭借其执行引擎以及统一的编程模型可实现批处理与流处理,这就是与传统流处理系统相比Spark Streaming所具有独一无二的优点。尤为特别体如今如下四个重要部分:apache

1.能在故障报错与straggler的状况下迅速恢复状态;
2.更好的负载均衡与资源使用;
3.静态数据集与流数据的整合和可交互查询;
4.内置丰富高级算法处理库(SQL、机器学习、图处理)

流处理架构——过去与如今1

当前分布式流处理管道执行方式以下所述:编程

一、接收来自数据源的流数据(好比时日志、系统遥测数据、物联网设备数据等等),处理成为数据摄取系统,好比Apache Kafka、Amazon Kinesis等等。缓存

二、在集群上并行处理数据。这也是设计流处理引擎的关键所在,咱们将在下文中作出更细节性的讨论。session

三、输出结果存放至下游系统(例如HBase、Cassandra, Kafka等等)。架构

为了处理这些数据,大部分传统的流处理系统被设计为连续算子 模型,其工做方式以下:负载均衡

一、有一系列的工做节点,每组节点运行一至多个连续算子;框架

二、对于流数据,每一个连续算子一次处理一条记录,而且将记录传输给管道中别的算子;机器学习

三、源算子从摄入系统接收数据,接着输出到下游系统。

Spark Streaming笔记整理(一):基本工做原理介绍

流处理架构——过去与如今2

一、连续算子是一种较为简单、天然的模型。然而,随着现在大数据时代下,数据规模的不断扩大以及愈来愈复杂的实时分析,这个传统的架构也面临着严峻的挑战。所以,咱们设计Spark Streaming就是为了解决以下几点需求:

二、故障迅速恢复–数据越庞大,出现节点故障与节点运行变慢(例如straggler)状况的几率也愈来愈高。所以,系统要是可以实时给出结果,就必须可以自动修复故障。惋惜在传统流处理系统中,在这些工做节点静态分配的连续算子要迅速完成这项工做仍然是个挑战;

三、负载均衡–在连续算子系统中工做节点间不平衡分配加载会形成部分节点性能的bottleneck(运行瓶颈)。这些问题更常见于大规模数据与动态变化的工做量面前。为了解决这个问题,那么要求系统必须可以根据工做量动态调整节点间的资源分配;

四、统一的流处理与批处理以及交互工做–在许多用例中,与流数据的交互是颇有必要的(毕竟全部流系统都将这置于内存中)或者与静态数据集结合(例如pre-computed model)。这些都很难在连续算子系统中实现,当系统动态地添加新算子时,并无为其设计临时查询功能,这样大大的削弱了用户与系统的交互能力。所以咱们须要一个引擎可以集成批处理、流处理与交互查询;

五、高级分析(例如机器学习、SQL查询等等)–一些更复杂的工做须要不断学习和更新数据模型,或者利用SQL查询流数据中最新的特征信息。所以,这些分析任务中须要有一个共同的集成抽象组件,让开发人员更容易地去完成他们的工做。

六、为了解决这些要求,Spark Streaming使用了一个新的结构,咱们称之为discretized streams(离散化的流数据处理),它能够直接使用Spark引擎中丰富的库而且拥有优秀的故障容错机制。

Spark Streaming简单介绍

一、Spark的运行模式多种多样,灵活多变,部署在单机上时,既能够用本地模式运行,也能够用伪分布式模式运行;而当以分布式集群的方式部署时,也有众多的运行模式可供选择,这取决于集群的实际状况,底层的资源调度既能够依赖于外部的资源调度框架,也可使用Spark内建的Standalone模式。对于外部资源调度框架的支持,目前的实现包括相对稳定的Mesos模式,以及还在持续开发更新中的Hadoop YARN模式。

二、Spark Streaming是Spark Core API的一种扩展,它能够用于进行大规模、高吞吐量、容错的实时数据流的处理。它支持从不少种数据源中读取数据,好比Kafka、Flume、Twitter、ZeroMQ、Kinesis、ZMQ或者是TCP Socket。而且可以使用相似高阶函数的复杂算法来进行数据处理,好比map、reduce、join和window。处理后的数据能够被保存到文件系统、数据库、Dashboard等存储中。

Spark Streaming笔记整理(一):基本工做原理介绍

Spark Streaming基本工做原理

接收实时输入数据流,而后将数据拆分红多个batch,好比每收集1秒的数据封装为一个batch,而后将每一个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,其中的数据,也是由一个一个的batch所组成的。

Spark Streaming笔记整理(一):基本工做原理介绍

Spark Streaming DStream

一、Spark Streaming提供了一种高级的抽象,叫作DStream,英文全称为Discretized Stream,中文翻译为“离散流”,它表明了一个持续不断的数据流。DStream能够经过输入数据源来建立,好比Kafka、Flume、ZMQ和Kinesis;也能够经过对其余DStream应用高阶函数来建立,好比map、reduce、join、window。

二、DStream的内部,其实一系列持续不断产生的RDD。RDD是Spark Core的核心抽象,即,不可变的,分布式的数据集。DStream中的每一个RDD都包含了一个时间段内的数据。

Spark Streaming笔记整理(一):基本工做原理介绍

一、对DStream应用的算子,好比map,其实在底层会被翻译为对DStream中每一个RDD的操做。好比对一个DStream执行一个map操做,会产生一个新的DStream。可是,在底层,其实其原理为,对输入DStream中每一个时间段的RDD,都应用一遍map操做,而后生成的新的RDD,即做为新的DStream中的那个时间段的一个RDD。底层的RDD的transformation操做。

二、仍是由Spark Core的计算引擎来实现的。Spark Streaming对Spark Core进行了一层封装,隐藏了细节,而后对开发人员提供了方便易用的高层次的API。

Spark Streaming笔记整理(一):基本工做原理介绍

与其它流式框架对比分析

Spark Streaming、Flink和Storm对比

对比点 Storm Spark Streaming Flink
实时计算模型 纯实时,来一条数据处理一条 一、准实时,对一个时间段的RDD数据收集起来,一块儿处理 流式计算和批处理分别采用DataStream和DataSet
实时计算延迟度 毫秒级 秒级 秒级
吞吐量
事务机制 支持完善 支持,但不够完善 支持,但不够完善
健壮性/容错性 ZK、Acker,很好 CheckPoint,WAL通常 CheckPoint通常
动态调整并行度 支持 不支持 支持
运行时同时支持流失和离线处理 不支持 支持 支持
成熟度
模型 native Micro-batching native
API 组合式 声明式 组合式
       
  • 组合式:操做更加基础的API操做,一步步精细控制,各组件组合定义成拓扑;
  • 声明式:提供封装后的高阶函数。封装后可提供初步的优化;可提供窗口管理、状态管理等高级操做;

Spark Streaming、Flink和Storm的优点分析

一、Spark Streaming绝对谈不上比Storm、Flink优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。

二、Spark Streaming在吞吐量上要比Storm优秀。

三、Storm在实时延迟度上,比Spark Streaming就好多了,前者是纯实时,后者是准实时。并且,Storm的事务机制、健壮性/容错性、动态调整并行度等特性,都要比Spark Streaming更加优秀。

四、Spark Streaming,有一点是Storm绝对比不上的,就是:它位于Spark整个生态技术栈中,所以Spark Streaming能够和Spark Core、Spark SQL、Spark Graphx无缝整合,换句话说,咱们能够对实时处理出来的中间数据,当即在程序中无缝进行延迟批处理、交互式查询等操做。这个特色大大加强了Spark Streaming的优点和功能。

Spark Streaming、Flink和Storm的应用场景

Storm

一、建议在须要纯实时,不能忍受1秒以上延迟的场景下使用,好比实时计算系统,要求纯实时进行交易和分析时。

二、在实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理彻底精准,一条也不能多,一条也不能少,也能够考虑使用Storm,可是Spark Streaming也能够保证数据的不丢失。

三、若是咱们须要考虑针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(一般是在小型公司,集群资源紧张的状况),咱们也能够考虑用Storm

Spark Streaming

一、不知足上述3点要求的话,咱们能够考虑使用Spark Streaming来进行实时计算。

二、考虑使用Spark Streaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,即,若是一个项目除了实时计算以外,还包括了离线批处理、交互式查询、图计算和MLIB机器学习等业务功能,并且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么就应该首选Spark生态,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者能够无缝整合,给系统提供很是高的可扩展性。

Flink

1.支持高吞吐、低延迟、高性能的流处理 2.支持带有事件时间的窗口(Window)操做 3.支持有状态计算的Exactly-once语义 4.支持高度灵活的窗口(Window)操做,支持基于time、count、session,以及data-driven的窗口操做 5.支持具备Backpressure功能的持续流模型 6.支持基于轻量级分布式快照(Snapshot)实现的容错 7.一个运行时同时支持Batch on Streaming处理和Streaming处理 8.Flink在JVM内部实现了本身的内存管理 9.支持迭代计算 10.支持程序自动优化:避免特定状况下Shuffle、排序等昂贵操做,中间结果有必要进行缓存


原文连接:http://blog.51cto.com/xpleaf/2114744
相关文章
相关标签/搜索