01 sparkAPI-阅读总结-
2021-06-29 19:07
Spark Streaming编程指南
- 概观
- 一个快速的例子
-
基本概念
- 链接
- 初始化StreamingContext
- 离散流(DStreams)
- 输入DStreams和Receivers
- DStreams的转换
- DStreams的输出操作
- DataFrame和SQL操作
- MLlib运营
- 缓存/持久性
- 检查点
- 累加器,广播变量和检查点
- 部署应用程序
- 监控应用
-
性能调优
- 减少批处理时间
- 设置正确的批次间隔
- 内存调整
- 容错语义
- 从这往哪儿走
概观
Spark Streaming是核心Spark API的扩展,可实现实时数据流的可扩展,高吞吐量,容错流处理。数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字)中获取,并且可以使用以高级函数表示的复杂算法进行处理map
,例如reduce
,join
和window
。最后,处理后的数据可以推送到文件系统,数据库和实时仪表板。实际上,您可以在数据流上应用Spark的 机器学习和 图形处理算法。
在内部,它的工作原理如下。Spark Streaming接收实时输入数据流并将数据分成批处理,然后由Spark引擎处理,以批量生成最终结果流。
Spark Streaming提供称为离散流或DStream的高级抽象,表示连续的数据流。DStream可以从来自Kafka,Flume和Kinesis等源的输入数据流创建,也可以通过在其他DStream上应用高级操作来创建。在内部,DStream表示为一系列 RDD。
本指南向您展示如何使用DStreams开始编写Spark Streaming程序。您可以使用Scala,Java或Python编写Spark Streaming程序(在Spark 1.2中引入),所有这些都在本指南中介绍。您可以在本指南中找到标签,让您在不同语言的代码段之间进行选择。
注意:有一些API在Python中不同或不可用。在本指南中,您将找到标记Python API,突出显示这些差异。
一个快速的例子
首先,我们将Spark Streaming类的名称和StreamingContext中的一些隐式转换导入到我们的环境中,以便将有用的方法添加到我们需要的其他类(如DStream)。StreamingContext是所有流功能的主要入口点。我们使用两个执行线程创建一个本地StreamingContext,批处理间隔为1秒
import org.apache.spark._ import org.apache.spark.streaming._ import org.apache.spark.streaming.StreamingContext._ // not necessary since Spark 1.3 // Create a local StreamingContext with two working thread and batch interval of 1 second. // The master requires 2 cores to prevent a starvation scenario. val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount") val ssc = new StreamingContext(conf, Seconds(1))
使用此上下文,我们可以创建一个DStream来表示来自TCP源的流数据,指定为主机名(例如localhost
)和端口(例如9999
)
// Create a DStream that will connect to hostname:port, like localhost:9999 val lines = ssc.socketTextStream("localhost", 9999)
此lines
DStream表示将从数据服务器接收的数据流。此DStream中的每条记录都是一行文本。接下来,我们希望将空格字符分割为单词。
// Split each line into words val words = lines.flatMap(_.split(" "))
在我们详细介绍如何编写自己的Spark Streaming程序之前,让我们快速了解一下简单的Spark Streaming程序是什么样的。假设我们想要计算从TCP套接字上侦听的数据服务器接收的文本数据中的字数。您需要做的就是如下。
2.4.0