StreamingContext、DStream、Receiver深度剖析
本课分成四部分讲解,第一部分对StreamingContext功能及源码剖析;第二部分对DStream功能及源码剖析;第三部分对Receiver功能及源码剖析;最后一部分将StreamingContext、DStream、Receiver结合起来分析其流程。
一、StreamingContext功能及源码剖析:
1、 通过StreamingContext对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务端口9999写入源数据:

2、 StreamingContext的主要功能有:
- 主程序的入口;
- 提供了各种创建DStream的方法接收各种流入的数据源(例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等);
- 通过构造函数实例化StreamingContext对象时,可以指定master URL、appName、或者传入SparkConf配置对象、或者已经创建的SparkContext对象;
- 将接收的数据流传入DStreams对象中;
- 通过StreamingContext对象实例的start方法启动当前应用程序的流计算框架或通过stop方法结束当前应用程序的流计算框架;

二、DStream功能及源码剖析:
1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具体实现子类如下图所示:

3、 以StreamingContext实例的socketTextSteam方法为例,其执行完的结果返回DStream对象实例,其源码调用过程如下图:






socket.getInputStream获取数据,while循环来存储储蓄数据(内存、磁盘)
三、Receiver功能及源码剖析:
1、Receiver代表数据的输入,接收外部输入的数据,如从Kafka上抓取数据;
2、Receiver运行在Worker节点上;
3、Receiver在Worker节点上抓取Kafka分布式消息框架上的数据时,具体实现类是KafkaReceiver;
4、Receiver是抽象类,其抓取数据的实现子类如下图所示:

5、 如果上述实现类都满足不了您的要求,您自己可以定义Receiver类,只需要继承Receiver抽象类来实现自己子类的业务需求。
四、StreamingContext、DStream、Receiver结合流程分析:

(1)inputStream代表了数据输入流(如:Socket、Kafka、Flume等)
(2)Transformation代表了对数据的一系列操作,如flatMap、map等
(3)outputStream代表了数据的输出,例如wordCount中的println方法:



数据数据在流进来之后最终会生成Job,最终还是基于Spark Core的RDD进行执行:在处理流进来的数据时是DStream进行Transformation由于是StreamingContext所以根本不会去运行,StreamingContext会根据Transformation生成”DStream的链条”及DStreamGraph,而DStreamGraph就是DAG的模板,这个模板是被框架托管的。当我们指定时间间隔的时候,Driver端就会根据这个时间间隔来触发Job而触发Job的方法就是根据OutputDStream中指定的具体的function,例如wordcount中print,这个函数一定会传给ForEachDStream,它会把函数交给最后一个DStream产生的RDD,也就是RDD的print操作,而这个操作就是RDD触发Action。
总结:
备注:84课
更多私密内容,请关注微信公众号:DT_Spark
StreamingContext、DStream、Receiver深度剖析的更多相关文章
- 63、Spark Streaming:架构原理深度剖析
一.架构原理深度剖析 StreamingContext初始化时,会创建一些内部的关键组件,DStreamGraph,ReceiverTracker,JobGenerator,JobScheduler, ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
- Objective-C类成员变量深度剖析
目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...
- 大众点评开源分布式监控平台 CAT 深度剖析
一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...
- 深度剖析WordPress主题结构(转)
利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. ...
- LCD深度剖析
LCD 深度剖析 来源:http://blog.csdn.net/hardy_2009/article/details/6922900 http://blog.csdn.net/jaylondon/a ...
- WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)
原文:WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话 ...
- 大兴雷克萨斯深度剖析2013款LS460L_深圳大兴雷克萨斯_太平洋汽车网
大兴雷克萨斯深度剖析2013款LS460L_深圳大兴雷克萨斯_太平洋汽车网 大兴雷克萨斯深度剖析2013款LS460L
随机推荐
- json数据格式的简单案例
json数据是一种文本字符串,它是javascript的原生数据格式,在数据需要多次重复使用时,json数据是ajax请求的首先.(注:ajax返回的数据格式支持三种分别为:文本格式,json.和xm ...
- Python之面向对象:类的内置方法
1.def __add__(self,other): c1+c2 两个实例的加法操作就是执行__add__()方法 2.__str__(self): print一个实例的时候,执行的是__str__( ...
- 使用 redux 监听插件的使用
首先需要在chrome浏览器当中下载redux插件 接着在你的项目当中加上**window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX ...
- gitHub优秀android项目
转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...
- [摸鱼] 配置的tmux的使用攻略!
o~/.tmux.conf <>=ctrl b <>$ 重命名 <>% 水平切割 <>" 垂直切割 <>o 下一个窗口 <& ...
- 内核request_mem_region 和 ioremap的理解【转】
转自:http://blog.csdn.net/skyflying2012/article/details/8672011 版权声明:本文为博主kerneler辛苦原创,未经允许不得转载. 几乎每一种 ...
- Jquery操作基本筛选过滤器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- hdu 5067(暴力搜索)
Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- XXXX公司微课大赛技术储备
XXXX公司微课大赛技术储备 发短信验证 http://www.yunpian.com/ 发邮件 http://sendcloud.sohu.com/ flash头像上传组件 http://www.h ...
- Ubuntu14.04 在右键中添加 在终端中打开
1.在terminal中执行: sudo apt-get install nautilus-open-terminal 此时可能会提示:nable to locate package nautilus ...