1、概述

1.1、SparkStreaming是什么

Spark Streaming是对核心Spark API的一个扩展,它能够实现对实时数据流的流式处理,并具有很好的可扩展性、高吞吐量和容错性。Spark Streaming支持从多种数据源提取数据,如:Kafka、Flume、Twitter、ZeroMQ、Kinesis以及TCP套接字,并且可以提供一些高级API来表达复杂的处理算法,如:map、reduce、join和window等。最后,Spark Streaming支持将处理完的数据推送到文件系统、数据库或者实时仪表盘中展示。实际上,你完全可以将Spark的机器学习(machine learning) 和 图计算(graph processing)的算法应用于Spark Streaming的数据流当中。

外国正规spark网站实践贝贝_Spark

外国正规spark网站实践贝贝_Spark_02

外国正规spark网站实践贝贝_数据_03

以上的连续4个图,分别对应以下4个段落的描述:

  • Spark Streaming接收Kafka、Flume、HDFS和Kinesis等各种来源的实时输入数据,进行处理后,处理结果保存在HDFS、Databases等各种地方。
  • Spark Streaming接收这些实时输入数据流,会将它们按批次划分,然后交给Spark引擎处理,生成按照批次划分的结果流。
  • Spark Streaming提供了表示连续数据流的、高度抽象的被称为离散流的DStream。DStream本质上表示RDD的序列。任何对DStream的操作都会转变为对底层RDD的操作。
  • Spark Streaming使用数据源产生的数据流创建DStream,也可以在已有的DStream上使用一些操作来创建新的DStream。

1.2、内原理

Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Core,也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加或者存储到外部设备。    

下图展示了Spark Streaming的内部工作原理。SparkStreaming从实时数据流接入数据,再将其划分为一个个小批量供后续Spark engine处理,所以实际上,Spark是按一个个小批量来处理数据流的。

        

外国正规spark网站实践贝贝_数据_04

         Spark Streaming将连续的数据流抽象为discretizedstream或DStream。 可以从诸如Kafka,Flume和Kinesis等来源的输入数据流中创建DStream,或者通过对其他DStream应用高级操作来创建。在内部,DStream 由一个RDD序列表示。

1.3、Spark Streaming能做什么

目前而言SparkStreaming 主要支持以下三种业务场景

1、无状态操作:只关注当前批次中的实时数据,例如:

  1. 商机标题分类,分类http请求端 -> kafka -> Spark Streaming -> http请求端Map -> 响应结果
  2. 网库Nginx访问日志收集,flume->kafka -> Spark Streaming -> hive/hdfs
  3. 数据同步,网库主站数据通过“主站”->kafka->Spark Streaming -> hive/hdfs

2、有状态操作:对有状态的DStream进行操作时,需要依赖之前的数据 除了当前新生成的小批次数据,但还需要用到以前所生成的所有的历史数据。新生成的数据与历史数据合并成一份流水表的全量数据例如:

  1. 实时统计网库各个站点总的访问量
  2. 实时统计网库每个商品的总浏览量,交易量,交易额。

3、窗口操作:定时对指定时间段范围内的DStream数据进行操作,例如:

  1.  网库主站的恶意访问、爬虫,每10分钟统计30分钟内访问次数最多的用户。