SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比

本文全部手写原创,请勿复制粘贴、转载请注明出处,谢谢配合!

什么是SparkStreaming

Spark Streaming类似于Apache Storm,用于流式数据的处理
什么是流式数据的处理: 即数据源源不断的产生,像水流一样,Spark也实时的不断的对这些数据进行处理。比如淘宝双十一的大屏,实时统计交易总金额。再比如我们熟悉的Wordcount程序,之前是一个固定的文件,而现在这个文件的内容可以实时的不断增加,Spark会实时的计算出单词个数,整个过程都成了动态的了。

SparkStreaming数据流

Spark Streaming支持的数据输入源很多,可分为两种类型。一种是基础的输入源例如:简单的TCP套接字,另一种是高级的输入源例如Kafka、Flume等等。


SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第1张图片
数据流图

数据输入后可以用Spark的高级复杂算法来处理数据:如用map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。

架构及工作原理

微批次架构

Spark Streaming使用“微批次”架构,把流式计算当做一系列连续的小规模批处理对待。接收实时输入数据流之后会将数据拆分成小批次,新的批次按时间间隔创建出来,在该区间内收到的数据都添加到这个批次,区间结束后批次停止增长。时间间隔是由开发者设置的“批次间隔”这个参数决定的。每个输入批次都形成一个RDD,以Spark作业形式处理生成其他RDD(之前讲过spark对数据的操作无非是rdd的创建转化与行动操作),最后批量生成最终结果流传给外部系统。

SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第2张图片
架构

DStream

离散流DStream是Spark Streaming提供的基本抽象。它表示连续的数据流,即从源接收的输入数据流或通过转换输入流生成的已处理数据流。在内部,DStream由连续的RDD系列表示,这是Spark对不可变的分布式数据集的抽象,DStream中的每个RDD都包含来自特定时间间隔的数据,如下图所示:


SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第3张图片
Dstream是持续的RDD序列

在DStream上应用的任何操作均转换为对基础RDD的操作,即前面讲到的RDD的Transformation和Action操作。如下图:


SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第4张图片
DStream的RDD操作

SparkStreaming执行过程

  • Application运行于StreamigContext和SparkContext之上。
  • SparkStreaming为输入源启动接收器Receiver,Receiver以任务Task的形式运行在应用的执行器Executor中。
  • Receiver接受输入源并拆分为块(离散化),这些块其实就是RDD
  • Receiver收集到输入数据后会把数据复制到另一个Executor中来保障容错性
  • SparkContext会周期性的(由开发者设置的时间间隔决定)在内存中运行job来处理这些RDD数据。
    SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第5张图片
    SparkStreaming在Spark各组件的执行过程

优势

  • 高吞吐量
  • 容错能力、故障恢复能力强
  • 支持多种输入和输出
  • 能和MLlib(机器学习)以及Graphx完美融合。

与Storm的对比

SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比_第6张图片
Spark vs Storm

由此可知,如果是诸如金融系统这种要求健壮性非常强且事物机制非常可靠,即数据的处理完全精准,以及股票系统这种实时性非常高,秒级延误都不允许的系统,那么选择Storm。如果能容许秒级延误,比如微博实时统计热点信息,那么就可以选择SparkStreaming,毕竟SparkSreamin能有效结合Spark生态圈,功能更强大。比如某公司业务同时包括离线批处理、交互式查询等业务功能,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者可以无缝整合,给系统提供非常高的可扩展性。

你可能感兴趣的:(SparkStreaming入门教程(一)概述、特点、架构原理以及与storm的对比)