S3角色授权Spark



在aws

中使用pyspark2(版本2.0.0.cloudera1)

我正在尝试写出从SPARK到S3存储的数据帧,但由于身份验证而失败:

pyspark.sql.utils.illegalargumentException:u'aws访问密钥ID和 必须通过设置秘密访问密钥来指定 fs.s3n.awsaccesskeyid和fs.s3n.awssecretaccesskey属性 (分别)。'

我的pyspark代码是:

utp.coalesce(1).write.format('com.databricks.spark.csv').save('s3n://my_bucket/tmr_xfers/test_output')

我们使用角色访问S3,即'aws_iam_role = arn:aws:iam :: 123456789012:cool/rolename' - 不是个人访问KeyiDs

我需要在火花代码中更改什么,以便我的CSV使用角色而不是单个AccessKeyId和SecretAccesskey将其写入S3?

我遇到了同样的问题,并通过使用s3a://来解决它,在任何情况下,这显然更现代和表现。

问题在Hadoop驱动程序代码(我认为hadoop-aws.jar)中负责访问S3文件系统。显然,s3n'本机'协议使用了一些难以使用的旧JETS3T驱动程序,每个人都不敢与之混在一起。新的s3a协议实现直接使用AWS SDK,并支持实例配置文件等。

看看这些Hadoop-9680和Hadoop-9384,以了解为什么他们想到了这个问题。

这是Scala Spark2中的解决方案,请注意安全问题。

spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "xxxxx")
spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "xxxxxxxx")
Df.write.
   format("com.databricks.spark.csv").option("header", "true").
   save("s3n://my_bucket/tmr_xfers/test_output")

最新更新