如何在dir中加载一些文件并在火花流中监视该目录中的新文件而不会丢失?

时间:2015-05-11 12:26:23

标签: apache-spark spark-streaming

我有一个hdfs目录,其中包含许多文件:

x[0] = 1;  // NPE, because x is null

并且有一个守护进程,每分钟向该目录添加一个文件。 (例如,5.txt,6.txt,7.txt ......)

我想启动一个加载3.txt,4.txt的火花流工作,然后在4.txt之后检测所有新文件。

请注意,因为这些文件很大,处理这些文件需要很长时间。因此,如果我在启动流式传输任务之前处理3.txt和4.txt,则在处理3.txt和4.txt期间可能会生成5.txt,6.txt到此目录。当流媒体任务开始时,5.txt和6.txt将被遗漏进行处理,因为它只会从新文件处理(来自7.txt)

我不确定我是否清楚地描述了问题,如果您有任何疑问,请问我

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

根据doc api:https://spark.apache.org/docs/1.1.0/api/scala/index.html#org.apache.spark.streaming.StreamingContext

DEF fileStream [K,V,F<:InputFormat [K,V]](目录:String,filter:(Path)⇒Boolean,newFilesOnly:Boolean)(隐式arg0:ClassTag [K],arg1:ClassTag [V], arg2:ClassTag [F]):InputDStream [(K,V)] 创建一个输入流,监视与Hadoop兼容的文件系统以获取新文件,并使用给定的键值类型和输入格式读取它们。

我们可以设置过滤器功能来过滤文件< 4.txt

然后将“newFilesOnly”设置为false

相关问题