在 Python 中使用 Spark 读取 S3 文件时权限被拒绝

Posted

技术标签:

【中文标题】在 Python 中使用 Spark 读取 S3 文件时权限被拒绝【英文标题】:Permission Denied when reading S3 file with Spark in Python 【发布时间】:2017-09-09 06:11:29 【问题描述】:

我正在使用 PySpark 读取 PyCharm 中的 S3 文件。返回以下错误:

py4j.protocol.Py4JJavaError: 调用时出错 o26.partitions。 org.apache.hadoop.security.AccessControlException:权限被拒绝:s3n://2017/01/22/20/firenam:

代码是这样的:

hadoopConf = sc._jsc.hadoopConfiguration()
hadoopConf.set("fs.s3n.awsAccessKeyId", "myaccesskey")
hadoopConf.set("fs.s3n.awsSecretAccessKey", "MySecretKey")
temp = sc.textFile("s3n://2017/01/22/filename")
temp.count()

当我使用 Boto3 通过 Python 从 S3 下载文件时,它可以成功。

将“s3n”更改为“s3a”仍然失败,但有一个不同的例外:

返回错误:java.lang.NoClassDefFoundError: org/apache/hadoop/fs/GlobalStorageStatistics$StorageStatisticsProvider

我也尝试导出以下环境变量:

AWS_ACCESS_KEY_ID = myaccesskey . AWS_SECRET_ACCESS_KEY = 我的密钥

或在 os.environ 中显式添加它们,也失败了。

我的环境是:

操作系统:Mac Sierra 10.12.6 火花:2.2.0 Python:3.6.1

我在代码中有以下提交参数

SUBMIT_ARGS = "--master local[*] --jars /ExternalJar/aws-java-sdk-1.7.4.jar,/ExternalJar/hadoop-aws-2.7.3.jar pyspark-shell"

作业直接在 PyCharm IDE 中运行。

谁有线索?

【问题讨论】:

【参考方案1】:

您似乎没有在s3n://2017/01/22/filename 中设置存储桶名称。有效路径应为s3n://bucket_name/path_to_file

【讨论】:

以上是关于在 Python 中使用 Spark 读取 S3 文件时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python Jupyter Notebook 通过 KMS 加密从 S3 读取文件

在 emr 中使用 spark 从 S3 读取 avro 失败

PySpark:在 Spark 数据框中读取多个 XML 文件(s3 路径列表)

如何在 java 中使用 spark 从 AWS S3 读取 .xls 文件?并且无法读取 sheetName

如何从 Spark 正确读取 S3 中的 .csv 文件? - 无法读取文件的页脚

Spark 使用 sc.textFile ("s3n://...) 从 S3 读取文件