感谢 stackoverflow,我成功地将 hadoop-aws-2.7.3.jar 和 aws-java-sdk-1.7.4.jar 从 Maven 存储库复制到 $SPARK_HOME/jars/ 中,以获取 s3a:// 从 S3 存储桶中读取在我的 ec2 Linux 实例上使用 pyspark (spark 2.2.0)。
df=spark.read.option("header","true").csv("s3a://bucket/csv_file")
但我一直坚持将转换后的数据写回到启用服务器端加密的 s3 存储桶中。正如预期的那样,下面的操作会抛出“访问被拒绝”,因为我没有指定标志来在 pyspark 执行环境中启用服务器端加密
df.write.parquet("s3a://s3_bucket/output.parquet")
为了验证,我写入本地文件并使用 -sse 上传到 s3 存储桶,效果很好
aws s3 cp local_path s3://s3_bucket/ --sse
如何在 pyspark 中启用与上面类似的服务器端加密?
Note:我确实尝试将“fs.s3a.enableServerSideEncryption true”添加到spark-default.conf,并在启动时通过pyspark的--conf参数传递相同的内容,但没有任何乐趣。
Thanks
我在经历以下 Hadoop JIRA 之后理解的方式 - HADOOP-10675、HADOOP-10400、HADOOP-10568
由于 fs/s3 是 Hadoop 的一部分,如果您的资产中的所有 S3 存储桶都受 SSE 保护,则需要将以下内容添加到 Spark-default.conf 中
spark.hadoop.fs.s3a.server-side-encryption-algorithm AES256
添加此后,我能够成功写入受 SSE(服务器端加密)保护的 S3 存储桶。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)