项目中需要每隔5分钟去处理hdfs中的新进来的文件,调研一下Spark Streaming的file source
Spark Streaming中实现了以文件为Source,监控对应目录中的文件的修改来生成流,通过FileInputDStream
来实现。
API介绍
提供了fileStream
和textFileStream
和binaryRecordsStream
来创建FileInputStream
。
fileStream
fileStream有三种重载形式,都是直接传参数进去返回FileInputDStream
有以下参数&泛型:
参数名 | 含义 |
---|---|
directory | 要监听的目录,如hdfs://192.168.168.200:9000/data/ds=* |
filter | 过滤目录,是一个Path => Boolean 的函数。如果需要保留,返回true |
newFilesOnly | 启动程序后,是否只读新进来的文件 |
K: ClassTag | HDFS文件的Key类型。如LongWritable |
V: ClassTag | HDFS文件的Value类型。如Text |
F <: NewInputFormat[K, V]: ClassTag | 读取HDFS文件时的输入格式。如TextInputFormat |
textFileStream
def textFileStream(directory: String): DStream[String] = withNamedScope("text file stream") {
fileStream[LongWritable, Text, TextInputFormat](directory).map(_._2.toString)
}
通过传入text类型文件的目录,来生成流。调用的是fileStream
算子。
binaryRecordsStream
这个是生成二进制流的
Demo
通过fileStream创建流的Demo
def main(args: Array[String]