Spark流计算(二)
来源:互联网 发布:深入浅出java虚拟机 编辑:程序博客网 时间:2024/05/22 12:58
连接
与Spark相似,Spark Streaming可通过Maven Central获得。需要加入如下依赖
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>2.1.1</version></dependency>对于处理来自Kafka,Flume和Kinesis的数据,由于它们不在Spark Streaming核心API中,我们需要加入相应的依赖,例如
Source Artifact
Kafka spark-streaming-kafka-0-8_2.11
Flume spark-streaming-flume_2.11
Kinesis spark-streaming-kinesis-asl_2.11 [Amazon SoftwareLicense]
初始化StreamingContext
可通过SparkConf对象创建StreamingContext
from pyspark import SparkContextfrom pyspark.streaming import StreamingContextsc = SparkContext(master, appName)ssc = StreamingContext(sc, 1)appName参数是应用显示在UI集群中的名称。master是Spark,Mesos或者YARN集群URL,或者一个特殊的local[*]在本地运行。实践中,当运行一个集群不会在程序中指定master,而是用spark-submit启动应用然后从那里接收。但是对于本地测试和单元测试,可以传递local[*](检测本地系统的核数)。注意这将建立一个SparkContext,可通过ssc.sparkContext访问。批次间隔要根据应用的潜在要求和可获得的集群资源设置.
环境定义后,需进行如下工作:
1、通过建立输入DStreams定义输入源
2、通过应用转换和输出操作到DStreams定义流计算
3、开始接收数据并用streamingContext.start()处理
4、等待进程被停止(手动或出错),使用streamingContext.awaitTermination()
5、进程可被手动停止,使用streamingContext.stop()
需要记住的问题:
一旦环境还是运行,无法设置或添加新的流计算
一旦环境被停止,无法重启
在同一时间一个JVM上只有一个活跃的StreamingContext
作用于StreamingContext的stop()同时停止SparkContext, 如果只需停止StreamingContext,设置可选参数stopSparkContext为假。
一个SparkContext可以反复用来创建多个StreamingContext,只要前面的StreamingContext已停止(SparkContext未停止)下一个StreamingContext还未创建。
离散化流DStreams
离散化流或者DStream是Spark Streaming提供的基本抽象。体现了连续的数据流,来自源或由转换输入流产生的经处理的数据流。在内部,一个DStream有连续的RDDs系列体现,是Spark不可更改、分布式数据集的抽象。DStream中每个RDD包含一定间隔的数据。如下图所示
对DStream的任何操作转化为对下层RDDs的操作。例如,在之前的将文本流转化为词中,flatMap操作被应用于lines DStream的每个RDD并生成words DStream,如下图所示
这些底层RDD转换由Spark引擎计算。DStream操作隐藏了大部分细节,为开发者提供了便利的高层API。
输入DStreams和接收器
输入DStreams是体现接收自源的输入流数据。在此前例子中,lines是输入DStreams,体现了接收自netcat服务器的数据流。每个输入DStream(除了文件流)与一个接收器对象相连,该对象接收来自源的数据并将它储存在Spark内存中待处理。
Spark Streaming提供两类内置留源:
基本源:直接在StreamingContext API可获得源,例如文件系统,端口连接。
高级源:例如Kafka,Flume,Kinesis等,这些如此前所述需要连接额外的依赖。
注意,如果想在你的流应用中并行接收多个数据流,可以构建多个输入DStreams。这将构建多个接收器同时接收多个数据流。注意一个Spark工作者/执行者是一个长期运行任务,因此会占用分配给Spark Streaming应用的一个核。因此,记住Spark Streaming应用需要分配足够的核(或线程,如果本地运行)来处理接收的数据和运行接收器。
记住的点
当运行一个本地Spark Streaming程序,不要使用local或者local[1],作为主URL。它们意味着只有一个线程会用来运行本地任务。如果基于一个接收器(如端口,Kafka,Flume等)来使用输入DStream,那么单一线程会被用来运行接收器,而无法处理接收的数据。因此,当本地运行时,总是使用local[n]作为主URL,n>运行的接收器数量。
延展到在集群上运行,分配给Spark Streaming应用的核数量必须大于接收器的数量,否则系统会接收数据,但无法处理它们。
基本源
我们在此前的例子中接触了ssc.socketTextStream(...),从TCP端口连接接收文本数据并建立一个DStream,除端口外,StreamingContext API提供方法从文件创建DStreams作为输入源。
文件流:从任何与HDFS API兼容的文件系统(HDFS,S3,NFS等)的文件中读取数据。
streamingContext.textFileStream(dataDirectory)
Spark Streaming会监视dataDirectory文件夹,并处理其中的任何文件(不支持嵌入文件夹中的文件),注意:
文件应有相同的数据格式
文件需要通过atomically移动或重命名到该数据文件夹的方式在dataDirectory里创建
一旦移动不能改变文件。所以如果文件被连续追加,新的数据会被读取。
对于简单的文本文件,有一个更简单的方法streamingContext.textFileStream(dataDirectory)。并且文件流不需要运行一个接收器,所以不需要分配核。
注意Python API里没有fileStream,只能使用textFileStream。
基于自定义接收器的流:DStreams可以通过自定义的接收器接收数据流并创建DStreams。
RDDs对列的流:使用测试数据测试Spark Streaming应用,可以基于一队RDDs来创建DStreams,使用streamingContext.queueStream(queueOfRDDs)。每个推倒队中的RDD被视为在DStream中的一批次数据,并作为流处理。
高级源
从Spark2.1.1开始,在Python API中可用Kafka,Kinesis和Flume。
注意高级源不在Spark壳中,因此基于高级源的应用无法在壳中被测试。如果确实希望在Spark壳中使用它们,需要下在相应的Maven artifact’s JAR以及依赖并加入到classpath路径中。
一些高级源有:
Kafka: Spark Streaming 2.1.1 is compatible with Kafka broker versions 0.8.2.1 or higher. See theKafka Integration Guide for more details.
Flume: Spark Streaming 2.1.1 is compatible with Flume 1.6.0. See theFlume Integration Guide for more details.
Kinesis: Spark Streaming 2.1.1 is compatible with Kinesis Client Library 1.2.1. See theKinesis Integration Guide for more details.
Python不支持
只需执行一个用户定义的接收器接收自定义源的数据并推到Spark中。
接收器稳定性
根据稳定性可将数据源分为两类。允许接收传送的数据如Kafka和Flume。如果从这些可靠的源接收数据的系统准确地接收数据,可以保证没有数据因为任何失败而损失。
可靠的接收器——接收数据并以冗余方式存储在Spark后,准确地发出接收信号到一个可靠的源。
不可靠的接收器——不发送接收信号。可以用于不支持接收认可的源,或者对于那些可靠但不想或不需要使用接收机制的源。
- Spark流计算(二)
- Spark图计算(二)
- Spark流计算(一)
- Spark流计算(三)
- Spark流计算(四)
- Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark Streaming(下)--实时流计算Spark Streaming实战
- 协同过滤itembase计算Spark实现(二)
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark(六) -- Spark计算模型
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
- Android Studio如何删除module
- Collection 带All的功能演示
- 模板小结
- 几个经典的特征分析方法
- Spark流计算(二)
- Apache Zeppelin 中 R 解释器
- windows环境下lib和dll的区别和联系详细
- JSP页面跳转的五种方法
- XtraBackup error:log block numbers mismatch分析处理
- Java8中 Date和LocalDateTime的相互转换
- 前端入门需要收藏的各种最新技术中文文档地址
- tcpcopy 上手介绍和测试说明
- jdk动态代理