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

家住魔仙堡 提交于 2020-01-12 01:50:57

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添加到依赖项中。例如,一些常见的例子如下。

Source Artifact
Kafka spark-streaming-kafka-0-10_2.12
Flume spark-streaming-flume_2.12
Kinesis spark-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。这些操作将在后面的小节中详细讨论。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!