我们的一个Dataflow作业将其输出写入BigQuery。我对如何在幕后实现这一点的理解是,Dataflow实际上将结果(分片)以JSON格式写入GCS,然后启动BigQuery加载作业以导入该数据。
但是,我们注意到一些JSON文件在作业完成后不会被删除,无论它是成功还是失败。错误消息中没有警告或建议不会删除文件。当我们注意到这一点时,我们看了一下我们的存储桶,它有来自失败作业的数百个大型JSON文件(主要是在开发期间)。
我原本以为Dataflow应该处理任何清理,即使作业失败,当它成功时,肯定会删除这些文件。在作业完成后留下这些文件会产生大量的存储成本!
这是一个错误吗?
"成功的作业的作业ID示例"但在GCS中留下了数百个大文件: 2015-05-27_18_21_21-8377993823053896089
答案 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文件。我们已在内部修复了该问题,并推出了修复版本。