如果在 emr 上的 spark 中不存在,如何防止创建桶

How to prevent bucket creation if it is not exists in spark on emr

我 运行 在 emr 集群上执行 spark 步骤。它收集所有小文件并将它们累积到一个大文件中。 所以我收到要处理的存储桶列表,但在处理存储桶之前我想检查存储桶是否存在以及它是否包含任何文件。为此,我正在使用 hadoop 文件系统。

     String bucketPath = "s3n://" + bucketName;
     Configuration hadoopConfiguration =   
     sparkSession.sparkContext().hadoopConfiguration();
     FileSystem.get(new URI(bucketPath), hadoopConfiguration);

但是这里的问题是 FileSystem.get(...) 创建一个不存在的桶。 是否可以防止创建存储桶?或者有人知道如何以其他方式检查是否存在?

另一种方法是在与您的 EMR 的 JobFlow 关联的 IAM 角色中禁用存储桶创建。顺便说一句,采用 at least privilege principle in the security on AWS

通常是个好主意

IAM 策略拒绝创建存储桶的示例:

      {
         "Effect":"Deny",
         "Action":[
            "s3:CreateBucket",
            "s3:DeleteBucket"
         ],
         "Resource":"arn:aws:s3:::examplebucket"
      },

更多信息,您可以查看Permissions Related to Bucket Operations

禁用此功能的最佳方法是使用 "fs.s3.buckets.create.enabled" hadoop 配置。此功能将在不久的将来在较新版本的 emr 中禁用,以防止意外创建 s3 存储桶并提高启动性能。