使用spark读取s3文件时提供aws\u配置文件

new9mtju  于 2021-07-13  发布在  Hadoop
关注(0)|答案(1)|浏览(615)

我希望我的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 ),没有运气。
谢谢你的阅读。

w1jd8yoj

w1jd8yoj1#

解决方案是提供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

相关问题