StreamingContext、DStream、Receiver深度剖析

本博文主要有一下内容:
(1)对StreamingContext功能及源码剖析;
(2)对DStream功能及源码剖析;
(3)第三部分对Receiver功能及源码剖析;
(4)将StreamingContext、DStream、Receiver结合起来分析其流程。

一、StreamingContext功能及源码剖析:
1、 通过StreamingContext对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务端口9999写入源数据:

JavastreamingContext jssc = new JavaStreamingContext("local[2]",
"JavaNetworkWordCount", new Duration(1000));
Jssc.checkpoint(".");//使用updateStateByKey()函数需要设置checkpoint
//打开本地的端口9999
JavaReceiverInputDStream<String> lines = jssc.socketTextStream("localhost",9999);

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

二、DStream功能及源码剖析:

1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具体实现子类如下图所示
这里写图片描述
这里写图片描述
3、 以StreamingContext实例的socketTextSteam方法为例,其执行完的结果返回DStream对象实例,其源码调用过程如下图:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述
socket.getInputStream获取数据,while循环来存储储蓄数据(内存、磁盘)

三、Receiver功能及源码剖析:

1、Receiver代表数据的输入,接收外部输入的数据,如从Flume,Kafka上抓取数据;
2、Receiver运行在Worker节点上;
3、Receiver在Worker节点上抓取Kafka分布式消息框架上的数据时,具体实现类是KafkaReceiver;
4、Receiver是抽象类,其抓取数据的实现子类如下图所示:
5、 如果Receiver实现类都满足不了您的要求,您自己可以定义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。

博文内容源自DT大数据梦工厂Spark课程。相关课程内容视频可以参考:
百度网盘链接:http://pan.baidu.com/s/1slvODe1(如果链接失效或需要后续的更多资源,请联系QQ460507491或者微信号:DT1219477246 获取上述资料)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值