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. PHP.5-DIV+CSS布局网站首页实例

    DIV+CSS布局网站首页实例 网站页面布局 http://www.sj33.cn/digital/wyll/201501/42379.html[页头.页脚.侧边栏和内容区域] #避免各浏览器对CSS ...

  2. 小白日记16:kali渗透测试之弱点扫描-openvas、nessus

    漏洞扫描工具 1.openvas OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器.在kali上默认集成openvas.在kali上,配置相对简单[几乎每天都在更新] 实 ...

  3. mongoDB操作命令及mongoDB的helper

    此项目已开源,开源地址是: http://mongodbhelper-csharp.googlecode.com/svn/trunk/ mongodb的helper using System; usi ...

  4. 错误与修复:ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误,恒处于FF5卷动条位置

    浏览器版本号继续升级过程中.IE9诞生了,IE10 也即将问世,火狐5和6已经发布了,而7和8也快出现了,Opera已经到了11,Chrome还在继续,我也不知道,应该总在14和50之间吧.不管怎样, ...

  5. SSIS 学习(7):包配置(下)【转】

    经过前面几个章节的学习,我们开发的ETL包算已经完成一大半了,但是还不够完美,正如一场足球比赛,前面大家打得很辛苦,传接得也很漂亮,但 是临门一脚的技术不过关,进不了球,一切都是白搭.今天我们就来为大 ...

  6. python(3)-队列

    队列分为双向队列和单向队列: 对于双向队列,同样需要先import collections 创建队列 >>> import collections >>> d = ...

  7. x264命令参数与代码中变量的对应关系

    帧类型选项:  -I/--keyint i_keyint_max 最大IDR帧间距,默认为250  -i/--min-keyint i_keyint_min 最小IDR帧间距,默认为25  --sce ...

  8. hdu 4267 树形DP

    思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...

  9. 多tab页框架的使用场合

    多tab页框架适合应用于功能较少的场合,例如邮箱后台之类的. 对于一些业务功能多且复杂的场合就不适用.打开过多的tab页容易给用户造成混乱,页面的跳转也存在一定的难度. 一种新技术不能完全取代旧技术, ...

  10. [Yii2]Access to debugger is denied due to IP address restriction. The requesting IP address is

    在更新到正式平台,看到runtime/app.log 有 Access to debugger is denied due to IP address restriction. The request ...