频道栏目
首页 > 网络 > 云计算 > 正文

Spark定制版:011~SparkStreaming源码解读之Driver中的ReceiverTracker架构设计以及具体实现彻底研究

2016-06-08 09:01:20         来源:zisheng_wang_DATA的博客  
收藏   我要投稿

本讲内容:

a. ReceiverTracker的架构设计
b. 消息循环系统
c. ReceiverTracker具体实现

注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解。

上节回顾

上一讲中,我们主要给大家介绍Spark Streaming在接收数据的全生命周期贯通;

a. 当有Spark Streaming有应用程序的时候Spark Streaming会持续不断的接收数据

b. 一般Receiver和Driver不在一个进程中的,所以接收到数据之后要不断的汇报给Driver

c. Spark Streaming要接收数据肯定要使用消息循环器,循环器不断的接收到数据之后,然后将数据存储起来,再将存储完的数据汇报给Driver

d. Sparkstreaming接收数据的整个流程类似于MVC模式,M就是Receiver,V就是Driver,C就是ReceiverSupervisor

e. ReceiverSupervisor是控制器,Receiver的启动是靠ReceiverTracker启动的,Receiver接收到数据之后是靠ReceiverSupervisor存储数据的。然后Driver就获得元数据也就是界面,通过界面来操作底层的数据,这个元数据就相当于指针

开讲

上节课讲到了Receiver是如何不断的接收数据的,并且接收到的数据的元数据会汇报给ReceiverTracker

本讲我们看看ReceiverTracker具体的架构及其功能、源码实现

ReceiverTracker的架构设计

a. ReceiverTracker以Driver中具体的算法在具体的Executor之上启动Receiver,而且启动Receiver的方式是把每个Receiver封装成一个Task, 此时一个Job中就一个Task,而Task中就一条数据,也就是Receiver数据,实质上说,ReceiverTracker启动Receiver之时就会封装在一个个Job,有多个Job就有多个Receiver,即有多个Receiver启动就有多个Job封装

b. ReceiverTracker在启动Receiver的时候,有一个Receiversupervisor其里面有一个ReceiversupervisorImpl实现类, Receiversupervisor实际上启动之时就启动了Receiver,Receiver不断的接收数据,通过BlockGenerator把自已“接收的数据”变成一个个的Block。然后在时间定时器的作用下会不断的把数据存储(此时存储有2种方式,第一种是通过BlockManager方式存储,另一种先写日志Write,通过WAL方式),数据存储之后ReceiverSupervisorImpl会把存储后的数据的元数据Metadate汇报给ReceiverTracker,其实是汇报给ReceiverTracker中的RPC实体ReceiverTrackerEndpoint

c. ReceiverTracker用来管理Receiver中的数据执行,数据执行层面包括Receiver的启动、回收、执行过程中接收数据的管理,当然也包括“Receiver”的容错

当ReceiverSupervisorImpl将元数据汇报给ReceiverTracker,ReceiverTracker接收数据之后,是怎么对数据进行管理呢?

就让我们走进源码一探究竟吧

首先,我们来看看ReceiverSupervisorImpl类

receivedBlockHandler方法,是用来写数据

这里写图片描述

PushAndReportBlock存储Block数据,且把信息汇报给Driver<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="这里写图片描述" src="http://www.2cto.com/uploadfile/Collfiles/20160608/20160608090447150.png" title="\" />

上面代码中,trackerEndpoint其实就是ReceiverTracker中的ReceiverTrackerEndpoint

这里写图片描述

PushAndReportBlock中, ReceivedBlockInfo:封装Block的存储信息

这里写图片描述

上面代码中,ReceivedBlockStoreResult,存储Blocks

这里写图片描述

ReceiverTracker的源码遍历

Receiver和ReceiverTracker之间通信的是怎么完成的?

这里写图片描述

而Driver和ReceiverTrackerEndpoint之间的交流是通过ReceiverTrackerLocalMessage进行的

这里写图片描述

相关TAG标签 架构 源码
上一篇:Spark(1.6.1)Sql编程指南+实战案例分析
下一篇:openstack高可用环境搭建(一):非高可用环境的搭建
相关文章
图文推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站