--- Spark学习(玖)- Spark Streaming核心概念与编程

本文介绍了Spark Streaming的工作原理,包括其基本的StreamingContext和DStream概念。通过创建StreamingContext启动流处理,DStream表示连续数据流,由一系列RDD组成。输入DStreams与Receivers关联,用于接收数据。文章详细讨论了Transformation和Output Operations,包括无状态和有状态转换,以及窗口操作。同时,提到了检查点机制在容错中的作用,以及处理socket数据和文件系统数据的案例实战。
摘要由CSDN通过智能技术生成

Spark streaming以及基本工作原理

接收实时输入数据流,然后将数据拆分成多个batch,比如每收集1秒的数据封装为一个batch,然后将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,其中的数据,也是由一个一个的batch所组成的。
在这里插入图片描述

核心概念之StreamingContext

要初始化一个Spark流程序,必须创建一个StreamingContext对象,它是所有Spark流功能的主要入口点。

可以从SparkConf对象创建StreamingContext对象。

import org.apache.spark._
import org.apache.spark.streaming._

val conf = new SparkConf().setAppName(appName).setMaster(master)
val ssc = new StreamingContext(conf, Seconds(1))

batch interval可以根据你的应用程序需求的延迟要求以及集群可用的资源情况来设置;具体可以参考官网
http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html#initializing-streamingcontext

定义上下文之后,您必须执行以下操作

1、通过创建输入DStreams定义输入源。
2、通过对DStreams应用转换和输出操作来定义流计算。
3、开始接收数据并使用streamingContext.start()进行处理。
4、使用streamingContext.awaitTermination()等待进程停止(手动或由于任何错误)。
5、可以使用streamingContext.stop()手动停止处理。

注意

  • 一旦Context启动,就不能设置或添加新的流计算。
  • Context一旦停止,就不能重新启动。【start()不能再stop()之后】
  • 在同一时段一个StreamingContext只能存活在一个JVM。
  • StreamingContext上的stop()也会停止SparkContext。若要仅停止StreamingContext,请将名为stopSparkContext的stop()的可选参数设置为false。
  • 可以重用SparkContext来创建多个StreamingContext,只要在创建下一个StreamingContext之前停止前一个StreamingContext(不停止SparkContext)。

核心概念之DStream

http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html#discretized-streams-dstreams
Discretized Stream或DStream是Sparkstreaming提供的基本抽象。它表示连续的数据流,要么是从源接收到的输入数据流,要么是通过转换输入流生成的经过处理的数据流。在内部,DStream由一系列连续的rdd表示,rdd是Spark对不可变的分布式数据集的抽象(有关更多细节,请参阅Spark编程指南)。DStream中的每个RDD都包含来自某个时间间隔的数据,如下图所示。
在这里插入图片描述
应用于DStream的任何操作都转换为底层rdd上的操作。例如,在前面将行流转换为单词的示例中,flatMap映射操作应用于行DStream中的每个RDD,以生成words DStream的RDD。如下图所示。
在这里插入图片描述
这些底层的RDD转换由Spark引擎计算。DStream操作隐藏了大部分细节,并为开发人员提供了一个更高级的API,以便于使用。这些操作将在后面几节中详细讨论。

个人总结:对DStream操作算子,比如map/flatMap,其实底层会被翻译为对DStream中的每个RDD都做相同的操作;
因为一个DStream是由不同批次的RDD所构成的。

核心概念之Input DStreams和Receivers

Input DStreams是表示从流源头接收的输入数据流的DStreams。

在这个上个spark学习笔记八的例子中,lines是一个输入DStream,因为它表示从netcat服务器接收到的数据流。

每个输入DStream(除了文件系统;文件系统已经存在直接就可以处理不需要接受)都与一个Receiver(Scala doc、Java doc)对象相关联,该对象从源接收数据并将其存储在Spark内存中进行处理。

Spark流提供了两类内置流源
基本资源:StreamingContext API中直接可用的资源。示例:file systems, socket 连接。
高级资源:可以通过额外的实用程序类获得Kafka、Flume、Kinesis等资源。如链接一节中所讨论的,这些需要针对额外依赖项进行链接。

注意
1、在本地运行Spark流程序时,不要使用“local”或“local[1]”作为主URL。这两种方法都意味着只使用一个线程在本地运行任务。如果您正在使用基于接收器的输入DStream(例如socket、Kafka、Flume等),那么将使用单个线程来运行接收器,没有线程来处理接收到的数据。因此,在本地运行时,始终使用“local[n]”作为主URL,其中要运行的接收方数量为n >(有关如何设置主URL的信息,请参阅Spark属性)。
2、将逻辑扩展到在集群上运行时,分配给Spark流应用程序的内核数量必须大于接收器的数量。否则系统将接收数据,但无法处理它。

基本资源

我们已经在快速示例中查看了ssl . sockettextstream(…),它从通过TCP套接字连接接收到的文本数据创建DStream。除了套接字,StreamingContext API还提供了从文件创建DStreams作为输入源的方法

File Streams:对于从与HDFS API(即HDFS、S3、NFS等)兼容的任何文件系统上的文件读取数据,可以将DStream创建为:

 streamingContext.fileStream[KeyClass, ValueClass, InputFormatClass]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值