首页 > 解决方案 > 火花流,如何跟踪处理的源文件?

问题描述

火花流如何跟踪已处理的文件?

问题1:我们来看一个场景,spark已经处理了今天的文件(a.csv,b.csv,c.csv),3天后新文件(d.csv)到了,spark怎么知道它必须处理只有 d.csv?这里遵循的基本机制是什么?

问题2:作为用户,我想知道文件是否真的被处理过,如何查看?

标签: apache-sparkpysparkapache-spark-sqlspark-streaming

解决方案


火花流如何跟踪已处理的文件?

对此负责的类是FileStreamSource。在这里,您将找到接下来 2 个问题的答案。

spark怎么知道它必须处理唯一的d.csv?这里遵循的基本机制是什么?

ACompactibleFileStreamLog用于根据上次修改时的时间戳维护所见文件的映射。基于这些条目,创建了一个不断增加的偏移量(参考FileStreamSourceOffset)。这个偏移量是跨运行的检查点,就像 Kafka 等其他流媒体源一样。

文件是否真的被处理过,我该如何检查?

代码中我可以看到您可以通过调试日志检查这一点,

 batchFiles.foreach { file =>
  seenFiles.add(file._1, file._2)
  logDebug(s"New file: $file")
}

您可以检查的另一个地方是检查点数据,但由于它包含序列化的偏移信息,我怀疑您会从那里获得任何详细信息。


推荐阅读