第84讲:StreamingContext、DStream、Receiver深度剖析

本课分成四部分讲解,第一部分对StreamingContext功能及源码剖析;第二部分对DStream功能及源码剖析;第三部分对Receiver功能及源码剖析;最后一部分将StreamingContext、DStream、Receiver结合起来分析其流程。

一、StreamingContext功能及源码剖析:

1、  通过Spark Streaming对象jssc,创建应用程序主入口,并连上Driver上的接收数据服务端口9999写入源数据:

2、  Spark Streaming的主要功能有:

  • 主程序的入口;
  • 提供了各种创建DStream的方法接收各种流入的数据源(例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等);
  • 通过构造函数实例化Spark Streaming对象时,可以指定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循环来存储储蓄数据(内存、磁盘)

三、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。

总结:

使用Spark Streaming可以处理各种数据来源类型,如:数据库、HDFS,服务器log日志、网络流,其强大超越了你想象不到的场景,只是很多时候大家不会用,其真正原因是对Spark、spark streaming本身不了解。

时间: 2024-10-14 18:43:01

第84讲:StreamingContext、DStream、Receiver深度剖析的相关文章

84课:StreamingContext、DStream、Receiver深度剖析

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

第84课:StreamingContext、DStream、Receiver深度剖析

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

全面深度剖析Spark2--知识点,源码,调优,JVM,图计算,项目

全面深度剖析Spark2--知识点,源码,调优,JVM,图计算,项目 课程观看地址:http://www.xuetuwuyou.com/course/220 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:西瓜老师 课程共14章,316节,课程从Spark相关的各个技术点进行全方位剖析,最后结合实际项目:用户交互式行为分析系统.DMP用户画像系统,对Spark做了综合性的应用讲解,可以说一套在手,打遍天下无敌手! 第1章:Scala  任务1: java和scala

LCD深度剖析

原文出自:方杰|http://fangjie.sinaapp.com/?p=184转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 一.首先是ListView的adapter. 因为微博列表的Item不是规则的,比如说有些微博有转发子微博,有些没有,有些有图片,有些没有图片,所以说很不固定.这里就采用BaseAdapter,要

关于缓存的深度剖析

关于缓存的二三事 本文主要想讲一下缓存的一些详细过程,为了让大家容易看懂,并且可以做出选择性的了解整个缓存的机制,我在这里从问题入手,逐步剖析缓存中的原理和用户代理(可以简单认为是浏览器)在这里所做的操作. 问题: 缓存和304的区别与联系 http响应首部中Age和Max-Age的区别与联系 缓存过期一定会再验证吗 Cache-Control:no-cache;和Cache-Control:max-age:0;的区别 如果以上问题,你完全没有疑问,那你完全可以略过此文了~ 缓存和304的区别

libevent 源码深度剖析十三

libevent 源码深度剖析十三 -- libevent 信号处理注意点 前面讲到了 libevent 实现多线程的方法,然而在多线程的环境中注册信号事件,还是有一些情况需要小心处理,那就是不能在多个 libevent 实例上注册信号事件.依然冠名追加到 libevent 系列. 以 2 个线程为例,做简单的场景分析. 1 首先是创建并初始化线程 1 的 libevent 实例 base1 ,线程 1 的 libevent 实例 base2 : 2 在 base1 上注册 SIGALRM 信号

libevent源码深度剖析二

libevent源码深度剖析二 --Reactor模式 张亮 前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件和Reactor的对应关系,在后面的章节中可能还会提到本节介绍的基本概念. 1 Reactor的事件处理机制 首先来回想一下普通函数调用的机制:程序调用某函数?函数执行,程序等待?函数将结果和控制权返回给程序?程序继续处理. Reactor释义"反应堆",是一种事件驱动机制.和普通

深度剖析:CDN内容分发网络技术原理--转载

1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰.解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证. 网络缓存技术,其目的就是减少网络中冗余数据的重复传输,使之最小化,将广域传输转为本地或就近访问.互联网上传递的内容,大部分为重

libevent源码深度剖析十一

libevent源码深度剖析十一 --时间管理张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值调整等.下面就结合源代码来分析一下. 1 初始化检测 Libevent在初始化时会检测系统时间的类型,通过调用函数detect_monotonic()完成,它通过调用clock_gettime()来检测系统是否支持monotonic时钟类型: [cpp] view plaincopy static v