从Dataflow写入BigQuery - 作业完成后不会删除JSON文件

时间:2015-05-12 01:20:49

标签: google-cloud-dataflow

我们的一个Dataflow作业将其输出写入BigQuery。我对如何在幕后实现这一点的理解是,Dataflow实际上将结果(分片)以JSON格式写入GCS,然后启动BigQuery加载作业以导入该数据。

但是,我们注意到一些JSON文件在作业完成后不会被删除,无论它是成功还是失败。错误消息中没有警告或建议不会删除文件。当我们注意到这一点时,我们看了一下我们的存储桶,它有来自失败作业的数百个大型JSON文件(主要是在开发期间)。

我原本以为Dataflow应该处理任何清理,即使作业失败,当它成功时,肯定会删除这些文件。在作业完成后留下这些文件会产生大量的存储成本!

这是一个错误吗?

"成功的作业的作业ID示例"但在GCS中留下了数百个大文件: 2015-05-27_18_21_21-8377993823053896089

enter image description here

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:5)

因为这仍然在发生,我们决定在管道完成执行后我们将自行清理。我们运行以下命令来删除不是JAR或ZIP的所有内容:

gsutil ls -p <project_id> gs://<bucket> | grep -v '[zip|jar]$' | xargs -n 1 gsutil -m rm -r

答案 1 :(得分:5)

遗留文件的另一个可能原因是取消了作业。目前,数据流不会从已取消的作业中删除文件。在其他情况下,应该清理文件。

第一篇文章“无法删除临时文件”中列出的错误也是我们方面的日志记录问题的结果,应该在一两周内解决。在此之前,请随意忽略这些错误,因为它们不会指示遗留文件。

答案 2 :(得分:2)

这是一个错误,在BigQuery导入作业完成后,Dataflow服务有时无法删除临时JSON文件。我们已在内部修复了该问题,并推出了修复版本。