本期概览:

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. SQLite数据库

    数据持久化: 1.文件存储 适合用于存储一些简单的文本数据或二进制数据 存储数据:openFileOutput(文件名,操作模式),返回值为一个FileOutputStream对象,借助FileOut ...

  2. 浅析word-break work-wrap区别

    word-break:[断词] 定义:规定自动换行的处理方法.   注:通过word-break使用,可以实现让浏览器在任意位置换行. 语法:word-break: normal|break-all| ...

  3. 总结common-dbutils.jar

    2016/4/13 20:19:36 common-dbutils.jar 最核心的类:QueryRunner updata方法: int update(String sql,Object... pa ...

  4. Sublime Text 3 支持的热门插件推荐(转载)

    SublimeText是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁,功能非同凡响,性能快得出奇.这些非常棒的特性 包括任意跳转(Goto Anything).多重选择( ...

  5. mac office 激活

    详见:http://blog.csdn.net/tech4j/article/details/47953311

  6. 标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)

    盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版.其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型.他们对盒子模型的解释各不相同,先来看看我们熟知的标准盒子模型: 从上 ...

  7. 阿里云docker

    https://cr.console.aliyun.com docker 安装mysql image sudo docker pull  mysql docker  运行 mysql docker r ...

  8. 不在折腾----zookeeper-3.4.5

    上传zk安装包 解压 配置(先在一台节点上配置) * 添加一个zoo.cfg配置文件 $ZOOKEEPER/conf mv zoo_sample.cfg zoo.cfg * 修改配置文件(zoo.cf ...

  9. LabVIEW之生产者/消费者模式--队列操作 彭会锋

    LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...

  10. 如何在VISIO 2010/2013 中关闭Shape protection(图形保护)

    最近在画UML图,用到MS visio 2010, 在使用一些网络查找到的图形的时候发现无法编辑,在网上找了找,翻译了下. Visio 2013 的图形保护功能,可以锁定图形的某些特定属性,使其无法被 ...