apache-spark - 火花流,如何跟踪处理的源文件?
问题描述
火花流如何跟踪已处理的文件?
问题1:我们来看一个场景,spark已经处理了今天的文件(a.csv,b.csv,c.csv),3天后新文件(d.csv)到了,spark怎么知道它必须处理只有 d.csv?这里遵循的基本机制是什么?
问题2:作为用户,我想知道文件是否真的被处理过,如何查看?
解决方案
火花流如何跟踪已处理的文件?
对此负责的类是FileStreamSource。在这里,您将找到接下来 2 个问题的答案。
spark怎么知道它必须处理唯一的d.csv?这里遵循的基本机制是什么?
ACompactibleFileStreamLog
用于根据上次修改时的时间戳维护所见文件的映射。基于这些条目,创建了一个不断增加的偏移量(参考FileStreamSourceOffset
)。这个偏移量是跨运行的检查点,就像 Kafka 等其他流媒体源一样。
文件是否真的被处理过,我该如何检查?
从代码中我可以看到您可以通过调试日志检查这一点,
batchFiles.foreach { file =>
seenFiles.add(file._1, file._2)
logDebug(s"New file: $file")
}
您可以检查的另一个地方是检查点数据,但由于它包含序列化的偏移信息,我怀疑您会从那里获得任何详细信息。
推荐阅读
- javascript - 滚动时如何更改背景颜色?
- python - 从列表中创建随机列表而不重复项目
- javascript - 路由同时提供参数和请求正文 nodejs
- typescript - 如何在 TypeScript 中定义动态 `this` 值的类型?
- python - 我的scrapy spider只给我看网站的前两页
- javascript - 如何在 echarts 中自动缩放字体大小?
- c# - 如何在C#中使用Linq替换DataTable所有行的双引号?
- server - 由于erlang超时,如何触发handle_info?
- python - 如何在忽略标点符号的数据框中删除重复项?
- apprtc - AppRTC中的房间响应完全错误以及断开呼叫后如何清除id或url?