我尝试使用 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.服务器端加密算法”设置为“SSE-KMS”
但是,我仍然收到错误。 请注意,对于没有 SSE-KMS 的存储桶,这可以正常工作。
错误消息:AmazonS3Exception:状态代码:400、AWS 服务:Amazon S3、AWS 错误代码:InvalidArgument、AWS 错误消息:不支持指定的加密方法
最佳答案
Hadoop 3.2.0 绝对支持 SSE-KMS,因此无论问题是什么,都会出现:配置中使用的 SSE-KMS key 、您访问它的权限或其他一些怪癖(例如 key 不是与存储桶位于同一区域)。
但是:该版本是针对 AWS 1.11.375 mvnrepo hadoop-aws 构建的。混合 JAR 通常是注定要失败的。这可能是一个因素,也可能不是。
您从远端收到了 400 回复,这意味着某些内容被拒绝了。
推荐
- 你看troubleshooting s3a page
- 下载 cloudstore并运行其storediag来引导连接诊断
- 尝试使用 AWS CLI 使用相同的设置处理数据
注意:当您尝试读取数据时,fs.s3a.encryption 设置是什么并不重要 -S3 知道所使用的 KMS key ,并且如果您有权限,将自动使用它来解密。这是检查您是否具有 key 读取权限的好方法
关于pyspark - 使用 pyspark 读取 KMS 加密 Spark 数据帧并将其写入 S3 存储桶时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797778/