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. Py之gensim:gensim的简介、安装、使用方法之详细攻略
  2. 在jquery mobile制作app的几个页利用ajax将后台数据json数组动态加载到列表里面
  3. lisp 角平分线_最佳VisualLISP及VBAforAutoCAD2000程序123例 张光斌.pdf
  4. Matplotlib 可视化之多图层叠加
  5. A - Greed CodeForces - 892A(水题)
  6. 2005/7/15[随便写写]
  7. idea 编译Java heap space 内存溢出
  8. MFC实现BCB中的ProcessMessages
  9. 干掉13个区块链最常见的Bug!
  10. 【Webcam设计】USB摄像头(V4L2接口)的图片采集
  11. android 添加字幕,字幕添加器app-字幕添加器安卓版v2.0.1 - 起点软件园
  12. NSLocale中常用的语言代码对照表
  13. VC中.pch是什么文件,没有.pch文件怎么办
  14. 十一届蓝桥模拟赛 元素之间最大的元素距离 JAVA
  15. 全国专业技术人员计算机应用能力考试题库word,全国专业技术人员计算机应用能力考试题库ExcelWordXP.docx...
  16. Java对接企业微信的审批功能
  17. c语言数据类型、内存空间详解
  18. 基于SSM+MySQL+LayUI的养老院信息管理系统
  19. 栋的周评 | 第十二回合(定期更新、动态、架构、云技术、算法、后端、前端、收听/收看、英文、书籍、影视、好歌、新奇)
  20. 一个完整的微型计算机硬盘系统应由,2017年4月自学考试计算机应用基础真题

热门文章

  1. HTML列表中项目结点是,HTMLCollection和NodeList
  2. 【C++】max_element()以及min_element()
  3. python3半自动爬虫,获取风暴英雄官方壁纸
  4. Peptide Based Natural Product
  5. eMule电驴eDonkey源代码精辟分析
  6. 2019暑期多校补题情况 牛客
  7. MYSQL sql 高阶语句 (sequel)
  8. SpringBoot整合PrimeFaces
  9. 网络营销利器 ——微博营销
  10. JAVA蘑菇西餐,今天为大家推荐一道非常好吃的西餐,蘑菇鸡扒