【发布时间】:2021-01-13 14:20:28
【问题描述】:
我有一个从 AWS Glue 作业中调用的 scala jar。我的 jar 写入将 DataFrame 写入另一个启用了 KMS 加密的 AWS 账户中的 S3 存储桶。我可以写入存储桶,但无法添加目标存储桶所有者访问文件的权限。如果简单地使用 Glue Writer 但直接使用 Spark,我可以实现这一点,它就是行不通。我已阅读所有文档,并在 hadoop 配置中设置了以下存储桶策略。
def writeDataFrameInTargetLocation( sparkContext:SparkContext = null, dataFrame: DataFrame, location: String, fileFormat: String,saveMode:String,encryptionKey:Option[String] = Option.empty,kms_region:Option[String]=Option("us-west-2")): Unit = {
如果(加密密钥.isDefined){ val region = if(kms_region.isDefined) kms_region.getOrElse("us-west-2") 别的 "us-west-2"
sparkContext.hadoopConfiguration.set("fs.s3.enableServerSideEncryption", "false")
sparkContext.hadoopConfiguration.set("fs.s3.cse.enabled", "true")
sparkContext.hadoopConfiguration.set("fs.s3.cse.encryptionMaterialsProvider", "com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider")
sparkContext.hadoopConfiguration.set("fs.s3.cse.kms.keyId", encryptionKey.get) // KMS key to encrypt the data with
sparkContext.hadoopConfiguration.set("fs.s3.cse.kms.region", region) // the region for the KMS key
sparkContext.hadoopConfiguration.set("fs.s3.canned.acl", "BucketOwnerFullControl")
sparkContext.hadoopConfiguration.set("fs.s3.acl.default", "BucketOwnerFullControl")
sparkContext.hadoopConfiguration.set("fs.s3.acl", "bucket-owner-full-control")
sparkContext.hadoopConfiguration.set("fs.s3.acl", "BucketOwnerFullControl")
}
else {
sparkContext.hadoopConfiguration.set("fs.s3.canned.acl", "BucketOwnerFullControl")
sparkContext.hadoopConfiguration.set("fs.s3.acl.default", "BucketOwnerFullControl")
sparkContext.hadoopConfiguration.set("fs.s3.acl", "bucket-owner-full-control")
sparkContext.hadoopConfiguration.set("fs.s3.acl", "BucketOwnerFullControl")
}
val writeDF = dataFrame
.repartition(5)
.write
writeDF
.mode(saveMode)
.option(Header, true)
.format(fileFormat)
.save(location)
}
【问题讨论】:
-
您遇到的错误是什么?
-
添加数据源不仅仅是在代码上添加s3信息。
-
没有收到任何错误,但我正在写入数据的帐户的所有者无法访问。它说拒绝访问。我阅读了文档以添加这些,但它似乎不起作用。 sparkContext.hadoopConfiguration.set("fs.s3.canned.acl", "BucketOwnerFullControl") sparkContext.hadoopConfiguration.set("fs.s3.acl.default", "BucketOwnerFullControl") sparkContext.hadoopConfiguration.set("fs.s3 .acl", "bucket-owner-full-control") sparkContext.hadoopConfiguration.set("fs.s3.acl", "BucketOwnerFullControl")
标签: amazon-web-services apache-spark amazon-s3 aws-glue