本课分成四部分讲解,
第一部分对StreamingContext功能及源码剖析;
第二部分对DStream功能及源码剖析;
第三部分对Receiver功能及源码剖析;
最后一部分将StreamingContext、DStream、Receiver结合起来分析其流程。
1、 通过StreamingContext对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务端口9999写入源数据:
2、 StreamingContext的主要功能有:
主程序的入口;
提供了各种创建DStream的方法接收各种流入的数据源(例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等);
通过构造函数实例化StreamingContext对象时,可以指定master URL、appName、或者传入SparkConf配置对象、或者已经创建的SparkContext对象;
将接收的数据流传入DStreams对象中;
通过Spark Streaming对象实例的start方法启动当前应用程序的流计算框架或通过stop方法结束当前应用程序的流计算框架;
二、DStream功能及源码剖析:
1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具体实现子类如下图所示:
3、 以StreamingContext实例的socketTextSteam方法为例,其执行完的结果返回DStream对象实例,其源码调用过程如下图:
socket.getInputStream获取数据,while循环来存储储蓄数据(内存、磁盘)第84课:图解StreamingContext、DStream、Receiver并结合源码分析
1、 Receiver代表数据的输入,接收外部输入的数据,如从Kafka上抓取数据;
2、 Receiver运行在Worker节点上;
3、 Receiver在Worker节点上抓取Kafka分布式消息框架上的数据时,具体实现类是KafkaReceiver;
4、 Receiver是抽象类,其抓取数据的实现子类如下图所示:
5、 如果上述实现类都满足不了您的要求,您自己可以定义Receiver类,只需要继承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。
总结:
使用Spark Streaming流框架技术可以处理各种数据来源类型,如:数据库、HDFS,服务器log日志、网络流,其强大超越了你想象不到的场景,只是很多时候大家不会用,其真正原因是对Spark、Spark Streaming本身不了解。
第一部分对StreamingContext功能及源码剖析;
第二部分对DStream功能及源码剖析;
第三部分对Receiver功能及源码剖析;
最后一部分将StreamingContext、DStream、Receiver结合起来分析其流程。
1、 通过StreamingContext对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务端口9999写入源数据:
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/212217_wafn_2728781.jpg)
2、 StreamingContext的主要功能有:
主程序的入口;
提供了各种创建DStream的方法接收各种流入的数据源(例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等);
通过构造函数实例化StreamingContext对象时,可以指定master URL、appName、或者传入SparkConf配置对象、或者已经创建的SparkContext对象;
将接收的数据流传入DStreams对象中;
通过Spark Streaming对象实例的start方法启动当前应用程序的流计算框架或通过stop方法结束当前应用程序的流计算框架;
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/212351_j6JG_2728781.jpg)
二、DStream功能及源码剖析:
1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具体实现子类如下图所示:
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/212556_ekZC_2728781.jpg)
3、 以StreamingContext实例的socketTextSteam方法为例,其执行完的结果返回DStream对象实例,其源码调用过程如下图:
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/212826_Jegn_2728781.jpg)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/212946_Shrr_2728781.jpg)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/213111_CYD5_2728781.jpg)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0420/213226_myMV_2728781.jpg)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213247_M3b4_2728781.png)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213533_xYgx_2728781.jpg)
socket.getInputStream获取数据,while循环来存储储蓄数据(内存、磁盘)第84课:图解StreamingContext、DStream、Receiver并结合源码分析
1、 Receiver代表数据的输入,接收外部输入的数据,如从Kafka上抓取数据;
2、 Receiver运行在Worker节点上;
3、 Receiver在Worker节点上抓取Kafka分布式消息框架上的数据时,具体实现类是KafkaReceiver;
4、 Receiver是抽象类,其抓取数据的实现子类如下图所示:
5、 如果上述实现类都满足不了您的要求,您自己可以定义Receiver类,只需要继承Receiver抽象类来实现自己子类的业务需求。
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213625_G8M0_2728781.png)
(1)inputStream代表了数据输入流(如:Socket、Kafka、Flume等)
(2)Transformation代表了对数据的一系列操作,如flatMap、map等
(3)outputStream代表了数据的输出,例如wordCount中的println方法:
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213754_OCIl_2728781.png)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213959_1bLE_2728781.png)
![第84课:图解StreamingContext、DStream、Receiver并结合源码分析](http://static.oschina.net/uploads/space/2016/0421/213935_UwsJ_2728781.png)
数据数据在流进来之后最终会生成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。
总结:
使用Spark Streaming流框架技术可以处理各种数据来源类型,如:数据库、HDFS,服务器log日志、网络流,其强大超越了你想象不到的场景,只是很多时候大家不会用,其真正原因是对Spark、Spark Streaming本身不了解。
主编辑:王家林
资料来源于:DT_大数据梦工厂(IMF传奇行动绝密课程)
更多私密内容,请关注微信公众号:DT_Spark
如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,YY房间号:68917580
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31133864/viewspace-2086383/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31133864/viewspace-2086383/