Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期
Spark Streaming揭秘 Day10
从BlockGenerator看接收数据的生命周期
昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Receiver内部,研究下其工作机制。
首先,先总结下SparkStreaming中接收数据的特点:
- 数据需要不间断的按照次序接收
- 由于在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看接收数据的生命周期的更多相关文章
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
- Spark Streaming揭秘 Day18 空RDD判断及程序中止机制
Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...
- Spark Streaming揭秘 Day34 解析UI监听模式
Spark Streaming揭秘 Day34 解析UI监听模式 今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式. ...
- Spark Streaming揭秘 Day33 checkpoint的使用
Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...
- Spark Streaming揭秘 Day32 WAL框架及实现
Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...
- Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析
Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...
- Spark Streaming揭秘 Day19 架构设计和运行机制
Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...
- Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展
Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...
- Spark Streaming揭秘 Day1-三大谜团
Spark Streaming揭秘 Day1 三大谜团 引子 在Spark的众多组件中,Streaming最接近企业级应用程序,学习Spark Streaming,是掌握大数据技术的一条捷径.今天是第 ...
随机推荐
- jquery 设置style:display 其实很方便的
("#id").css('display','none'); $("#id").css('display','block'); 或 $("#id&qu ...
- CSS拾遗+技巧集合
1.实现尖角符号. 这是内联inline-block标签独有的特性. <!DOCTYPE html> <html lang="en"> <head&g ...
- CF Drazil and Factorial (打表)
Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- [改善Java代码]避免带有变长参数的方法重载
建议4: 避免带有变长参数的方法重载 在项目和系统的开发中,为了提高方法的灵活度和可复用性,我们经常要传递不确定数量的参数到方法中,在Java 5之前常用的设计技巧就是把形参定义成Collection ...
- 【转】创业C2C(Copy To China):停车位共享APP,用户、市政能够买账?
如果周六中午想开车到旧金山的Mission吃顿早午餐,笔者劝您还是省省吧.因为不光是到了吃饭的地儿排队得耗上一个小时,就是满大街的兜圈子找停车位都能折腾死人.那个时候您或许就明白了,其实最苦的并不是买 ...
- ActiveMQ(5.10.0) - Configuring the JAAS Authentication Plug-in
JAAS provides pluggable authentication, which means ActiveMQ will use the same authentication API re ...
- 【网络收集】Sql Server datetime 常用日期格式转换
) , sfrq, ) 我们经常出于某种目的需要使用各种各样的日期格式,当然我们可以使用字符串操作来构造各种日期格式,但是有现成的函数为什么不用呢? SQL Server中文版的默认的日期字段date ...
- asp.net发布webservice出现‘Could not write to output file ‘解决办法
Could not write to output file 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET File ...
- JDBC(用Eclipse操作数据库Oracle)的基础操作集合
JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- IE浏览器打开 「兼容性视图」
有些IE上的网页控件需要打开兼容性视图才能使用,不知道是Javascript的原因,还是CSS的原因. 使用环境是用C语言配合boa服务器实现的CGI程序.