本课分成四部分讲解,第一部分对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源码走读之四:DStream实时流数据处理 #### 一、系统概述与流数据特性 本文档探讨了Apache Spark Streaming的核心概念之一——**DStream**(Discretized Stream)及其如何实现对实时流数据的有效...
val sc = new StreamingContext(conf, Seconds(5)) sc.checkpoint("file:///usr/local/spark/mycode/streaming/stateful/") // 设置检查点,检查点具有容错机制 val lines = sc.socketTextStream("localhost", ...
它可以根据JobScheduler反馈作业的执行信息来动态调整Receiver数据接收率,避免数据堆积和内存溢出。 下面是一个使用Spark Streaming实现词频统计的示例代码: ```scala import org.apache.spark.streaming....
Apache Spark 是一个强大的分布式计算框架,它提供了实时数据处理的能力,DStream(Discretized Stream)是Spark Streaming的核心概念,用于处理连续的数据流。在Spark的DStream中,"spark-dstream-http"是一个用于...
在Spark Streaming中,数据处理的核心概念是Discretized Stream (DStream),它是连续不断的数据流的离散化表示。DStream是由一系列连续的RDD(Resilient Distributed Datasets)组成的,而RDD是Spark的核心数据结构...
Driver中的StreamingContext会周期性地运行Spark作业来处理这些数据。 SparkStreaming运行流程: 1. 客户端提交Spark Streaming作业后启动Driver,Driver启动Receiver,Receiver接收数据源的数据 2. 每个作业包含...
Receiver将接收到的数据存储在内存中,并报告给StreamingContext,后者则按照预设的周期调度job,由SparkContext将job分发到Executor执行。 SparkStreaming的特点包括易用性、容错性和可扩展性。它的API设计简洁,...
StreamingContext是所有流操作的入口点,负责初始化流计算过程,创建输入DStream,并定义流计算过程中的转换操作和输出操作。在定义输入源和计算之后,通过StreamingContext.start()方法开始接收数据并进行处理。...
StreamingContext会根据设置的批处理的时间间隔将产生的RDD归为一批,这一批RDD就是一个DStream,该DStream里面产生都是相同业务逻辑的RDD,只不过是RDD里面读取的数据不相同。 DStream每隔一段时间生成一个RDD,...
4. 使用 `streamingContext.socketTextStream()` 或 `streamingContext.kafkaStream()` 创建 DStream。对于 Kafka,你需要提供 Kafka 的配置参数,如 bootstrap servers、topic 和 consumer group ID。 5. 在 ...
使用 Spark Streaming 需要首先创建一个 StreamingContext,然后使用 StreamingContext 创建一个 DStream。然后,可以使用 DStream 进行数据处理,例如进行数据清洁、数据转换和数据聚合等。最后,可以使用 DStream ...
- 在这个示例中,首先通过`socketTextStream`方法创建了一个DStream,该DStream负责从特定的服务器IP和端口接收文本数据。 - 接着,通过`flatMap`操作将每行文本数据分割成单词。 - 使用`map`和`reduceByKey`组合...
* 创建 StreamingContext:至少要有两个线程,一个线程用于接收数据,一个线程用于处理数据。 * socketTextStream:用于接收网络数据,可以指定主机和端口号。 * flatMap 和 map 操作:用于处理数据,例如将数据拆分...
7. **启动Spark Streaming程序**:最后,调用`streamingContext.start()`开始接收和处理数据,`streamingContext.awaitTermination()`等待程序结束。 在这个特定的例子中,`KafkaTest1`可能包含了上述步骤的实现。...
5.以下哪些方法可以生成DStream对象? A. KafkaUtils.createStream(…) B. KafkaUtils.createDirectStream(…) C. StreamingContext.socketStream D. StreamingContext.fileStream(…) Answer: ABCD 6....
- **配置**: 通过`StreamingContext.checkpoint`指定目录路径,并通过`DStream.checkpoint`设置检查点间隔时间。 - **限制**: 检查点间隔必须是滑动间隔的整数倍。 #### 八、容错机制 - **RDD容错机制**: Spark ...
1. **创建 Streaming 上下文**:通过 `StreamingContext` 类初始化一个 Spark Streaming 应用。 2. **定义输入源**:配置从哪个数据源接收数据。 3. **定义数据处理逻辑**:通过 DStream API 提供的丰富操作符(如 ...
StreamingContext.socketStream()方法用于从网络套接字读取数据创建DStream,StreamingContext.fileStream()方法用于从文件目录读取数据创建DStream。因此,答案为ABCD。 5. Hive文件格式:Hive是一个数据仓库工具...
与传统的批量处理不同,Spark Streaming 接收实时输入数据流,并将其划分为一系列小批次(即离散化流或 DStream),然后通过 Spark 引擎对这些数据进行处理,最终生成结果数据流。 #### 基本概念 ##### 要点回顾 ...