1、sparkStreaming概述

1.1 SparkStreaming是什么

  • 它是一个可扩展,高吞吐具有容错性的流式计算框架

    吞吐量:单位时间内成功传输数据的数量

之前我们接触的spark-core和spark-sql都是处理属于离线批处理任务,数据一般都是在那里的,通常我们写好一个脚本,每天定时去处理数据,计算,保存数据结果。这类任务通常是T+1(一天一个任务),对实时性要求不高。

ss1

但在企业中存在很多实时性处理的需求,例如:双十一的京东阿里,通常会做一个实时的数据大屏,显示实时订单。这种情况下,对数据实时性要求较高,仅仅能够容忍到延迟1分钟或几秒钟。

ss2

实时计算框架对比

Storm

  • 流式计算框架
  • 以record为单位处理数据
  • 也支持micro-batch方式(Trident)

Spark

  • 批处理计算框架
  • 以RDD为单位处理数据
  • 也支持micro-batch流式处理数据(Spark Streaming)

对比:

  • 吞吐量:Spark Streaming优于Storm
  • 延迟:Spark Streaming差于Storm

1.2 Spark Streaming的组件

  • Streaming Context:在Spark Context中申请的资源上进行计算的抽象类
  • Dstream(离散流):计算过程中的数据结构,类似RDD

ss3

1,Receiver:用于接收数据

2,数据源:基本源、高级源

基本源:

  • TCP/IP Socket
  • FileSystem
  • Akka

高级源(需要额外的类)

  • Kafka
  • Flume

3,可靠性

4,Dstream的操作

5,缓存

6,Checkpoint

Spark Streaming在运算过程中如何保证数据不丢失:副本、缓存、检查点

Streaming Context

  • Spark Streaming程序入口

    ss4

  • 一旦一个context已经启动,就不能有新的流算子建立或者是添加到context中。

  • 一旦一个context已经停止,它就不能再重新启动
  • 在JVM中,同一时间只能有一个StreamingContext处于活跃状态
  • 在StreamingContext上调用stop()方法,也会关闭SparkContext对象。如果只想关闭StreamingContext对象,设置stop()的可选参数为false
  • 一个SparkContext对象可以重复利用去创建多个StreamingContext对象,前提条件是前面的StreamingContext在后面StreamingContext创建之前关闭(不关闭SparkContext)

DSteam

  • 代表一个连续的数据流
  • 在内部,DStream由一系列连续的RDD组成
  • DStreams中的每个RDD都包含确定时间间隔内的数据
  • 任何对DStreams的操作都转换成了对DStreams隐含的RDD的操作

ss5

通常情况下一个DStream对应一个Receiver

ss6

ss7

CheckPoint

  • streamingContext.checkpoint(checkpointDirectory)

    StreamingContext的检查点是设置检查点目录

  • dstream.checkpoint:设置检查点的时间间隔,设置checkpoint间隔是DStream的滑动间隔的5-10倍

    ss12

results matching ""

    No results matching ""