Apache spark 使用Spark读取S3文件时提供AWS_配置文件
我希望我的Spark应用程序(Scala)能够读取S3文件Apache spark 使用Spark读取S3文件时提供AWS_配置文件,apache-spark,hadoop,amazon-s3,profile,aws-credentials,Apache Spark,Hadoop,Amazon S3,Profile,Aws Credentials,我希望我的Spark应用程序(Scala)能够读取S3文件 spark.read.parquet("s3://my-bucket-name/my-object-key") 在我的开发计算机上,我可以使用awscli访问S3文件,~/.aws/config或~/.aws/credentials中的预配置配置配置文件,如: aws --profile my-profile s3 ls s3://my-bucket-name/my-object-key 但是当尝试从Spark读
spark.read.parquet("s3://my-bucket-name/my-object-key")
在我的开发计算机上,我可以使用awscli访问S3文件,~/.aws/config
或~/.aws/credentials
中的预配置配置配置文件,如:
aws --profile my-profile s3 ls s3://my-bucket-name/my-object-key
但是当尝试从Spark读取这些文件时,使用作为env变量提供的aws_配置文件(aws_配置文件),我得到了以下错误:
DoesBucket存在于我的bucket名称中:com.amazonaws.AmazonClientException:BasicAWSCredentialsProvider环境变量CredentialsProvider SharedInstanceProfileCredentialsProvider:com.amazonaws.sdkClientxception:无法从服务端点加载凭据
还尝试将概要文件作为JVM选项提供(-Daws.profile=my profile
),但没有成功
感谢阅读。解决方案是提供spark属性:
fs.s3a.aws.credentials.provider
,将其设置为com.amazonaws.auth.profile.ProfileCredentialsProvider
。
如果我可以更改代码以构建Spark会话,则类似于:
SparkSession
.builder()
.config("fs.s3a.aws.credentials.provider","com.amazonaws.auth.profile.ProfileCredentialsProvider")
.getOrCreate()
另一种方法是提供JVM选项-Dspark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.profile.ProfileCredentialsProvider
*注意前缀
spark.hadoop