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相关推荐

  1. ######好#######输入DStreams和receivers

    输入DStreams和receivers 输入DStreams表示从数据源获取输入数据流的DStreams.在快速例子中,lines表示输入DStream,它代表从netcat服务器获取的数据流.每一 ...

  2. 【Spark Streaming】(四)基于 Spark Structured Streaming 的开发与数据处理

    文章目录 一.前言 二.Spark Streaming vs Structured Streaming 2.1 Spark Streaming 2.2 Structured Streaming 2.3 ...

  3. hive编程指南电子版_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

  4. spark-sql建表语句限制_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

  5. Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...

    从CSDN中读取到关于spark structured streaming源代码分析不错的几篇文章 spark源码分析--事件总线LiveListenerBus spark事件总线的核心是LiveLi ...

  6. Spark快速入门指南 – Spark安装与基础使用

    本文转载自Spark快速入门指南 – Spark安装与基础使用 Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象.Spark 正如其名,最大的特点就是快(Lightni ...

  7. hive编程指南_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

  8. Spark之SparkStreaming-Input DStreams and Receivers

    一.Input DStreams and Receivers   Input DStreams是表示从源数据接收的数据流的DStream. 在wordcount案例中,lines是一个Input DS ...

  9. spark SQL入门指南《读书笔记》

    文章目录 spark SQL入门指南 第一章 初识 spark mysql 1.1 Spark的诞生 和SparkSQL是什么? 1.2 Spark SQL能做什么? 第2章 Spark安装.编程环境 ...

最新文章

  1. 阿里云加速构建技术平台,推动5G消息产业发展
  2. BZOJ3028食物——生成函数+泰勒展开
  3. 16.U-boot的工作流程分析-2440
  4. 前端学习(1812):前端调试之shadow练习
  5. 重学 VBA - 基础与实战篇(含正则表达式)
  6. mysql半连接_MySQL优化案例:半连接(semi join)优化方式导致的查询性能低下(转载)...
  7. python 爬取上海体育彩票文章标题、时间、内容
  8. Widget实例可以添加多个并独立更新
  9. 在vs2013下利用vb.net简单使用WebService实例
  10. AMOS分析技术:软件安装及菜单功能介绍;这次是视频教程
  11. Java相关脚本-排查最消耗CPU的线程\Jar冲突
  12. WPS-Word:下一页分节符不能分页,插入下一页分节符时下一节没有在新的一页开始
  13. 清华大学鲍橒计算机1999,鲍橒从“最强大脑”到“盲棋第一人”
  14. BMapGL实现地图轨迹运动(地图视角不变)
  15. 继承、super、this、抽象类
  16. Chapter8.金融时间序列
  17. loadrunner11补丁
  18. 【test】testtest
  19. 【转载】浮华背后与我的路
  20. oracle 回收站那些事

热门文章

  1. 三分钟了解MySQL慢查询
  2. 谈谈PLC技术与自制PLC
  3. 如何连接惠普台式计算机蓝牙,hp笔记本蓝牙怎么设置【详解】
  4. static和头文件,源文件放什么
  5. 知识图谱-你不知道的sparql路径查询
  6. 广西人工智能学会第一次会员代表大会召开
  7. win和安卓平板拓展屏幕——spacedesk
  8. 记录自己 Ubuntu 20.04 安装 CUDA 及 Pytorch
  9. 王思聪花100万组装电脑!跑分97000,亚洲排名第一,全世界第四。
  10. 祝贺2008年2月班全部顺利毕业!