如何解决AWS错误消息:使用AWS KMS托管密钥指定服务器端加密的请求需要AWS Signature版本4
使用pyspark写入S3存储桶时遇到以下错误。
com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:400,AWS服务:Amazon S3,AWS请求ID:A0B0C0000000DEF0,AWS错误代码:InvalidArgument,AWS错误消息:请求使用AWS KMS指定服务器端加密托管密钥需要AWS Signature版本4。
我已在S3存储桶上使用AWS KMS服务应用了服务器端加密。 我正在使用以下spark-submit命令-
spark-submit --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.7.2 --jars sample-jar sample_pyspark.py
这是我正在处理的示例代码-
spark_context = SparkContext()
sql_context = SQLContext(spark_context)
spark = SparkSession.builder.appName('abc').getOrCreate()
hadoopConf = spark_context._jsc.hadoopConfiguration()
hadoopConf.set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
#Have a spark dataframe 'source_data
source_data.coalesce(1).write.mode('overwrite').parquet("s3a://sample-bucket")
注意:尝试将spark-dataframe加载到s3存储桶中(未启用服务器端加密)并且成功
解决方法
该错误似乎是在告诉您在Amazon SDK上启用V4 S3签名。一种方法是从命令行:
spark-submit --conf spark.driver.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4' \
--conf spark.executor.extraJavaOptions='-Dcom.amazonaws.services.s3.enableV4' \
... (other spark options)
也就是说,我同意史蒂夫的观点,您应该使用更新的hadoop库。
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。