我有一个scala罐,我是从aws胶水工作打电话来的。我的jar写入是为了将Dataframe写入另一个打开了kms加密的aws帐户中的s3存储桶。我可以写入存储桶,但无法添加目标存储桶所有者访问文件的权限。我可以做到这一点,如果简单地使用胶水作家,但与直Spark,它只是不工作。我已经阅读了所有文档,并在hadoop配置中设置了以下bucket策略。
def writedataframeintargetlocation(spa)定义rkcontext:sparkcontext = null,dataframe:dataframe,location:string,fileformat:string,savemode:string,编码器yptionkey:option[string]=option.empty,公里_region:option[字符串]=选项(“us-west-2”):单位={
if(encryptionkey.isdefined){val region=if(kms\u region.isdefined)kms\u region.getorelse(“us-west-2”)else“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)
}
1条答案
按热度按时间zour9fqk1#
您可能正在使用s3afilesystem实现
s3
“方案(即表单的URL)”s3://...
"). 你可以通过看sparkContext.hadoopConfiguration.get("fs.s3.impl")
. 如果是这样,那么您实际上需要为fs.s3a.*
“不是”fs.s3.*
".那么正确的设置是:
这个
S3AFileSystem
实现未使用“”下的任何属性fs.s3
". 通过研究与以下hadoop源代码链接相关的代码,您可以看到:https://github.com/apache/hadoop/blob/43e8ac60971323054753bb0b21e52581f7996ece/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/constants.java#l268