使用 s3 版本控制维护多个工件

Using s3 versioning for maintaining multiple artifacts

目前我们正在使用 S3 存储桶作为我们的工件的存储库。这些工件只不过是不同 Spark 作业的 jar 和 zip。假设基本目录是 s3://our-awesome-jobs/dev。当代码更改被推送到 master 时,工件会附加简短的提交 ID 并被推送到 S3。作业文件夹中有一个 latest 文件,它始终包含最新工件的名称。例如。对于名为 job1 的作业,S3 文件夹结构如下所示:

s3://our-awesome-jobs/dev/job1/artifacts
|
+-- java_job1_023f2d9.jar   # pushed on 10th July
|
+-- java_job1_162ea58.jar   # pushed on 5th July
|
+-- java_job1_81a4cc2.jar   # pushed on 1st July
|
+-- latest                  # contains the entry `java_job1_023f2d9.jar`

我想知道我们是否可以使用 S3 版本控制机制来简化存储桶内工件的存储。根据我的理解,允许文件的新版本替换旧版本,它们必须同名。在那种情况下,必须以不同方式维护提交 ID 信息。是否有实现我想要的功能的行业标准?任何想法或意见表示赞赏。

S3 版本控制作为

之一效果最好
  • backup/recovery
  • 一种创建一组文件列表的方法,以后可以在知道覆盖无关紧要的情况下检索这些文件
  • 一种通过多个 GET 调用读取文件并保证即使被覆盖也能获得一致读取的方法(S3A 将在 Hadoop 3.3 中执行此操作)

没有(公开的)方法可以在 s3a 连接器中通过版本 ID 请求工件,据我所知,在 AWS 连接器中也没有。 ASF Hadoop 云连接器团队很乐意接受像 ?version= 和 ?etag= arg 这样的贡献,以便您可以添加更严格的引用。当然需要测试和文档...