Spark Streaming 技术点汇总

Spark Streaming 支持实时数据流的可扩展(Scalable)、高吞吐(high-throughput)、容错(fault-tolerant)的流处理(stream processing)。
Spark Streaming 支持实时数据流的可扩展(Scalable)、高吞吐(high-throughput)、容错(fault-tolerant)的流处理(stream processing)。

架构图
特性如下:
? 可线性伸缩至超过数百个节点;
? 实现亚秒级延迟处理;
? 可与 Spark 批处理和交互式处理无缝集成;
? 提供简单的API实现复杂算法;
? 更多的流方式支持,包括 Kafka、Flume、Kinesis、Twitter、ZeroMQ 等。
001、原理
Spark 在接收到实时输入数据流后,将数据划分成批次(divides the data into batches),然后转给 Spark Engine 处理,按批次生成最后的结果流(generate the final stream of results in batches)。

002、API
DStream:
DStream(Discretized Stream,离散流)是 Spark Stream 提供的高级抽象连续数据流。
组成:一个 DStream 可看作一个 RDDs 序列。
核心思想:将计算作为一系列较小时间间隔的、状态无关的、确定批次的任务,每个时间间隔内接收的输入数据被可靠存储在集群中,作为一个输入数据集。

特性:一个高层次的函数式编程 API、强一致性以及高校的故障恢复。
应用程序模板:
模板1

模板2

WordCount示例

Input DStream:
Input DStream 是一种从流式数据源获取原始数据流的 DStream,分为基本输入源(文件系统、Socket、Akka Actor、自定义数据源)和高级输入源(Kafka、Flume等)。
Receiver:
每个 Input DStream(文件流除外)都会对应一个单一的 Receiver对象,负责从数据源接收数据并存入 Spark 内存进行处理。应用程序中可创建多个 Input DStream 并行接收多个数据流。
每个 Receiver 是一个长期运行在Worker或者 Executor 上的 Task,所以会占用该应用程序的一个核(core)。如果分配给 Spark Streaming 应用程序的核数小于或等于 Input DStream 个数(即Receiver个数),则只能接收数据,却没有能力全部处理(文件流除外,因为无需Receiver)。
Spark Streaming 已封装各种数据源,需要时参考官方文档。
Transformation Operation
常用Transformation

updateStateByKey(func)
updateStateByKey可对DStream中的数据按key做reduce,然后对各批次数据累加
WordCount的updateStateByKey版本

transform(func)
通过对原 DStream 的每个 RDD 应用转换函数,创建一个新的 DStream。
官方文档代码举例

Window operations
窗口操作:基于 window 对数据 transformation(个人认为与Storm的tick相似,但功能更强大)。
参数:窗口长度(window length)和滑动时间间隔(slide interval)必须是源DStream 批次间隔的倍数。
举例说明:窗口长度为3,滑动时间间隔为2;上一行是原始 DStream,下一行是窗口化的 DStream。

常见 window operation

官方文档代码举例

join(otherStream, [numTasks])
连接数据流
官方文档代码举例1

官方文档代码举例2

Output Operation

缓存与持久化:
通过 persist()将 DStream 中每个 RDD 存储在内存。
Window operations 会自动持久化在内存,无需显示调用 persist()。
通过网络接收的数据流(如Kafka、Flume、Socket、ZeroMQ、RocketMQ等)执行 persist()时,默认在两个节点上持久化序列化后的数据,实现容错。
Checkpoint:
用途:Spark 基于容错存储系统(如HDFS、S3)进行故障恢复。
分类:
元数据检查点:保存流式计算信息用于 Driver 运行节点的故障恢复,包括创建应用程序的配置、应用程序定义的 DStream operations、已入队但未完成的批次。
数据检查点:保存生成的 RDD。由于 stateful transformation 需要合并多个批次的数据,即生成的 RDD 依赖于前几个批次 RDD 的数据(dependency chain),为缩短 dependency chain 从而减少故障恢复时间,需将中间 RDD 定期保存至可靠存储(如HDFS)。
使用时机:
Stateful transformation:updateStateByKey()以及 window operations。
需要 Driver 故障恢复的应用程序。
003、使用方法
Stateful transformation

需要 Driver 故障恢复的应用程序(以WordCount举例):如果 checkpoint 目录存在,则根据 checkpoint 数据创建新 StreamingContext;否则(如首次运行)新建 StreamingContext。

checkpoint 时间间隔
方法:

原则:一般设置为滑动时间间隔的5-10倍。
分析:checkpoint 会增加存储开销、增加批次处理时间。当批次间隔较小(如1秒)时,checkpoint 可能会减小 operation 吞吐量;反之,checkpoint 时间间隔较大会导致 lineage 和 task 数量增长。
004、性能调优
降低批次处理时间:
数据接收并行度
增加 DStream:接收网络数据(如Kafka、Flume、Socket等)时会对数据反序列化再存储在 Spark,由于一个 DStream 只有 Receiver 对象,如果成为瓶颈可考虑增加 DStream。

