本期概览:

ReceiverTracker架构设计

消息循环系统

ReceiverTracker具体的实现

Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的ReceiverTracker接收到数据之后,具体该怎么进行数据处理呢?

为了弄清楚这个问题,首先,我们打开源码

找到ReceiverSupervisorImpl这个类

从源码中可以看出,写数据是通过ReceivedBlockHandler的对象receivedBlockHandler写的。写的过程中有俩种方式,一种是基于WAL方式进行容错写。一种是直接写(相对不安全)。如下图所示

然后存储数据完成后并报告给Driver,以便Driver对元数据进行存储,如下所示

用于汇报给Driver的消息类、如下图所示

上图谈到了Record,要注意到,一般专业的描述处理的数据的大小的时候,应该用多少条记录来描述更科学,一般说数据规模达到多少多少百亿条记录,而不是说数据规模达到多少PB的数据规模,这样不是很科学,因为记录可能有很多字段,比如说,1PB的数据,5个字段,和5PB的数据1个字段是差不多的。所以1PB的数据规模未必比5PB的数据规模体现出一个大数据引擎的数据处理能力。也比如说,有些数据是视频或者音频。更不适合说多少个PB来描述规模大小。

上图说明ReceiverSupervisorImpl中有ReceiverTracker的通信体,能进行与ReceiverTracker的通信

并且ReceiverSupervisorImpl将数据的元数据信息汇报给ReceiverTracker

于是,我们进入ReceiverTracker这个类,这个类是整个流处理数据管理的中心。

ReceiverTracker中有endpoint通信体,这个通信体接收来自ReceiverSuperVisorImpl的元数据的数据汇报。

接下来,我们再进入ReceiverTracker本身,从整体上认识ReceiverTracker。

记录Receiver的三种状态,分别为非活跃状态,正在执行调度任务状态,活跃状态

密封关键字,说明所有的子类都密封在这里,方便管理

/**

* This message will trigger ReceiverTrackerEndpoint to restart a Spark job for the receiver.

*/

这个消息用来告知为receiver启动一个job, ReceiverTracker有很多这样的case class用于通信。

private[streaming] case class RestartReceiver(receiver: Receiver[_])

extends ReceiverTrackerLocalMessage

再比如此类相同的消息

/**

* This message will trigger ReceiverTrackerEndpoint to send stop signals to all registered

* receivers.

*/

private[streaming] case object StopAllReceivers extends ReceiverTrackerLocalMessage

注意:param skipReceiverLaunch Do not launch the receiver. This is useful for testing.,如下图

简单的来说,ReceiverTracker可以简单的说包括Receiver的数据的启动接收,管理,回收三个过程。

事先来个预告,我们将把Streaming流处理的所有的代码一行行的过滤,讲整个streaming通过一滴水看世界。

所有的输入流都会交给grapx对象,因为该对象会将所有的待调度的数据统一调度。

内部还有一个成员叫做ReceiverBlockTracker

ListenerBus非常的重要,后续我们会重点分析ListenerBus的源代码,它在监控层面起着重要的作用。

在这里,可以看出ReceiverTracker的状态有如下的4种状态,分别为

初始化,开始,正在停止中,停止了。

接收到ReceiverSuperVisorImpl远程发送过来的消息之后进行处理的过程在此。

这也是今天的重点之一。

先写日志后再进行下一步操作,这里是出于容错的原因考虑的。

注意:这里如果指定了checkpoint目录的话,才会使得isWriteAheadLogEnabled为true.

ReceivedBlockTrackerLogEvent其实就是元数据信息。

用一个HashMap结构将Stream 与 BlockQueue中的Block一一对应,可谓是真的巧妙到了极点。

再回到我们的消息通信层面。

回复对方,告知对方,addBlock成功。并且保存有数据的元数据信息。

ReceivedBlockTracker类的主要的任务在于将Block分配给没有分配Block的Stream batch。

这是具体分配Block给batch的代码。

这里说明具体的分配是以batch time为单位分配的.

再次看看消息通信体。

这里说启动所有的Receiver.

启动所有的receiver

这样,整个数据接收的环节就打通了。

