Spark十五 Spark Streaming之架构和抽象,24/7不间断运行,性能考量
Spark Streaming与Structured Streaming
1) RDDs为old API,DataSets,DataFrames为newer API
2) Spark Streaming为old API,Structured Streaming为newer API
Spark Streaming使用离散化流(discretized stream)DStream作为抽象表示
1) DStream是随时间推移而收到的RDD的序列,输入源可以是Flume,Kafka,或HDFS
2) DStream支持两种操作
> 转化操作:生成新的DStream
> 输出操作:把数据写入外部系统
3) 强大的容错性实现不间断工作
4) 性能考量包含一般Spark应用的并行度,序列化格式,内存管理,硬件供给,以及专门为Spark Streaming的批次和窗口大小,并行度,垃圾收集和内存使用
1 架构和抽象
1) 流计算功能首先要创建StreamingContext,StreamingContext会在底层创建SparkContext用来处理数据
2) 微批次架构
> 从输入源读取数据,并把数据分组为小批次,批次按均匀的时间间隔创建,时间间隔的大小即是批次间隔(batch internal),同一个批次形成一个RDD,所以DStream是RDD的序列
> 转化操作生成新的DStream,输出操作在每个时间区间执行,每个批次都由输出
3) Spark Streaming执行过程
4) 接收器
> 为每个输入源启动一个接收器,接收器以任务的形式运行在应用的执行器进程中,从输入源收集数据并保存为RDD
> StreamingContext会周期性地运行Spark作业来处理这些数据,把数据与之前时间区间中的RDD进行整合
5) 容错性
> 收集到输入数据保存在执行器进程的内存中并且把数据复制到另一个执行器进程来保障容错性,默认分别存在于两个节点上
> 只要输入数据还在,就可以通过重算出任意状态的谱系图
6) 检查点机制
> 重算处理从程序启动以来的所有数据,可能很花时间,所以使用检查点机制
> 检查点机制:把状态阶段性地存储到可靠文件系统中,HDFS等,恢复数据只需要回溯到上一个检查点
2 24/7不间断运行
1) 检查点机制
> 设置好可靠存储系统的检查点机制
> 目的:
(1) 控制发生失败时需要重算的状态数,谱系图从检查点恢复
(2) 控制驱动器程序容错,驱动器程序从检查点恢复
2) 驱动器程序容错
> 使用StreamingContext.getOrCreat(),重启驱动器程序兵再次执行代码时,getOrCreate()会从检查点目录初始化StreamingContext继续处理
> 驱动器程序不会自动重启,所以需要编写重启驱动器的代码
> 驱动器程序重启时,因为执行器不能再没有驱动器程序的情况下执行,所以执行器程序也要重启,会使用新的执行器程序运行之前的计算
3) 执行器节点容错
> 输入源多节点备份
4) 接收器容错
> 在别的节点重新启动失败的接收器
> 是否会丢失数据取决于输入源是否会重发,接收器是否会向输入源发送确认
> 使用可靠数据源(HDFS等)避免数据丢失
5) 处理保证
3 性能考量
1) 批次和窗口大小
2) 并行度
> 增加接收器数目
> 数据分区
> 提高聚合计算并行度
3) 垃圾回收和内存使用
> 并发标志-清除收集器
> RDD以序列化形式缓存
> 主动移除内存中不用的RDD