设置“spark.streaming.blockInterval”参数:接收的数据被存储在 Spark 内存前,会被合并成 block,而 block 数量决定了Task数量;举例,当批次时间间隔为2秒且 block 时间间隔为200毫秒时,Task 数量约为10;如果Task数量过低,则浪费了 CPU 资源;推荐的最小block时间间隔为50毫秒。
显式对 Input DStream 重新分区:在进行更深层次处理前,先对输入数据重新分区。

数据处理并行度:reduceByKey、reduceByKeyAndWindow 等 operation 可通过设置“spark.default.parallelism”参数或显式设置并行度方法参数控制。
数据序列化:可配置更高效的 Kryo 序列化。
设置合理批次时间间隔
原则:处理数据的速度应大于或等于数据输入的速度,即批次处理时间大于或等于批次时间间隔。
方法:
先设置批次时间间隔为5-10秒以降低数据输入速度;
再通过查看 log4j 日志中的“Total delay”,逐步调整批次时间间隔,保证“Total delay”小于批次时间间隔。
内存调优
持久化级别:开启压缩,设置参数“spark.rdd.compress”。
GC策略:在Driver和Executor上开启CMS。

原文地址:http://blog.51cto.com/14024441/2301641

时间: 2024-10-11 17:12:02

Spark Streaming 技术点汇总的相关文章

6.Spark streaming技术内幕 : Job动态生成原理与源码解析

原创文章,转载请注明:转载自 周岳飞博客(http://www.cnblogs.com/zhouyf/) Spark streaming 程序的运行过程是将DStream的操作转化成RDD的操作,Spark Streaming 和 Spark Core 的关系如下图(图片来自spark官网) Spark Streaming 会按照程序设定的时间间隔不断动态生成Job来处理输入数据,这里的Job生成是指将Spark Streaming 的程序翻译成Spark内核的RDD操作,翻译的过程并不会触发J

Spark笔记——技术点汇总

目录 · 概况 · 手工搭建集群 · 引言 · 安装Scala · 配置文件 · 启动与测试 · 应用部署 · 部署架构 · 应用程序部署 · 核心原理 · RDD概念 · RDD核心组成 · RDD依赖关系 · DAG图 · RDD故障恢复机制 · Standalone模式的Spark架构 · YARN模式的Spark架构 · 应用程序资源构建 · API · WordCount示例 · RDD构建 · RDD缓存与持久化 · RDD分区数 · 共享变量 · RDD Operation · R

Spark Streaming笔记——技术点汇总

目录 · 概况 · 原理 · API · DStream · WordCount示例 · Input DStream · Transformation Operation · Output Operation · 缓存与持久化 · Checkpoint · 性能调优 · 降低批次处理时间 · 设置合理批次时间间隔 · 内存调优 概况 1. Spark Streaming支持实时数据流的可扩展(scalable).高吞吐(high-throughput).容错(fault-tolerant)的流处

大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark SQL0.3.1 RDD.DataFrame 与 DataSet0.3.2 DataSet 与 RDD 互操作0.3.3 RDD.DataFrame 与 DataSet 之间的转换0.3.4 用户自定义聚合函数(UDAF)0.3.5 开窗函数0.4 Spark Streaming0.4.1 Dst

.Spark Streaming(上)--实时流计算Spark Streaming原理介

Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/4747735.html 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理.支持从多种数据源获取数据,包括Kafk.Flume.Twitter.ZeroMQ.Kinesis 以及TCP

7.Spark Streaming(上)--Spark Streaming原理介绍

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理.支持从多种数据源获取数据,包括Kafk.Flume.Twitter.ZeroMQ.Kinesis 以及TCP sockets,从数据源获取数据之后,可以使用诸如map.reduce.join和window等高级函数进行复杂算法的处

Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming介绍

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 Spark Streaming简介 1.1 概述 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理.支持从多种数据源获取数据,包括Kafk.Flume.Twitter.ZeroMQ.Kinesis 以及TCP sockets,从数据源获取数据之后,可以使用诸如map.reduce.join和window等高级函数进行复杂算法的处理

(转)用Flink取代Spark Streaming!知乎实时数仓架构演进

转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务.从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈能够帮助公司更快的做出决策,更好的进行产品迭代,实时数仓在这一过程中起到了不可替代的作用. 更多优质内容请关注微信

Dataflow编程模型和spark streaming结合

Dataflow编程模型和spark streaming结合 主要介绍一下Dataflow编程模型的基本思想,后面再简单比较一下Spark  streaming的编程模型 == 是什么 == 为用户提供以流式或批量模式处理海量数据的能力,该服务的编程接口模型(或者说计算框架)也就是下面要讨论的dataflow model 流式计算框架处理框架很多,也有大量的模型/框架号称能较好的处理流式和批量计算场景,比如Lambda模型,比如Spark等等,那么dataflow模型有什么特别的呢? 这就要要从