Spark Streaming官方文档翻译基本概念之初始化与Dstream

Spark Streaming官方文档翻译Spark Streaming总览
Spark Streaming官方文档翻译基本概念之初始化与Dstream
Spark Streaming官方文档翻译基本概念之输入数据流和接收器
Spark Streaming官方文档翻译基本概念之转换操作
Spark Streaming官方文档翻译基本概念之输出操作
Spark Streaming官方文档翻译基本概念之sql与Mllib
Spark Streaming官方文档基本概念之缓存与检查点
Spark Streaming官方文档翻译基本概念之累加器、广播变量和检查点
Spark Streaming官方文档翻译Spark Streaming应用之部署,升级,监控
Spark Streaming官方文档翻译Spark Streaming性能调优
Spark Streaming官方文档翻译Spark Streaming容错
Spark Streaming官方文档翻译Spark Streaming +Kafka 集成指南
Spark Streaming官方文档翻译Spark Streaming自定义接收器

基本概念

接下来,我们将脱离简单的示例,并详细介绍Spark Streaming的基础知识。

链接(Linking)

与Spark相似,可以通过Maven Central使用Spark Streaming。要编写自己的Spark Streaming程序,您必须将以下依赖项添加到SBT或Maven项目中。

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.12</artifactId>
    <version>2.4.4</version>
    <scope>provided</scope>
</dependency>
libraryDependencies += "org.apache.spark" % "spark-streaming_2.12" % "2.4.4" % "provided"

要从Kafka、Flume和Kinesis等Spark Streaming核心API中没有的数据源中获取数据,您必须将相应的包 spark-streaming-xyz_2.12添加到依赖项中。例如,一些常见的例子如下。

SourceArtifact
Kafkaspark-streaming-kafka-0-10_2.12
Flumespark-streaming-flume_2.12
Kinesisspark-streaming-kinesis-asl_2.12 [Amazon Software License]

要获得最新的列表,请参考Maven存储库,以获得受支持的源代码和包的完整列表。

初始化StreamingContext

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

scala

可以从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))

appName参数是应用程序在集群UI上显示的名称。master是一个Spark、Mesos、Kubernetes或YARN集群的URL,或者一个特殊的local[*]字符串,在本地模式下运行。实际上,在集群上运行时,您不希望在程序中硬编码master,而是使用spark-submit启动应用程序并在那里接收它。但是,对于本地测试和单元测试,您可以通过local[*]来运行Spark Streaming 进程(检测本地系统中的内核数量)。注意,这在内部创建了一个SparkContext(所有Spark功能的起点),它可以作为ssc.sparkContext访问。

批处理间隔必须根据应用程序的延迟需求和可用的集群资源来设置。有关更多细节,请参阅性能调优部分。

Streaming Context对象也可以从现有的SparkContext对象创建。

import org.apache.spark.streaming._

val sc = ...                // existing SparkContext
val ssc = new StreamingContext(sc, Seconds(1))
  1. 定义上下文之后,您必须执行以下操作。
  2. 通过创建输入DStreams来定义输入源。
  3. 通过对DStreams应用转换和输出操作来定义流计算。
  4. 开始接收数据并使用streamingContext.start()进行处理。
  5. 使用streamingContext.awaitTermination()等待处理停止(手动或由于任何错误)。
  6. 可以使用streamingContext.stop()手动停止处理。

注意点:

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

离散流(Discretized Streams(DStream))

Discretized Streams 或者 DStreams是Spark流提供的基本抽象。它表示连续的数据流,可以是从数据源接收到的输入数据流,也可以是通过转换输入数据流生成的数据流。在内部,DStream由一系列连续的RDDs表示,这是Spark对不可变的分布式数据集的抽象(参见Spark编程指南了解更多细节。DStream中的每个RDD包含来自某个时间间隔的数据,如下图所示。
在这里插入图片描述

应用于DStream上的任何操作都转换为底层RDDs上的操作。例如,在前面将一个行流转换为单词的示例中,flatMap操作应用于行DStream中的每个RDD,以生成 words DStream的RDDs。如下图所示。
在这里插入图片描述

这些底层的RDD转换是由Spark引擎计算的。DStream操作隐藏了这些细节中的大部分,并为开发人员提供了更高级的API。这些操作将在后面的小节中详细讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值