[Spark]Spark Streaming 指南四 输入DStreams和Receivers
1. 输入DStream与Receiver
输入DStreams表示从源中获取输入数据流的DStreams。在指南一示例中,lines表示输入DStream,它代表从netcat服务器获取的数据流。每一个输入DStream(除 file stream)都 与一个接收器Receiver相关联,接收器从源中获取数据,并将数据存入Spark内存中来进行处理。 输入DStreams表示从数据源获取的原始数据流。Spark Spark Streaming提供了两类内置的流源(streaming sources):
基本源(Basic sources) - :StreamingContext API中直接可用的源。 示例:文件系统(file system)和套接字连接(socket connections)。
高级源(Advanced sources) - 例如Kafka,Flume,Kinesis等源可通过额外的实用程序类获得。 这些需要额外依赖。
我们将在本文稍后讨论这两类源。
请注意,如果希望在流应用程序中并行接收多个数据流,你可以创建多个输入DStream(在“性能调优”部分中进一步讨论)。这需要创建多个接收器(Receivers),来同时接收多个数据流。但请注意,Spark worker / executor是一个长期运行的任务,因此会占用分配给Spark Streaming应用程序的其中一个核(core)。因此,记住重要的一点,Spark Streaming应用程序需要分配足够的核心(或线程,如果在本地运行)以处理接收的数据,以及运行接收器。
注意
- 当在本地运行Spark Streaming程序时,不要使用“local”或“local [1]”作为master URL。 这两个都意味着只会有一个线程用于本地任务运行。 如果使用基于接收器(例如套接字,Kafka,Flume等)的输入DStream,那么唯一的那个线程会用于运行接收器,将不会有处理接收到的数据的线程。 因此,在本地运行时,始终使用"local [n]"作为 master URL,其中 n > 要运行的 receiver 数(有关如何设置主服务器的信息,请参阅Spark属性)。
- 将逻辑扩展到集群上运行,分配给Spark Streaming应用程序的核心数量必须大于 receiver 数量。 否则系统将只接收数据,而不处理。
2. 源
2.1 基本源
在指南一 Example 中我们已经了解到 ssc.socketTextStream(...),它通过TCP套接字连接从数据服务器获取文本数据创建DStream。 除了套接字,StreamingContext API提供了把文件作为输入源创建DStreams的方法。
2.1.1 File Streams
可以从与HDFS API兼容的任何文件系统(即HDFS,S3,NFS等)上的文件读取数据,DStream可以使用如下命令创建:
Java:
streamingContext.fileStream<KeyClass, ValueClass, InputFormatClass>(dataDirectory);
Scala:
streamingContext.fileStream[KeyClass, ValueClass, InputFormatClass](dataDirectory)
Spark Streaming会监视dataDirectory目录并处理在该目录中创建的任何文件(不支持嵌套目录中写入的文件)。
注意
1 所有文件必须具有相同的数据格式
2 所有文件必须在dataDirectory目录下创建,文件是自动移动到dataDirectory下,并重命名
3 移动到dataDirectory目录后,不得进行更改文件。 因此,如果文件被连续追加数据,新的数据将不会被读取。
对于简单的文本文件,有一个更简单的方法:
streamingContext.textFileStream(dataDirectory)
文件流不需要运行接收器(Receiver),因此不需要分配内核。
Python API: fileStream在Python API中不可用,只有textFileStream可用。
2.1.2 Streams based on Custom Receivers
可以使用通过自定义接收器接收的数据流创建DStream。 有关详细信息,请参阅自定义接收器指南。
2.1.3 Queue of RDDs as a Stream
要使用测试数据测试Spark Streaming应用程序,还可以使用streamingContext.queueStream(queueOfRDDs)基于RDD队列创建DStream。 推送到队列中的每个RDD将被视为DStream中的一批次数据,并像流一样处理。
2.2 高级源
这类源需要外部的非Spark库接口(require interfacing with external non-Spark libraries),其中一些需要复杂依赖(例如,Kafka和Flume)。 因此,为了尽量减少依赖的版本冲突问题,从这些源创建DStreams的功能已经移动到可以在必要时显式链接单独的库( the functionality to create DStreams from these sources has been moved to separate libraries that can be linked to explicitly when necessary)。
请注意,这些高级源在Spark Shell中不可用,因此基于这些高级源的应用程序无法在shell中测试。 如果你真的想在Spark shell中使用它们,那么你必须下载相应的Maven组件的JAR及其依赖项,并将其添加到类路径中。
介绍一下常用的高级源:
- Kafka:Spark Streaming 2.1.0与Kafka代理版本0.8.2.1或更高版本兼容。 有关更多详细信息,请参阅Kafka集成指南。
- Flume:Spark Streaming 2.1.0与Flume 1.6.0兼容。 有关更多详细信息,请参阅Flume集成指南。
- Kinesis:Spark Streaming 2.1.0与Kinesis Client Library 1.2.1兼容。 有关更多详细信息,请参阅Kinesis集成指南。
3. 自定义源
这在Python中还不支持。
输入DStreams也可以从自定义数据源创建。 所有你需要做的是实现一个用户定义的接收器(Receiver),可以从自定义源接收数据,并推送到Spark。 有关详细信息,请参阅自定义接收器指南。
4. Receiver可靠性
基于Receiver的可靠性,可以分为两种数据源。 如Kafka和Flume之类的源允许传输的数据被确认。 如果从这些可靠源接收数据的系统正确地确认接收的数据,则可以确保不会由于任何种类的故障而丢失数据。 这导致两种接收器(Receiver):
1 可靠的接收器 - 当数据已被接收并存储副本在Spark中时,可靠的接收器正确地向可靠的源发送确认。
2 不可靠的接收器 - 不可靠的接收器不会向源发送确认。 这可以用在不支持确认机制的源上,或者由于确认机制的复杂性时,使用可靠源但不发送确认。
[Spark]Spark Streaming 指南四 输入DStreams和Receivers相关推荐
- ######好#######输入DStreams和receivers
输入DStreams和receivers 输入DStreams表示从数据源获取输入数据流的DStreams.在快速例子中,lines表示输入DStream,它代表从netcat服务器获取的数据流.每一 ...
- 【Spark Streaming】(四)基于 Spark Structured Streaming 的开发与数据处理
文章目录 一.前言 二.Spark Streaming vs Structured Streaming 2.1 Spark Streaming 2.2 Structured Streaming 2.3 ...
- hive编程指南电子版_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- spark-sql建表语句限制_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...
从CSDN中读取到关于spark structured streaming源代码分析不错的几篇文章 spark源码分析--事件总线LiveListenerBus spark事件总线的核心是LiveLi ...
- Spark快速入门指南 – Spark安装与基础使用
本文转载自Spark快速入门指南 – Spark安装与基础使用 Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象.Spark 正如其名,最大的特点就是快(Lightni ...
- hive编程指南_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- Spark之SparkStreaming-Input DStreams and Receivers
一.Input DStreams and Receivers Input DStreams是表示从源数据接收的数据流的DStream. 在wordcount案例中,lines是一个Input DS ...
- spark SQL入门指南《读书笔记》
文章目录 spark SQL入门指南 第一章 初识 spark mysql 1.1 Spark的诞生 和SparkSQL是什么? 1.2 Spark SQL能做什么? 第2章 Spark安装.编程环境 ...
最新文章
- 阿里云加速构建技术平台,推动5G消息产业发展
- BZOJ3028食物——生成函数+泰勒展开
- 16.U-boot的工作流程分析-2440
- 前端学习(1812):前端调试之shadow练习
- 重学 VBA - 基础与实战篇(含正则表达式)
- mysql半连接_MySQL优化案例:半连接(semi join)优化方式导致的查询性能低下(转载)...
- python 爬取上海体育彩票文章标题、时间、内容
- Widget实例可以添加多个并独立更新
- 在vs2013下利用vb.net简单使用WebService实例
- AMOS分析技术:软件安装及菜单功能介绍;这次是视频教程
- Java相关脚本-排查最消耗CPU的线程\Jar冲突
- WPS-Word:下一页分节符不能分页,插入下一页分节符时下一节没有在新的一页开始
- 清华大学鲍橒计算机1999,鲍橒从“最强大脑”到“盲棋第一人”
- BMapGL实现地图轨迹运动(地图视角不变)
- 继承、super、this、抽象类
- Chapter8.金融时间序列
- loadrunner11补丁
- 【test】testtest
- 【转载】浮华背后与我的路
- oracle 回收站那些事