Spark系列--Spark Streaming(三)DStreams输入--基本数据源及自定义Receiver

本文详细介绍了Spark Streaming中的DStreams输入数据源,包括文件数据源、自定义Receiver和RDD队列。文件数据流支持HDFS兼容的文件系统,通过fileStream方法读取,不支持嵌套目录且文件一旦移动进目录就不能修改。自定义Receiver允许开发者创建自己的数据源,通过继承Receiver并实现特定方法。RDD队列则允许将RDD直接推入队列形成DStream进行处理。
摘要由CSDN通过智能技术生成

前言

Spark Streaming原生支持一些不同的数据源。一些“核心”数据源已经被打包到Spark Streaming 的 Maven 工件中,而其他的一些则可以通过 spark-streaming-kafka 等附加工件获取。每个接收器都以 Spark 执行器程序中一个长期运行的任务的形式运行,因此会占据分配给应用的 CPU 核心。此外,我们还需要有可用的 CPU 核心来处理数据。这意味着如果要运行多个接收器,就必须至少有和接收器数目相同的核心数,还要加上用来完成计算所需要的核心数。例如,如果我们想要在流计算应用中运行 10 个接收器,那么至少需要为应用分配 11 个 CPU 核心。所以如果在本地模式运行,不要使用local或者local[1]。

DStreams输入的数据源主要分为两大类:基本数据源和高级数据源。
基本数据源主要如下:

  • socket数据流
  • 文件数据源
  • RDD队列

另外可以–自定义数据接收器Receiver

Socket数据流(socketTextStream)前面已经介绍过,本篇介绍下文件数据源、RDD队列以及如何自定义Receiver。

一、文件数据源

文件数据流:能够读取所有HDFS API兼容的文件系统文件,通过fileStream方法进行读取。

streamingContext.fileStream[KeyClass, ValueClass, InputFormatClass](dataDirectory)

Spark Streaming 将会监控 dataDirectory 目录并不断处理移动进来的文件,记住目前不支持嵌套目录。

  • 文件需要有相同的数据格式。
  • 文件进入dataDirectory的方式需要通过移动或者重命名来实现。
  • 一旦文件移动进目录,则不能再修改,即便修改了也不会读取新数据。
  • 如果文件比较简单,则可以使用 streamingContext.textFileStream(dataDirectory)方法来读取文件。文件流不需要接收器,不需要单独分配CPU核。

Hdfs读取实例:

提前需要在HDFS上建好目录。

scala> import org.apache.spark.streaming._
import org.apache.spark.streaming._

scala> val ssc = new StreamingContext(sc, Seconds(1))
ssc: org.apache.spark.streaming.StreamingContext = org.apache.spark.streaming.StreamingContext@4027edeb

scala> val lines = ssc.textFileStream("hdfs://hadoop0:9000/data/")
lines: org.apache.spark.streaming.dstream.DStream[String] = org.apache.spark.streaming.dstream.MappedDStream@61d9dd15

scala> val words = lines.flatMap(_.split(" "))
words: or
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值