使用 Spark 访问 s3a 时出现 403 错误

Posted

技术标签:

【中文标题】使用 Spark 访问 s3a 时出现 403 错误【英文标题】:403 Error while accessing s3a using Spark 【发布时间】:2020-06-14 19:30:41 【问题描述】:

问题:

能够使用 AWS CLI 以及 boto 3 成功下载文件。 但是,在使用 Hadoop/Spark 的 S3A 连接器时,收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o24.parquet.
: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: BCFFD14CB2939D68, AWS Error Code: null, AWS Error Message: Forbidden, S3 Extended Request ID: MfT8J6ZPlJccgHBXX+tX1fpX47V7dWCP3Dq+W9+IBUfUhsD4Nx+DcyqsbgbKsPn8NZzjc2U

配置: 在我的本地机器上运行它

    Spark 版本 2.4.4

    Hadoop 版本 2.7

添加的罐子:

    hadoop-aws-2.7.3.jar

    aws-java-sdk-1.7.4.jar

Hadoop 配置:

hadoop_conf.set("fs.s3a.access.key", access_key)
hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.secret.key", secret_key)
hadoop_conf.set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider")
hadoop_conf.set("fs.s3a.session.token", session_key)
hadoop_conf.set("fs.s3a.endpoint", "s3-us-west-2.amazonaws.com") # yes, I am using central eu server.
hadoop_conf.set("com.amazonaws.services.s3.enableV4", "true")

读取文件的代码:

from pyspark import SparkConf, SparkContext, SQLContext
sc = SparkContext.getOrCreate()
hadoop_conf=sc._jsc.hadoopConfiguration()
sqlContext = SQLContext(sc)
df = sqlContext.read.parquet(path)
print(df.head())

【问题讨论】:

我也遇到过这种情况;我不小心绊倒了; hadoop.apache.org/docs/r2.8.5 在尝试解决此问题时。所以我决定安装一个非 hadoop 的 spark 包并安装一个更好的版本的 hadoop(2.4.5 和 3.2.1)。但仍然遇到与您完全相同的问题,尽管有更详细的错误消息(非空 AWS 错误代码)Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: 41...; S3 Extended Request ID: JCAO0...), S3 Extended Request ID: JCAO0... 【参考方案1】:

将 AWS 凭证提供程序设置为配置凭证:

hadoopConf.set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")

【讨论】:

我也面临这个问题。直到现在都无法解决。任何人都可以建议我应该怎么做?

以上是关于使用 Spark 访问 s3a 时出现 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark Hadoop S3A SignatureDoesNotMatch

尝试从 Spark 访问 S3 时出现 400 Bad Request

通过spark加载现有的s3文件在scala中给出403,但在python中没有

通过 EMR 写入 s3a 时出现 OutOfMemory 错误

Azure 功能:访问存储帐户时出现 403 错误

如何解决安装IIS时出现HTTP错误403禁止访问?