深入理解spark streaming
spark streaming是建立在spark core之上的,也就说spark streaming任务最终执行还是依赖于RDD模型。在转化成最终的RDD模型执行前,spark streaming主要需要处理以下几个问题:
a,每个batch的RDD是怎么根据用户的代码生成的(对应JobGenerator)?
b,数据是怎么从外部接收的(对应receiver)?
c,每个batch的任务是怎么触发的(对应JobGenerator)?
d,怎么保证spark streaming任务的可靠性?
本文主要针对a,b,c这三个问题做深入分析。
1,DStream拓扑结构
当写spark批处理应用时,通过RDD形成了DAG的计算拓扑。类似的,在spark streaming中通过DStream形成了计算模板的拓扑。当定义好DStream的计算模板以后,每个batch就可以基于该模板生成RDD的计算拓扑。以example中streaming的NetworkWordCount为例:
val lines = ssc.socketTextStream(args(0), args(1).toInt, StorageLevel.MEMORY_AND_DISK_SER)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
生成的DStream拓扑结构如下:

以上拓扑结构图中的节点主要分为三类:输入流,一般DStream计算节点,输出流节点。
2,DStream处理的整体流程
当StreamingContext启动以后,streaming任务的整体流程逻辑图如下:

核心要点如下:
1,ReceiverTracker(位于driver端),主要负责对位于executor端的Receiver进行控制。包括通过提交任务启动Receiver,接收Receiver端Block相关的信息汇报等。
2,JobGenerator(位于driver端),主要作用是通过一个定时器定期生成任务。生成任务主要包括四个步骤:
a,根据receiver接收并且上报给ReceiverTracker的信息,生成当前batch的RDD输入数据。
b,根据用户定义的DStream拓扑结构模板生成当前batch的Jobs
c,将步骤b中生成的Job分装成Jobset,交由JobHandler去执行。在Job执行过程中,将有可能触发底层RDD任务提交和计算。
d,通过检查点,保存当前JobGraph的状态。
3,ReceiverSupervisor(位于executor端),主要负责管理executor段的Reciver,包括启动Receiver,保存Reciever接收的数据以及发送相关消息给Driver端的ReceiverTracker。
接下来,将解释一下开头提出的问题
Q1,每个batch的RDD是怎么根据用户的代码生成的(对应JobGenerator)?
首先,应用通过DStream形成了RDD生成的模板。其次,在JobGenerator定时按照batchTime生成的任务的时候,会从输出流开始(ForEachDStream注册),递归地调用DStream中getOrCompute方法,封装成Job。在Job中就包含了每个batch之间的RDD DAG。
Q2,数据是怎么从外部接收的(对应receiver)?
首先,接收数据实在executor端进行的。其次,Receiver持续不断的接受数据,并且将数据通过ReceiverSupervisor借助RecevierHanlder进行保存,最终将数据按block保存,并且向Driver汇报接受的数据信息。
Q3,每个batch的任务是怎么触发的(对应JobGenerator)?
在Driver端的JobGenerator有一个定时器,每隔batchTime时间定期出发一次任务生成。具体要做的事情已阐述。
Q4,怎么保证spark streaming任务的可靠性?
保证可靠性涉及到driver和executor端,在本文中,可以看到的一点是在任务生成以后,会通过检查点方式保存当前JobGraph的状态。其他待后续总结。
深入理解spark streaming的更多相关文章
- 通过案例对 spark streaming 透彻理解三板斧之一: spark streaming 另类实验
本期内容 : spark streaming另类在线实验 瞬间理解spark streaming本质 一. 我们最开始将从Spark Streaming入手 为何从Spark Streaming切入 ...
- Spark Streaming高级特性在NDCG计算实践
从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...
- 大数据开发实战:Spark Streaming流计算开发
1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...
- spark streaming基础知识1
1.怎么理解spark streaming中的dstream? 它是spark streaming的基础数据结构,代表着(time,RDD)序列,有两种生成方式,一种是基于流数据创建(kafka,so ...
- 1.Spark Streaming另类实验与 Spark Streaming本质解析
1 Spark源码定制选择从Spark Streaming入手 我们从第一课就选择Spark子框架中的SparkStreaming. 那么,我们为什么要选择从SparkStreaming入手开始我们 ...
- 3.spark streaming Job 架构和容错解析
一.Spark streaming Job 架构 SparkStreaming框架会自动启动Job并每隔BatchDuration时间会自动触发Job的调用. Spark Streaming的Job ...
- spark第六篇:Spark Streaming Programming Guide
预览 Spark Streaming是Spark核心API的扩展,支持高扩展,高吞吐量,实时数据流的容错流处理.数据可以从Kafka,Flume或TCP socket等许多来源获取,并且可以使用复杂的 ...
- Spark Streaming基础概念
为了更好地理解Spark Streaming 子框架的处理机制,必须得要自己弄清楚这些最基本概念. 1.离散流(Discretized Stream,DStream):这是Spark Streamin ...
- Spark Streaming 入门
概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...
随机推荐
- SEO搜索引擎基础原理
- C++11 std::function、std::bind和lambda表达式
参考博客: C++可调用对象详解-https://www.cnblogs.com/Philip-Tell-Truth/p/5814213.html 一.关于std::function与std::bin ...
- HDU 5651xiaoxin juju needs help
xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- FZU1977 Pandora adventure —— 插头DP
题目链接:https://vjudge.net/problem/FZU-1977 Problem 1977 Pandora adventure Accept: 597 Submit: 2199 ...
- SpringBoot发送简单文本邮件
1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...
- maven配置本地仓库和国内镜像仓库,解决国内访问国外中央仓库速度过慢问题
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 1.配置本地仓库 打开conf文件夹下面的setting.xml文件 红色方框为配置本地仓 ...
- Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】
使用WebClient读取XAP包同目录下的XML文件 我们想要读取XAP包下面的XML文件,需要将此XML文件放在加载XAP包的网页的目录中去,然后使用URI方式读取此URL方式下的XML文件. 首 ...
- [Selenium] Selenium common Actions Examples
1.sendKeys() 在文本框中输入字符串 WebElement searchBox = driver.findElement(By.name("q")); searchBox ...
- 开启sqlplus中执行计划
在sqlplus中我们一般用Autotrace来查看执行计划,从而对于一些语句执行过程分析,开展优化工作.这里就演示一下如何将autotrace权限授予给普通的用户,以scott用户为例(set au ...
- iOS 中的 Block
参考:链接 (1)block作为本地变量(local variable) returnType (^blockName)(parameterTypes) = ^returnType(parameter ...