我正在使用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中运行。
有人有线索吗?
答案 0 :(得分:2)
看起来您没有在s3n://2017/01/22/filename
中设置存储桶名称。有效路径应为s3n://bucket_name/path_to_file
。