######好#######输入DStreams和receivers

2024-05-07 15:08

本文主要是介绍######好#######输入DStreams和receivers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入DStreams和receivers

输入DStreams表示从数据源获取输入数据流的DStreams。在快速例子中,lines表示输入DStream,它代表从netcat服务器获取的数据流。每一个输入流DStream和一个Receiver对象相关联,这个Receiver从源中获取数据,并将数据存入内存中用于处理。

输入DStreams表示从数据源获取的原始数据流。Spark Streaming拥有两类数据源

  • 基本源(Basic sources):这些源在StreamingContext API中直接可用。例如文件系统、套接字连接、Akka的actor等。
  • 高级源(Advanced sources):这些源包括Kafka,Flume,Kinesis,Twitter等等。它们需要通过额外的类来使用。我们在关联那一节讨论了类依赖。

需要注意的是,如果你想在一个流应用中并行地创建多个输入DStream来接收多个数据流,你能够创建多个输入流(这将在性能调优那一节介绍)。它将创建多个Receiver同时接收多个数据流。但是,receiver作为一个长期运行的任务运行在Spark worker或executor中。因此,它占有一个核,这个核是分配给Spark Streaming应用程序的所有核中的一个(it occupies one of the cores allocated to the Spark Streaming application)。所以,为Spark Streaming应用程序分配足够的核(如果是本地运行,那么是线程)用以处理接收的数据并且运行receiver是非常重要的。

几点需要注意的地方:

  • 如果分配给应用程序的核的数量少于或者等于输入DStreams或者receivers的数量,系统只能够接收数据而不能处理它们。
  • 当运行在本地,如果你的master URL被设置成了“local”,这样就只有一个核运行任务。这对程序来说是不足的,因为作为receiver的输入DStream将会占用这个核,这样就没有剩余的核来处理数据了。

基本源

我们已经在快速例子中看到,ssc.socketTextStream(...)方法用来把从TCP套接字获取的文本数据创建成DStream。除了套接字,StreamingContext API也支持把文件以及Akka actors作为输入源创建DStream。

  • 文件流(File Streams):从任何与HDFS API兼容的文件系统中读取数据,一个DStream可以通过如下方式创建
streamingContext.fileStream[keyClass, valueClass, inputFormatClass](dataDirectory)

Spark Streaming将会监控dataDirectory目录,并且处理目录下生成的任何文件(嵌套目录不被支持)。需要注意一下三点:

1 所有文件必须具有相同的数据格式
2 所有文件必须在`dataDirectory`目录下创建,文件是自动的移动和重命名到数据目录下
3 一旦移动,文件必须被修改。所以如果文件被持续的附加数据,新的数据不会被读取。

对于简单的文本文件,有一个更简单的方法streamingContext.textFileStream(dataDirectory)可以被调用。文件流不需要运行一个receiver,所以不需要分配核。

在Spark1.2中,fileStream在Python API中不可用,只有textFileStream可用。

  • 基于自定义actor的流:DStream可以调用streamingContext.actorStream(actorProps, actor-name)方法从Akka actors获取的数据流来创建。具体的信息见自定义receiver指南actorStream在Python API中不可用。
  • RDD队列作为数据流:为了用测试数据测试Spark Streaming应用程序,人们也可以调用streamingContext.queueStream(queueOfRDDs)方法基于RDD队列创建DStreams。每个push到队列的RDD都被当做DStream的批数据,像流一样处理。

关于从套接字、文件和actor中获取流的更多细节,请看StreamingContext和JavaStreamingContext

高级源

这类源需要非Spark库接口,并且它们中的部分还需要复杂的依赖(例如kafka和flume)。为了减少依赖的版本冲突问题,从这些源创建DStream的功能已经被移到了独立的库中,你能在关联查看细节。例如,如果你想用来自推特的流数据创建DStream,你需要按照如下步骤操作:

  • 关联:添加spark-streaming-twitter_2.10到SBT或maven项目的依赖中
  • 编写:导入TwitterUtils类,用TwitterUtils.createStream方法创建DStream,如下所示
