Spark Streaming揭秘 Day10

从BlockGenerator看接收数据的生命周期

昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Receiver内部,研究下其工作机制。

首先,先总结下SparkStreaming中接收数据的特点:

  1. 数据需要不间断的按照次序接收
  2. 由于在driver中需要保存元数据,在存储数据之后,需要不断汇报给driver

让我们进入接收数据关键的BlockGenerator进行分析。

Block概念

Block是Spark中非常重要的概念,在receiver接收数据过程中也非常的重要。简单来说,Receiver(以Kafka为例)是一条一条接收数据的,但是出于效率考虑,需要合并为block供后续处理。其操作主要分为三步。

Step1:数据接收

会统一将数据放入currentBuffer中,需要注意如果这个时候数据丢失了,就真的丢失了。

BlockGenerator中最为关键的是两个线程:

线程1. blockIntervalTimer把数据合并为block
线程2. blockPushingThread把合并后的block通过BlockManager来存储

Step2:Block生成

blockIntervalTimer以一个固定间隔生成block(默认200ms)从currentBuffer生成Block,放入blocksForPushing。

Step3:Block存储

blockPushingThread每10ms从blocksForPushing中获取数据,并调用pushBlock进行后续处理。

对pushBlock的调用,我们可以跟踪到如下关键代码:
可以看到主要有两项工作,一是进行数据存储,二是向Driver进行汇报!!!

让我们进入存储部分的代码,发现其最终是调用的Spark的BlockManager来进行实际数据的存储。

其他

从ReceiverSupervisor定义的事件中,我们可以发现还有两个比较重要的方法。

  • cleanupOldBlocks,在每个batch处理完,会根据Driver发送的信息将旧的block清理掉,这也是程序能7*24小时持续运行的保证!!!

  • updateRateLimit,可以动态调整消息接收的速度,实际上,是通过限定存储的速度,来限定流动的速度。

最后,最重要的:

从架构角度,我们可以把数据接收模块理解为一个mvc架构。

  • model是Receiver,在底层负责数据的获取。
  • controller是ReceiverSupervisor,主要负责对Receiver的控制,receiver收到数据后,交给ReceiverSupervisor存储数据。
  • view是Driver,其利用元数据对外提供服务,并在需要时通过ReceiverSupervisor调用Receiver获取数据。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期的更多相关文章

  1. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  2. Spark Streaming揭秘 Day18 空RDD判断及程序中止机制

    Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...

  3. Spark Streaming揭秘 Day34 解析UI监听模式

    Spark Streaming揭秘 Day34 解析UI监听模式 今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式. ...

  4. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

  5. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  6. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  7. Spark Streaming揭秘 Day19 架构设计和运行机制

    Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...

  8. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  9. Spark Streaming揭秘 Day1-三大谜团

    Spark Streaming揭秘 Day1 三大谜团 引子 在Spark的众多组件中,Streaming最接近企业级应用程序,学习Spark Streaming,是掌握大数据技术的一条捷径.今天是第 ...

随机推荐

  1. org.apache.hadoop.filecache-*

    我不知道为什么这个包为什么是空的,从名字上看应该是一些管理文件缓存的类吗? 网上也没查到什么,各种群里也没大牛回答. 期望某位大牛能告诉我答案,谢谢

  2. Maven学习小结(四 聚合与继承)

    1.聚合 一次构建多个项目模块. 2.继承 为了消除重复,把很多相同的配置提取出来,例如groupid和version: 2.1 Maven中可以继承的POM元素 groupId :项目组 ID ,项 ...

  3. HTTP协议理解

    HTTP(Hyper Text Transfer Protocol)超文本传输协议,是一种请求响应式协议,类似两国会晤中需要遵守的规则.那么,其中有什么内容特点呢? HTTP特点: 1)支持客户端/服 ...

  4. 类、对象以及jvm运行内存解析

    一.JVM内存的分析: 第一步:存放在硬盘上的程序首先要被加载到内存空间中. 第二步:内存中的jvm找到程序中main函数作为入口,然后开始执行. 第三步:执行过程中的内存管理:内存分为四个部分: 栈 ...

  5. The message queue

    今晚来整理一下消息队列,消息队列是一条由消息连接而成的链表,存在内核里面,通过消息对了的引用标识符来访问,每个消息队列都有一个msqid_ds结构与之对应,这个结构保存了消息队列的当前状态参数,这个结 ...

  6. hdu 4671 瞎搞

    题意:每个用户对数据库的查询请求都会首先用该数据库的服务器序列的第一个去执行任务,若第一个坏了,就由第二个执行.最多只会坏一个服务器.要求是考虑最多坏一个的情况下,所有服务器中执行用户查询的数目最大值 ...

  7. saltstack实战4--综合练习1

    规范配置管理 实际工作中可能会有现网环境,基线环境,开发环境. 需要使用saltstack统一管理.机器多了,业务多了,可能配置文件存放的会比较乱,因此可以统一管理起来 我们可以再加2个目录,test ...

  8. HDOJ2000ASCII码排序

    ASCII码排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. Android之所有权限

    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" >& ...

  10. VS2010与QT的集成开发环境

    http://blog.csdn.net/hbsong75/article/details/9293773 QT与Java有点类似,也是一种跨平台的软件(当然在windows平台和Linux平台需要安 ...