S3DistCp(AWS-EMR)-deleteOnSuccess选项在源存储桶上创建文件

我正在研究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

在这种情况下,如果s3://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在源存储桶上创建此新文件?

heshenzhi0622 回答:S3DistCp(AWS-EMR)-deleteOnSuccess选项在源存储桶上创建文件

"_$folder$"文件是占位符。当您使用-mkdir命令在S3存储桶中创建文件夹时,Apache Hadoop将创建这些文件。在您放置第一个对象之前,Hadoop不会创建该文件夹。如果在放置至少一个对象之前删除"_$folder$"文件,则Hadoop无法创建该文件夹。这将导致“没有这样的文件或目录”错误。到目前为止,在使用EMR时,无法阻止此文件的生成。

删除这些文件是安全的。您可以通过运行如下所示的命令来手动删除它们,也可以通过创建lambda s3触发器来查找这些文件并定期删除它们,但是在复制数据时删除它们可能会引起问题。请参阅this [https://aws.amazon.com/premiumsupport/knowledge-center/emr-s3-empty-files/]链接以了解更多信息。

read s3path; \
aws s3 rm --dryrun s3://$s3path/ \
--recursive \
--exclude '*' \
--include "*_\$folder$" \ ;
本文链接:https://www.f2er.com/2973065.html

大家都在问