gpt4 book ai didi

apache-spark - 如何使多次运行的作业幂等,在 S3 中生成相同的结果文件

转载 作者:行者123 更新时间:2023-12-05 04:06:49 25 4
gpt4 key购买 nike

我使用 spark df write 将 Parquet 文件保存到 S3。设想:我运行 Job1 并将 xyz.parquet 保存到 S3,我的 Job2 在 S3 中获取 xyz.parquet 并将数据加载到 DB。现在,我希望下次运行 Job1 时,它应该生成 xyz.parquet 并将数据加载到 DB。我的问题是,我无法覆盖 Parquet 文件,我不想在保存新的 xyz.parquet 之前删除旧的 xyz.parquet 文件,因为新的 xyz.parquet 可能无法写入,我不想失去我的旧 xyz.parquet。我希望我的 Job1 是幂等的,这样我的 Job2 和其他工作就不需要更改。一种方法是在文件名的命名约定中附加时间戳。有没有更好的解决方案。

最佳答案

一般工作流程是从源目录重命名到目标目录。 S3 的特殊之处在于,当您写入文件时,在调用文件 close() 之前,不会(明显地)保存任何内容。也就是说:如果任何程序在覆盖文件的过程中失败了,旧文件仍会存在。也许您可以将该功能用于像

这样的工作流程
  1. 使用输出 s3://bucket/tmp/result.parquet 运行查询
  2. 发出 s3 HTTP 请求 PUT s3://bucket/final/result.parquet x-copy-source:s3://bucket/tmp/result.parquet

S3 的 Hadoop FS 客户端都没有直接公开该复制命令,尽管重命名会这样做,但会强制您首先删除最后一个,因此存在一个小的失败漏洞

关于apache-spark - 如何使多次运行的作业幂等,在 S3 中生成相同的结果文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49305041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com