最后做点补充:

该阶段是CleanupOldBlocks阶段,此时将发送消息给ReceiverSuperVisorImpl,从而让它执行cleanUpOldBlocks方法。


/** Update a receiver's maximum ingestion rate */

最后stopAllReceivers,结束了。


spark发行版笔记13的更多相关文章

  1. spark发行版笔记10

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 数据接收全生命周期的思考 大数据处理框架中,最重要的就是性能,性能是排在前面的.其次再考虑其他的.因为数 ...

  2. spark发行版笔记9

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 1 Receiver生命全周期 首先,我们找到数据来源的入口,入口如下 Receiver的设计是极其巧妙 ...

  3. spark发行版笔记4Spark Streaming事务处理彻底掌握

    Spark Streaming事务处理彻底掌握 感谢DT大数据梦工厂支持提供以下内容,DT大数据梦工厂专注于Spark发行版定制. 内容概括: 1Exactly once 2 输出不重复 1 正如银行 ...

  4. spark发行版笔记11

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  5. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  6. Linux学习之四-Linux发行版及版本比较

    Linux发行版及版本比较 三大家族: Fedora是基于RHEL,CentOS,Scientific Linux, 和Oracle Linux的社区版本.相比RHEL,Fedora打包了显著的更多的 ...

  7. 十大广泛使用的Linux发行版

    回到上世纪90年代,Mandrake Linux还是唯一的Linux发行版:而今天,Linux发行版的数量变得数不胜数.本文为大家整理出了十大广泛使用的Linux发行版,希望能帮助大家在选择合适的Li ...

  8. 《Effective C++》第三版笔记

    阅读此笔记前,请先阅读 <Effective C++>第二版笔记  和  <More Effective C++>笔记 这里只记录与上面笔记不同的条款,主要是 "面对 ...

  9. 简谈ubuntu之DIY发行版

    2007.05.13    二十一世纪到了,每个人都强调自己的个性,于是一种叫做DIY的东西悄然兴起. 操作系统作为全人类智慧的结晶,自然DIY起来难度极大,因而DIY出一个操作系统成就感绝对比买宜家 ...

随机推荐

  1. Nexpose下载安装注册一条龙

    附上两个下载链接: Windows版本(64bit) : http://download2.rapid7.com/download/NeXpose-v4/NeXposeSetup-Windows64. ...

  2. IOS7 edgesForExtendedLayout

    在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll.当你的容器是naviga ...

  3. Canvas实现图片放大缩小移动操作

    对于HTML5相信大家都不陌生,很早就出来了,但是貌似都没有真正的使用过.最近做项目时要实现这样一个需求:一个图片,大小不固定,要求能实现类似地图一样放大.缩小.移动功能.这里就很合适使用html5的 ...

  4. Windows下的Memcache安装

    Windows下的Memcache安装: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 'c:\memca ...

  5. Unity 5 中的全局光照技术详解

    貌似是某位好人翻译的 https://unity3d.com/cn/learn/tutorials/topics/graphics/unity-5-lighting-and-rendering#rd? ...

  6. CentOS 6.3 安装过程

    1.放入光盘 2.安装欢迎界面 进入安装欢迎界面,有四个选项: 1.“Install or upgrade an existing system”:安装或升级现有系统 2. “Install syst ...

  7. 理解RESTful

    REST全称为Representational State Transfer,可以翻译为“表现状态转换”,是由是Roy Thomas Fielding在他2000年的博士论文中提出的,目的是为了得到一 ...

  8. DNS域名解析服务器

    域名解析服务器,靠它把你要访问的网址找到然后把信息送到你电脑上.DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主 ...

  9. struct结构体(剽窃别人的)

    结构是使用 struct 关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构. 一般情况下,我们很少使用结构,而且很多人也并不建议使用结构,但作为.NET Framework 一般型別 ...

  10. easyui combobox 左匹配模糊查询

    之前一直不知道,easyui 的combobox还有从左匹配查询显示数据的. 样式是这样的:(这是数据是已经存在下拉列表里的) 在这样操作的时候,遇到了一个问题.(其实也不算问题的). 就是操作人员在 ...