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. JavaScript 之 页面跳转及Frame动态加载

    一.页面跳转 JS跳转大概有以下五种方式: 1.跳转到B页面 <script language="javascript" type="text/javascript ...

  2. IIS 之 添加绑定域名 或 设置输入IP直接访问网站

    1.打开IIS,右键站点 → 编辑绑定,弹出“网站绑定”窗口,如下图:   2.点击“添加”,弹出“添加网站绑定”窗口,如下图:   注意:若想输入 IP 地址直接访问,则可以有以下两种设置任一均可: ...

  3. Jquery 之 日常积累(一)

    1.jquery函数在参数中传递 this,正确的写法: //页面中用 GetString(this); //脚本中定义 function GetString(obj){ var str = $(ob ...

  4. Android自定义View,高仿QQ音乐歌词滚动控件!

    最近在以QQ音乐为样板做一个手机音乐播放器,源码下篇博文放出.今天我想聊的是这个QQ音乐播放器中歌词显示控件的问题,和小伙伴们一起来探讨怎么实现这个歌词滚动的效果.OK,废话不多说,先来看看效果图: ...

  5. PHP读书笔记(3)-常量

    什么是常量 什么是常量?常量可以理解为值不变的量 :或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.手册上是这么定义PHP的常量:常量是一个简单值的标识符(名字).如同其名称所暗示的,在脚本 ...

  6. Oracle中exists与in的区别

    有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...

  7. python截取中文字符串

    python的中文处理还是比较麻烦的,utf-8的字符串的长度是1-6个字符,一不小心就会从中截断,出现所谓的乱码.下面这个函数提供了,从一段utf-8编码的字符串中,截取固定长度的字串.ord(ch ...

  8. 软件包 java.util 的分层结构

    概述  软件包  类  使用   树  已过时  索引  帮助  JavaTM Platform Standard Ed. 6  上一个   下一个 框架    无框架    所有类         ...

  9. JavaBean在JSP中显示时间

    创建DateTimeBean的类,将其放置于org.caiduping.bean的包中,实现时间,星期的封装. package org.caiduping.bean; import java.text ...

  10. Visual Assist X 10.6.1837完美破解版(带VS2010破解)

    Visual Assist X 10.6.1837完美破解版(带VS2010破解) 实用软件, 资源分享Add comments 八102011 转载自:http://www.blog.namind. ...