Sow*_*Sow 5 encryption server-side amazon-web-services pyspark amazon-kms
我在使用 pyspark 写入 S3 存储桶时遇到以下错误。
com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:400,AWS 服务:Amazon S3,AWS 请求 ID:A0B0C0000000DEF0,AWS 错误代码:InvalidArgument,AWS 错误消息:使用 AWS KMS 托管密钥指定服务器端加密的请求需要AWS 签名版本 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
Run Code Online (Sandbox Code Playgroud)
这是我正在处理的示例代码 -
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")
Run Code Online (Sandbox Code Playgroud)
注意:尝试将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)
Run Code Online (Sandbox Code Playgroud)
也就是说,我同意 Steve 的观点,您应该使用更新的 hadoop 库。
参考:
| 归档时间: |
|
| 查看次数: |
9307 次 |
| 最近记录: |