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的更多相关文章

  1. 通过案例对 spark streaming 透彻理解三板斧之一: spark streaming 另类实验

    本期内容 : spark streaming另类在线实验 瞬间理解spark streaming本质 一.  我们最开始将从Spark Streaming入手 为何从Spark Streaming切入 ...

  2. Spark Streaming高级特性在NDCG计算实践

    从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...

  3. 大数据开发实战:Spark Streaming流计算开发

    1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...

  4. spark streaming基础知识1

    1.怎么理解spark streaming中的dstream? 它是spark streaming的基础数据结构,代表着(time,RDD)序列,有两种生成方式,一种是基于流数据创建(kafka,so ...

  5. 1.Spark Streaming另类实验与 Spark Streaming本质解析

    1 Spark源码定制选择从Spark Streaming入手  我们从第一课就选择Spark子框架中的SparkStreaming. 那么,我们为什么要选择从SparkStreaming入手开始我们 ...

  6. 3.spark streaming Job 架构和容错解析

    一.Spark streaming Job 架构 SparkStreaming框架会自动启动Job并每隔BatchDuration时间会自动触发Job的调用. Spark Streaming的Job ...

  7. spark第六篇:Spark Streaming Programming Guide

    预览 Spark Streaming是Spark核心API的扩展,支持高扩展,高吞吐量,实时数据流的容错流处理.数据可以从Kafka,Flume或TCP socket等许多来源获取,并且可以使用复杂的 ...

  8. Spark Streaming基础概念

    为了更好地理解Spark Streaming 子框架的处理机制,必须得要自己弄清楚这些最基本概念. 1.离散流(Discretized Stream,DStream):这是Spark Streamin ...

  9. Spark Streaming 入门

    概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...

随机推荐

  1. Hadoop spark mongo复制集

    启动hadoop cd /usr/local/hadoop/hadoop $hadoop namenode -format # 启动前格式化namenode $./sbin/start-all.sh ...

  2. UDP 端到端

    创建发送端 1.建立DatagramSocket对象,该端点建立,系统会随机分配一个端口,如果不想随机分配,可手动指定. 2.将数据进行packet封装,必须指定目的地址和端口. 3.通过socket ...

  3. openfire学习(一)

    需要开发一款软件,其中的即时通讯功能使用xmpp协议来做,服务端用openfire. openfire的下载和配置就不多说,可能大多数人第一次用会遇到登陆不了的问题,我也遇到了,事实上登陆错误是因为用 ...

  4. KbmMW资源汇总(特别是xalion的文章)

    KbmMW框架是收费的,不在此提供下载,如需购买,请自行联系作者Kim Madsen. 网址资源: 官网主页:http://www.components4programmers.com/product ...

  5. ES6的相关新属性

    ES6  引入了类这个概念. 1.class……extends es6中的class与es5 中的function差不多: class Student extends People , student ...

  6. 百度地图API--信息窗口

    信息窗口 -----纯文本信息窗口 为了更方便的提示用户,在地图的指定的地方添加文本信息的窗口,给用户直观展示信息,下面是如何添加一个纯文本的信息窗口. 下面是添加一个文本窗口: /* * 添加纯文本 ...

  7. GCD深入理解(1)

    写在前面 本文原文为raywenderlich的<grand-central-dispatch-in-depth-part-1>:顺便提及一下,笔者认为,对于iOS初学者而言,raywen ...

  8. ng2中文文档地址

    https://angular.cn/docs/ts/latest/guide/displaying-data.html

  9. 尚观Linux最佳入门高清视频教程033/133/253

    [高清]Linux 最佳入门ULE112- RHCE033部分高清视频教程[尚观原创] 视频简介:高清RHCE033部分是RHCE考试中的基础部分,同时也是我们Linux入门的必 备学习资料.想学好L ...

  10. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP

    题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...