Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展
Spark Streaming揭秘 Day9
从Receiver的设计到Spark框架的扩展
Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们可以充分领略到Spark框架设计之巧妙,废话少说,让我们来看代码。
解决的问题
在开始之前,让我们先明确一个概念,就是Receiver于inputDStream之间的关系,从如下代码中,我们可以看到,receiver其实是由inputDStream映射得到的,也就是说Receiver和inputDStream是一一对应的。

让我们需要明确一下需要解决的问题,或者说设计的目标。
Receiver其实是一个独立的应用程序,一边不断从外部数据源接收数据,一边向进行数据存储。以如下SocketInputStream为例,其实就是一个标准的Socket数据接收程序。

那么,作为一个应用程序,如何在集群上进行运行就是一个要解决的问题。
通过前面几讲的说明,我们知道,在Spark中是将Receiver作为一个Job来进行运行的。
但是如果只是简单的作为一个Job来运行,因为Spark core并不知道Receiver的特殊性,所以可能在一个executor上启动多个receiver,这时候会出现两个非常大的问题:
- 由于会与其他应用Job共同调度,负载可能不均衡。
 - 如果receiver启动失败的话,可能导致整个应用程序无法工作,无法保证高可用。
 
事实上,对整个Receiver运行的设计,我们就是要突破Spark本身限制,解决这两个关键的问题。
解决负载均衡问题
如下代码是receiver的启动代码:

进入startReceiver

通过上面两段代码,我们可以看到两点。
- 每个Receiver的启动都会触发一个作业。
 - 在启动作业时,是基于scheduledLocation来决定运行的位置。
 
首先,分开作业,可以起到很好的隔离作用,不同receiver互相不会发生影响,并且可以在最大程度负载均衡.
其次,利用RDD可自定义的机制,通过对scheduledLocation的操作,其实SparkStreaming是把负载均衡的策略掌握到了自己手里,而不是使用Spark自身的机制!!!
让下面看下scheduledLocation的生成,策略本身比较复杂,从注释我们可以看到,主要还是会以当前最小负载的原则进行分配,从而确保Receiver尽可能的分布。

解决高可用问题
高可用的设计目标,简单来说,就是只要集群存在,我们希望receiver一定启动成功。
在这里,比较巧妙的使用了Job启动的回调机制,可以看到,当失败时会自动进行重启操作,只要集群在运行,就会进行永无休止的重试。

那Spark原生的重试限制如何解决呢,在如下代码中,实际上是把Spark原生的重试机制进行了短路,和负载均衡类似,将这一机制控制到SparkStreaming手中,绕开了重试次数的限制。

最后,在重试机制中,使用了future的语法,使得重试在缓冲线程池中运行,支持并发启动,还可以控制负载。

其他
说实话,我是有点被这段代码震到了,SparkStreaming中采用了一组非常简洁的代码,就扩展了Spark框架,并解决了一系列其实是在分布式系统中非常通用的问题,真是精彩绝伦!!!
欲知后事如何,且听下回分解
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展的更多相关文章
- Spark Streaming揭秘 Day19 架构设计和运行机制
		
Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...
 - Spark Streaming揭秘 Day11 Receiver Tracker的具体实现
		
Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...
 - 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揭秘 Day29 深入理解Spark2.x中的Structured Streaming
		
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...
 - Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
		
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
 - Spark Streaming揭秘 Day24 Transformation和action图解
		
Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...
 - Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
		
Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...
 
随机推荐
- 聊聊 #pragma 和 // MARK:
			
我去,就这两个东西还要讲?是OC或Swift开发人员都知道是怎么回事好吗?不就是用来标记和分组代码的吗?难道还有别的装逼技能? 当然,其实问大部分人说这两个是什么作用,或者是除了这两个还知道什么的情况 ...
 - BootStrap2学习日记12---注册表单
			
<form method="" action="" class="form-horizontal"> <frameset& ...
 - css笔记18:盒子模型案例分析示范
 - IJKMediaFramework第三方库的使用
			
大多数做直播的时候使用 FFMpeg. IJKMediaFramework也是基于FFMpeg封装 使用起来比较简单,个人觉得如果有能力可以使用 FFMpeg , 使用 FFMpeg对 内存的占用比 ...
 - javaweb学习总结八(xml约束DTD)
			
一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...
 - Ventuz配置Leap Motion环境
			
1.下载Leap Dev Kit 前往官网www.leapmotion.com,下载相应平台的开发包,目前PC版的最新版本为2.3.1. SDK里包含了Leap Motion的安装包,上图第二个.安装 ...
 - [改善Java代码]适时选择getDeclaredxxx和getxxx
			
Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法,例如getDeclaredmethod和getMethod成对出现,getDeclaredConstructors ...
 - poj 2289 网络流 and 二分查找
			
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #d ...
 - 小议jQuery中的事件
			
学了jQuery这么长时间,到这里真的有一种柳暗花明又一村的感觉,在这里先表达一下自己学这一章节的happy心情吧(在严厉的金工实习老师眼皮底下偷偷学习,当然还有各种nerves~). 1加载DOM ...
 - ASP.NET二级域名站点共享Session状态
			
我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...