我希望我的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读取这些文件时,使用作为env变量(aws\u profile)提供的aws\u profile,我得到了以下错误:
doesbucketexist on my bucket name:com.amazonaws.amazonclientexception:没有由basicawscredentialsprovider环境提供的aws凭据VariableCredentialsProvider sharedinstanceprofilecredentialsprovider:com.amazonaws.sdkclientexception:无法从服务端点加载凭据
还尝试将概要文件作为jvm选项提供( -Daws.profile=my-profile
),没有运气。
谢谢你的阅读。
1条答案
按热度按时间w1jd8yoj1#
解决方案是提供Spark特性:
fs.s3a.aws.credentials.provider
,将其设置为com.amazonaws.auth.profile.ProfileCredentialsProvider
. 如果我可以修改代码来构建spark会话,那么类似于:另一种方法是提供jvm选项
-Dspark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.profile.ProfileCredentialsProvider
.spark.hadoop