未找到 AWS EMR s3a 文件系统

Posted

技术标签:

【中文标题】未找到 AWS EMR s3a 文件系统【英文标题】:AWS EMR s3a filesystem not found 【发布时间】:2018-09-29 13:38:00 【问题描述】:

我正在运行一个 EMR 实例。它工作正常,但当我尝试从 Python Spark 脚本访问 S3 文件时,它突然开始出现以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o36.json.: 
   java.lang.RuntimeException: 
     java.lang.ClassNotFoundException: 
       Class org.apache.hadoop.fs.s3a.S3AFileSystem not found

我们如何解决这个问题?

提前致谢。

【问题讨论】:

【参考方案1】:

这是 spark 依赖项的问题。我必须在 park-defaults.conf 中添加 jars 配置。

spark.jars.packages                com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.2

请点击以下链接: https://gist.github.com/eddies/f37d696567f15b33029277ee9084c4a0

【讨论】:

如果你已经下载了一些包,有时spark可能无法完美下载依赖。在这种情况下,最好删除 .ivy2/cash、.ivy2/jars 和 .m2/repository。看看这篇文章:github.com/databricks/spark-redshift/issues/244 感谢@Moohebat 的文章。【参考方案2】:

对于 Amazon EMR,使用“s3:”前缀。 S3A 连接器是 ASF 的开源连接器; Amazon 有自己的(闭源)连接器,这是他们唯一支持的连接器

【讨论】:

我试过了,现在它抛出 java.io.IOException: No FileSystem for scheme: s3

以上是关于未找到 AWS EMR s3a 文件系统的主要内容,如果未能解决你的问题,请参考以下文章

AWS EMR 未生成 NameNode FsImage

如何从 Apache Spark 访问 s3a:// 文件?

如何在 AWS EMR 中启动辅助 Namenode

hadoop fs -ls s3://bucket 或 s3a://bucket 抛出“没有这样的文件或目录”错误

AWS EMR 文件已存在:Hadoop 作业读取和写入 S3

AWS EMR Spark 未使用自定义 Jar 加载 MainClass