1、sparkStreaming概述
1.1 SparkStreaming是什么
它是一个可扩展,高吞吐具有容错性的流式计算框架
吞吐量:单位时间内成功传输数据的数量
之前我们接触的spark-core和spark-sql都是处理属于离线批处理任务,数据一般都是在那里的,通常我们写好一个脚本,每天定时去处理数据,计算,保存数据结果。这类任务通常是T+1(一天一个任务),对实时性要求不高。
但在企业中存在很多实时性处理的需求,例如:双十一的京东阿里,通常会做一个实时的数据大屏,显示实时订单。这种情况下,对数据实时性要求较高,仅仅能够容忍到延迟1分钟或几秒钟。
实时计算框架对比
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
1,Receiver:用于接收数据
2,数据源:基本源、高级源
基本源:
- TCP/IP Socket
- FileSystem
- Akka
高级源(需要额外的类)
- Kafka
- Flume
3,可靠性
4,Dstream的操作
5,缓存
6,Checkpoint
Spark Streaming在运算过程中如何保证数据不丢失:副本、缓存、检查点
Streaming Context
Spark Streaming程序入口
一旦一个context已经启动,就不能有新的流算子建立或者是添加到context中。
- 一旦一个context已经停止,它就不能再重新启动
- 在JVM中,同一时间只能有一个StreamingContext处于活跃状态
- 在StreamingContext上调用stop()方法,也会关闭SparkContext对象。如果只想关闭StreamingContext对象,设置stop()的可选参数为false
- 一个SparkContext对象可以重复利用去创建多个StreamingContext对象,前提条件是前面的StreamingContext在后面StreamingContext创建之前关闭(不关闭SparkContext)
DSteam
- 代表一个连续的数据流
- 在内部,DStream由一系列连续的RDD组成
- DStreams中的每个RDD都包含确定时间间隔内的数据
- 任何对DStreams的操作都转换成了对DStreams隐含的RDD的操作
通常情况下一个DStream对应一个Receiver
CheckPoint
streamingContext.checkpoint(checkpointDirectory)
StreamingContext的检查点是设置检查点目录
dstream.checkpoint:设置检查点的时间间隔,设置checkpoint间隔是DStream的滑动间隔的5-10倍