`
IMF_Peter
  • 浏览: 632 次
社区版块
存档分类
最新评论

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本身不了解。
编写人:IMF-Spark Steaming企业级开发实战小组

主编辑:王家林

备注:

资料来源于:DT_大数据梦工厂(IMF传奇行动绝密课程)

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580
分享到:
评论

相关推荐

    Apache Spark源码走读之4 -- DStream实时流数据处理

    ### Apache Spark源码走读之四:DStream实时流数据处理 #### 一、系统概述与流数据特性 本文档探讨了Apache Spark Streaming的核心概念之一——**DStream**(Discretized Stream)及其如何实现对实时流数据的有效...

    DStream输出操作

    val sc = new StreamingContext(conf, Seconds(5)) sc.checkpoint("file:///usr/local/spark/mycode/streaming/stateful/") // 设置检查点,检查点具有容错机制 val lines = sc.socketTextStream("localhost", ...

    Dstream 入门.pptx

    接下来,编写主程序StreamWordCount,主要包括初始化Spark配置、创建StreamingContext、创建DStream、处理数据以及启动和等待结束流程。 初始化Spark配置是通过创建SparkConf对象实现的,通过设置master属性和应用...

    5 创建DStream.pptx

    首先,需要设置Spark配置,并创建一个StreamingContext,然后可以利用定义好的队列创建DStream。对于WordCount的计算,可以运用DStream的map、flatMap、reduceByKey等转换操作,最终展示计算结果。 3. Kafka 数据源...

    DStream 输出.pptx

    2. 输出操作的必要性:如果在StreamingContext中没有设定任何输出操作,那么整个context都不会启动,这意味着任何数据处理都不会发生。 3. 常见的输出操作: - print(): 在Driver程序中打印出DStream中数据的前10...

    【SparkStreaming篇01】SparkStreaming之Dstream入门1

    它可以根据JobScheduler反馈作业的执行信息来动态调整Receiver数据接收率,避免数据堆积和内存溢出。 下面是一个使用Spark Streaming实现词频统计的示例代码: ```scala import org.apache.spark.streaming....

    spark-dstream-http:用于 HTTP 的 Apache Spark DStream

    Apache Spark 是一个强大的分布式计算框架,它提供了实时数据处理的能力,DStream(Discretized Stream)是Spark Streaming的核心概念,用于处理连续的数据流。在Spark的DStream中,"spark-dstream-http"是一个用于...

    SparkStreaming .pptx

    每个输入DStream都与一个Receiver(接收器)相关联,Receiver运行在应用的执行器进程中,负责从输入源收集数据。然而,与RDD(弹性分布式数据集)不同的是,Receiver不会将数据保存为RDD,而是将收集到的数据复制到...

    DStream输出之使用foreachRDD()将数据写入诸如Mysql的外部数据库中

    在Spark Streaming中,数据处理的核心概念是Discretized Stream (DStream),它是连续不断的数据流的离散化表示。DStream是由一系列连续的RDD(Resilient Distributed Datasets)组成的,而RDD是Spark的核心数据结构...

    Spark讲义(下)1

    Driver中的StreamingContext会周期性地运行Spark作业来处理这些数据。 SparkStreaming运行流程: 1. 客户端提交Spark Streaming作业后启动Driver,Driver启动Receiver,Receiver接收数据源的数据 2. 每个作业包含...

    SparkStreaming

    Receiver将接收到的数据存储在内存中,并报告给StreamingContext,后者则按照预设的周期调度job,由SparkContext将job分发到Executor执行。 SparkStreaming的特点包括易用性、容错性和可扩展性。它的API设计简洁,...

    Spark Streaming运行原理.pptx

    DStream通过输入数据源创建,或是通过对其他DStream应用高阶函数(如map、reduce等)构建。DStream本质上是一系列连续产生的RDD,每个RDD包含了一个时间区间内的数据。 DStream和RDD之间的关系是,对DStream应用的...

    流式计算组件Spark Streaming使用

    StreamingContext是所有流操作的入口点,负责初始化流计算过程,创建输入DStream,并定义流计算过程中的转换操作和输出操作。在定义输入源和计算之后,通过StreamingContext.start()方法开始接收数据并进行处理。...

    实战Spark3 实时处理,掌握两套企业级处理方案(完结11章)

    4. Spark Streaming 编程步骤:课程指导了如何使用 Spark Streaming 进行编程,包括创建 StreamingContext, 输入 DStream 定义输入源, 应用转换操作和输出操作,以及开始接收数据和处理流程。 5. 微批次架构:详细...

    走进Spark Streaming

    StreamingContext会根据设置的批处理的时间间隔将产生的RDD归为一批,这一批RDD就是一个DStream,该DStream里面产生都是相同业务逻辑的RDD,只不过是RDD里面读取的数据不相同。 DStream每隔一段时间生成一个RDD,...

    Spark Streaming 示例

    4. 使用 `streamingContext.socketTextStream()` 或 `streamingContext.kafkaStream()` 创建 DStream。对于 Kafka,你需要提供 Kafka 的配置参数,如 bootstrap servers、topic 和 consumer group ID。 5. 在 ...

    大数据sparkStreaming.docx

    使用 Spark Streaming 需要首先创建一个 StreamingContext,然后使用 StreamingContext 创建一个 DStream。然后,可以使用 DStream 进行数据处理,例如进行数据清洁、数据转换和数据聚合等。最后,可以使用 DStream ...

    Spark-Streaming编程指南.docx

    - 在这个示例中,首先通过`socketTextStream`方法创建了一个DStream,该DStream负责从特定的服务器IP和端口接收文本数据。 - 接着,通过`flatMap`操作将每行文本数据分割成单词。 - 使用`map`和`reduceByKey`组合...

    Spark学习笔记Spark Streaming的使用

    * 创建 StreamingContext:至少要有两个线程,一个线程用于接收数据,一个线程用于处理数据。 * socketTextStream:用于接收网络数据,可以指定主机和端口号。 * flatMap 和 map 操作:用于处理数据,例如将数据拆分...

Global site tag (gtag.js) - Google Analytics