我正在开发 AWS-EMR 集群并添加了一个运行 S3DISTCP 的步骤(https://docs.aws.amazon.com/es_es/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html),这是为了复制对象来自 s3 存储桶(目标/目的地也是 s3 存储桶)。
对象被正确复制到目标存储桶,--deleteOnSuccess
并按预期使用从源存储桶中删除的选项复制对象。这里的问题是,对于每个包含复制对象的文件夹(在源存储桶上),都会在源存储桶的根目录创建一个新文件(这只发生在--deleteOnSuccess
选项中)。
我使用的参数是:
s3-dist-cp --s3Endpoint=s3.amazonaws.com --src=s3://MY_SOURCE_BUCKET/ --dest=s3://MY_DESTINATION_BUCKET/ --srcPrefixesFile=s3://ANOTHER_BUCKET/objects_list.txt --deleteOnSuccess
在这种情况下,如果 ins3://MY_SOURCE_BUCKET/
包含:
s3://MY_SOURCE_BUCKET/
|--folder_a/
| |------ a.txt
| |------ b.txt
| |------ c.txt
|--folder_b/
|------ d.txt
如果我只想复制和删除s3://MY_SOURCE_BUCKET/folder_a/b.txt
,一旦 S3DISTCP 运行完成,源存储桶看起来像:
s3://MY_SOURCE_BUCKET/
|--folder_a_$folder$ <-- This is the new file created with `_$folder$` suffix
|--folder_a/
| |------ a.txt
| |------ c.txt
|--folder_b/
|------ d.txt
有没有办法避免 S3DISTCP 在源存储桶上创建这个新文件?