我正在尝试使用Pyspark将Spark数据帧写入AWS S3存储桶,并遇到一个例外,即不支持指定的加密方法。存储桶具有服务器端加密设置。
我从spark-default.conf运行以下软件包: spark.jars.packages com.amazonaws:aws-java-sdk:1.9.5,org.apache.hadoop:hadoop-aws:3.2.0
查看了以下现有线程:Doesn't Spark/Hadoop support SSE-KMS encryption on AWS S3,并提到上述版本应支持SSE-KMS加密。
我还包括core-site.xml以具有该属性 'fs.s3a.server-side-encryption-algorithm'设置为'SSE-KMS'
但是,我仍然会收到错误消息。 请注意,对于没有SSE-KMS的存储桶,这可以正常工作。
错误消息:AmazonS3Exception:状态代码:400,AWS服务:Amazon S3,AWS错误代码:InvalidArgument,AWS错误消息:不支持指定的加密方法
答案 0 :(得分:0)
Hadoop 3.2.0绝对支持SSE-KMS,因此无论出现什么问题,它都将:配置中使用的SSE-KMS密钥,您的访问权限或其他一些奇怪现象(例如,密钥不是在与存储桶相同的区域中。
但是:该版本是针对AWS 1.11.375 mvnrepo hadoop-aws构建的。混合JAR通常注定要失败。那可能是一个因素,也许不是。
您从远端拿回了400,表示那里有东西被拒绝了。
推荐
注意:尝试读取数据时,fs.s3a.encryption设置是什么都没有关系-S3知道使用的KMS密钥,如果有权限,将自动使用它来解密。这是检查您是否拥有密钥读取权限的好方法
答案 1 :(得分:0)
感谢您所有的投入,史蒂夫。在spark-defaults.conf中添加以下内容可解决我们的问题:
spark.hadoop.fs.s3a。服务器端加密算法AES256