import org.apache.spark.streaming.twitter._
TwitterUtils.createStream(ssc)
  • 部署:将编写的程序以及其所有的依赖(包括spark-streaming-twitter_2.10的依赖以及它的传递依赖)打为jar包,然后部署。这在部署章节将会作更进一步的介绍。

需要注意的是,这些高级的源在spark-shell中不能被使用,因此基于这些源的应用程序无法在shell中测试。

下面将介绍部分的高级源:

  • Twitter:Spark Streaming利用Twitter4j 3.0.3获取公共的推文流,这些推文通过推特流API获得。认证信息可以通过Twitter4J库支持的任何方法提供。你既能够得到公共流,也能够得到基于关键字过滤后的流。你可以查看API文档(scala和java)和例子(TwitterPopularTags和TwitterAlgebirdCMS)
  • Flume:Spark Streaming 1.2能够从flume 1.4.0中获取数据,可以查看flume集成指南了解详细信息
  • Kafka:Spark Streaming 1.2能够从kafka 0.8.0中获取数据,可以查看kafka集成指南了解详细信息
  • Kinesis:查看Kinesis集成指南了解详细信息

自定义源

在Spark 1.2中,这些源不被Python API支持。输入DStream也可以通过自定义源创建,你需要做的是实现用户自定义的receiver,这个receiver可以从自定义源接收数据以及将数据推到Spark中。通过自定义receiver指南了解详细信息

Receiver可靠性

基于可靠性有两类数据源。源(如kafka、flume)允许。如果从这些可靠的源获取数据的系统能够正确的应答所接收的数据,它就能够确保在任何情况下不丢失数据。这样,就有两种类型的receiver:

  • Reliable Receiver:一个可靠的receiver正确的应答一个可靠的源,数据已经收到并且被正确地复制到了Spark中。
  • Unreliable Receiver :这些receivers不支持应答。即使对于一个可靠的源,开发者可能实现一个非可靠的receiver,这个receiver不会正确应答。

怎样编写可靠的Receiver的细节在自定义receiver中有详细介绍。

这篇关于######好#######输入DStreams和receivers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967697

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

当你输入一个网址后都发生什么

原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/  作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

【Markdown】输入空格方式

文章目录 1.nbsp2. ensp3. emsp4.thinsp5. zwnj6. zwj7. 其它 1.nbsp  为“不换行空格”,全称“No-Break Space”,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格。在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个)。要使用html实体表示才可累加,该

兔子--EditText去除下划线和输入字母和数字的限制

在设置密码输入框的时候,只允许输入数字和字母,设置如下属性:  android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 设置密码不可见(显示小黑点),并去除edittext的获取到焦点时候的下划线, 设置如下:

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 Matlab实现PSO-LSTM多变量回归预测 1.input和outpu

java AWT ImageIO(输入/输出位图)

ImageIO可以访问磁盘上的位图文件,如GIF,JPG等格式图片。 ImageIO利用ImageReader和ImageWriter读写图形文件。 ImageIO类并不支持读写全部格式的图形文件,程序可以通过ImageIO类的如下几个静态方法来访问该类所支持读写的图形文件格式。 static String[] getReaderFileSuffixes():返回一个String数组,该数组

java 输入/输出流(I/O流)

java输入/输出流在java.io包中,所有的输入流都是抽象类InputStream(字节输入流) 或 抽象类Reader(字符输入流)的子类。所有的输出流都是抽象类OutputStream(字节输出流) 或 抽象类Writer(字符输出流)的子类。 输入流: InputStream类是字节输入流的抽象类,是所有字节输入流的父类。该类中的所有方法遇到错误时都会引发IOException异

STM32单片机HAL库——ADC输入

一、单通道采集 二、单通道+DMA采集 使能DMA 三、定时器采集+DMA传输 选择定时器1的通道1作为触发源,在TIM1的上升沿进行采集 定时器1挂载在APB2上面,APB2上定时器的频率为168MHZ psc=168-1 arr=1000-1 TIM1的时钟频率为168/168/1000=1kHZ pulse设置为500,占空比为50%