数据流作业后临时文件保留在 GCS 中 "succeeded"

temp files remain in GCS after a Dataflow job "succeeded"

我的团队 运行 有几个 hourly/daily 数据流作业,主要是从 GCS 读取和写入(也就是说,我们有几十个定期的数据流作业计划 运行 在一个日)。 一些作业从 GCS 读取由先前作业生成的数据。 大约一周一次或两次,我们面临以下问题:

因此,据我们能够调试的原因如下:

我们想知道以下问题:

我用 GCS 和 Dataflow 作为关键字进行了一些搜索,但没有找到与我们遇到的问题相近的东西——但我可能遗漏了一些东西,所以我们将不胜感激!

抱歉给您带来麻烦。这是TextIO.Write中的一个错误,是由于删除临时文件时遇到GCS eventual consistency,无法找到并删除所有临时文件造成的。

幸运的是,在将临时文件复制到它们的最终位置时它仍然会查看所有正确的文件,因此没有数据丢失。

我们将考虑提供修复。

再次注意,由于 GCS 的最终一致性,作业 B 也可能无法读取 A 产生的一些输出——即使有潜在的修复,这也将保持真实,并且 Dataflow 已经现在没有简单的方法来解决这个问题。但是,随着您增加完成 A 和开始 B 之间的间隔,出现这种情况的可能性会降低。

如果可能,我建议将 A 和 B 连接到一个管道中,将此数据表示为中间 PCollection。如果您需要将此数据具体化为 GCS 上的文本用于其他目的(例如手动检查、服务、使用不同工具处理等),您仍然可以从这个联合管道中执行此操作,只是不要使用 GCS 传递一个管道和另一个管道之间的数据。