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

时间:2017-09-09 06:11:29

标签: apache-spark amazon-s3 pyspark pycharm

我正在使用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从S3下载文件时,它可以成功。

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

  返回

错误:java.lang.NoClassDefFoundError:     组织/阿帕奇/ hadoop的/ FS / GlobalStorageStatistics $ StorageStatisticsProvider

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

  

AWS_ACCESS_KEY_ID = myaccesskey。
  AWS_SECRET_ACCESS_KEY = mysecretkey

或在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 个答案:

答案 0 :(得分:2)

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