【问题标题】:java.lang.NoClassDefFoundError: org/apache/hadoop/fs/StorageStatisticsjava.lang.NoClassDefFoundError: org/apache/hadoop/fs/StorageStatistics
【发布时间】:2017-06-07 11:33:22
【问题描述】:

我正在尝试从服务器运行一个简单的 spark 到 s3 应用程序,但我不断收到以下错误,因为服务器安装了 hadoop 2.7.3,而且它看起来不包括 GlobalStorageStatistics class。我在 pom.xml 文件中定义了 hadoop 2.8.x,但试图通过在本地运行它来测试它。

如果我必须使用 hadoop 2.7.3,我怎样才能让它忽略搜索或包含该类的解决方法选项?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/StorageStatistics
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2134)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2099)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
    at org.apache.spark.sql.execution.datasources.DataSource.hasMetadata(DataSource.scala:301)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:344)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425)
    at com.ibm.cos.jdbc2DF$.main(jdbc2DF.scala:153)
    at com.ibm.cos.jdbc2DF.main(jdbc2DF.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.StorageStatistics
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 28 more

【问题讨论】:

    标签: hadoop apache-spark


    【解决方案1】:

    您不能混合使用一些 Hadoop 并期望一切正常。这不仅仅是 hadoop-common 和 hadoop-aws 中的内部类之间的紧密耦合,还包括构建了 hadoop-aws 模块的 amazon-aws SDK 的特定版本。

    如果您在尝试使用 s3a:// URL 时收到 ClassNotFoundExceptionMethodNotFoundException 堆栈跟踪,则可能是 JAR 版本不匹配。

    使用 RFC2117 必须/应该/可能的术语,以下是避免这种情况的规则:

    1. s3a 连接器位于 hadoop-aws JAR 中;它取决于 hadoop-common 和 aws-sdk-shaded JAR。
    2. 所有这些 JAR 都必须在类路径中。
    3. 您的类路径中的 hadoop-* JAR 的所有版本都必须完全相同相同的版本,例如到处都是 3.3.1 或 3.2.2。否则:堆栈跟踪。总是
    4. 而且它们必须是该版本独有的;类路径上不得有多个版本的 hadoop-common、hadoop-aws 等。否则:堆栈跟踪。总是。通常ClassNotFoundException 表示 hadoop-common 和 hadoop-aws 不匹配。
    5. 确切缺失的类因 Hadoop 版本而异:它是 org.apache.fs.s3a.S3AFileSystem 依赖的第一个类,类加载器无法找到 - 确切的类取决于 JAR 的不匹配
    6. AWS 开发工具包版本应该是随附的版本。否则:也许是堆栈跟踪,也许不是。无论哪种方式,您都处于自我支持模式或已选择加入 QE 团队进行版本测试。
    7. 你需要的AWS SDK的具体版本可以从Maven Repository确定
    8. 更改 AWS 开发工具包版本可能有效。您可以进行测试,如果存在兼容性问题:您可以进行修复。请参阅Qualifying an AWS SDK Update,了解您应该做的最少的事情。
    9. 您应该使用最新版本的 Hadoop/Spark 已经过测试。非关键错误修复不会向后移植到旧的 Hadoop 版本,并且 S3A 和 ABFS 连接器正在迅速发展。新版本会更好、更强、更快。一般
    10. 如果这些都不起作用。在 ASF JIRA 服务器上提交的错误报告将作为 WORKSFORME 关闭。配置问题不会被视为代码错误

    最后:ASF 文档The S3A Connector

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2020-02-08
      • 1970-01-01
      相关资源
      最近更新 更多