Amazon ec2 Spark Streaming应用程序对已流式处理的文件进行流式处理

Amazon ec2 Spark Streaming应用程序对已流式处理的文件进行流式处理,amazon-ec2,amazon-s3,apache-spark,yarn,spark-streaming,Amazon Ec2,Amazon S3,Apache Spark,Yarn,Spark Streaming,我们在Thread ec2集群中部署了一个spark streaming应用程序,其中有1个名称节点和2个数据节点。我们提交的应用程序有11个执行器,每个执行器有1个内核和588MB的RAM。 应用程序从S3中不断写入的目录中流出;这是实现以下目标的代码行: val ssc = new StreamingContext(sparkConf, Seconds(10)) val lines = ssc.fileStream[LongWritable, Text, TextInputFormat](S

我们在Thread ec2集群中部署了一个spark streaming应用程序,其中有1个名称节点和2个数据节点。我们提交的应用程序有11个执行器,每个执行器有1个内核和588MB的RAM。 应用程序从S3中不断写入的目录中流出;这是实现以下目标的代码行:

val ssc = new StreamingContext(sparkConf, Seconds(10))
val lines = ssc.fileStream[LongWritable, Text, TextInputFormat](Settings.S3RequestsHost , (f:Path)=> true, true )
//some maps and other logic here
ssc.start()
ssc.awaitTermination()
使用fileStream而不是textFileStream的目的是定制spark在进程启动时处理现有文件的方式。我们只想处理进程启动后添加的新文件,而忽略现有文件。我们配置了10秒的批处理持续时间

当我们向s3添加少量文件时,这个过程进展顺利,比如说4或5个文件。我们可以在流式UI中看到如何在执行器中成功执行阶段,每个处理的文件对应一个阶段。但有时当我们试图添加更多的文件时,我们会遇到一种奇怪的行为;应用程序启动已流式处理的流式处理文件

例如,我向s3添加了20个文件。这些文件分三批处理。第一批处理7个文件,第二批处理8个文件,第三批处理5个文件。此时不再向S3添加更多文件,但是spark开始用相同的文件无休止地重复这些阶段 有没有想过是什么原因造成的

我已经发布了这一期的Jira票:

注意“必须通过将文件自动移动或重命名到数据目录中,在数据目录中创建文件”这句话。整个文件必须同时显示,而不是将文件创建为空并附加到其中


一种方法是让cloudberry将文件放在其他地方,然后定期运行一个脚本,将文件移动或重命名到您连接流媒体应用程序的目录中

你是如何添加这些文件的?请注意.Hi@SpiroMichaylov中的一句话“必须通过将文件自动移动或重命名到数据目录中来在dataDirectory中创建文件”。我在用cloudberry上传文件。原子的意思是一个接一个?我不确定cloudberry是否使用了批量上传。这可能是造成问题的原因……我对“原子”的解释是,整个文件必须同时出现,这与上面的引文一致。它不包括创建空文件和附加文件。您可能需要做的是让cloudberry将文件放在其他地方,然后定期运行脚本,将文件移动或重命名到您连接流媒体应用程序的目录中。我不知道这是否导致了你的问题,但如果cloudberry不这样做,它会给你带来一些问题。是的@SpiroMichaylov,这起作用了!)请将此作为答案发布,以便我将其标记为已解决。(我没有定期运行脚本,而是简单地上传了扩展名为.tmp的文件,并在上传后使用s3 put copy api将其重命名为.csv。然后在流媒体应用程序中,我使用问题中所示的fileStream函数只过滤了*.csv文件)我发布了一个摘要作为答案。很高兴它有帮助!