【问题标题】:java.lang.NoSuchMethodError when deploying my program using spark-submit使用 spark-submit 部署我的程序时出现 java.lang.NoSuchMethodError
【发布时间】:2019-09-09 09:15:38
【问题描述】:

我正在编写一个程序来将数据上传到某个 s3a:// 链接。程序通过mvn install编译。在本地运行程序(如使用java -jar jarfile.jar)没有返回错误。但是,当我使用 spark-submit(如使用spark-submit jarfile.jar)时,它返回了这样的错误:

线程“主”java.lang.NoSuchMethodError 中的异常: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V 在 org.apache.hadoop.fs.s3a.S3AFileSystem.addDeprecatedKeys(S3AFileSystem.java:181) 在 org.apache.hadoop.fs.s3a.S3AFileSystem.(S3AFileSystem.java:185) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:348) ...

追踪到我的这部分源代码的错误日志:

sparkDataset
        .write()
        .format("parquet")
        .mode(SaveMode.Overwrite)
        .save("some s3a:// link");

其中sparkDatasetorg.apache.spark.sql.Dataset 的一个实例。

尝试How to access s3a:// files from Apache Spark? 不成功并返回另一个错误:

线程“主”java.lang.NoClassDefFoundError 中的异常: org/apache/hadoop/fs/GlobalStorageStatistics$StorageStatisticsProvider

java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V 的问题也不太可能,因为我可以在本地运行,兼容性不是问题。

另外,这些是我使用的相关库的版本:

  • aws-java-sdk-bundle:1.11.199
  • hadoop-aws:3.0.0

我期待通过 s3a:// 链接写入的文件。我认为依赖不是问题,因为我可以在本地运行。我只在使用 spark-submit 运行这个程序时遇到这个问题。有人对如何解决这个问题有任何想法吗?

编辑:另外,我检查了spark提交的spark版本据说是为hadoop 2.7及更高版本构建的。我严格使用hadoop 3.0.0。这可能是为什么我的程序中发生此类错误的线索吗?

【问题讨论】:

    标签: java apache-spark hadoop amazon-s3


    【解决方案1】:

    Run spark-submit with my own build of hadoop 的回答似乎指导我找到自己的解决方案。

    根据我的理解,由于某些未知原因*,发行版“spark-2.4.0-bin-hadoop2.7.tgz”提供的 spark-submit 将排除在您的应用程序中一起编译的任何 hadoop 包.

    之所以出现NoSuchMethodError 错误是因为方法reloadExistingConfiguration 直到Hadoop 版本2.8.x 才存在。似乎写一个镶木地板会以某种方式调用这个特定的方法。

    我的解决方案是使用 'spark-2.4.0-without-hadoop.tgz' 的单独分发,同时将其连接到 hadoop 3.0.0,这样即使 spark-submit 排除了执行期间在您的应用程序中打包。

    此外,由于无论如何 spark-submit 都会排除这些包,所以我不会在通过 Maven 编译期间创建胖 jar。相反,我会在执行期间使用标志 --packages 来指定运行我的应用程序所需的依赖项。

    【讨论】:

    • *未知原因是由于我对火花发动机及其在一般生产中的使用了解有限
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2019-07-26
    • 1970-01-01
    • 2015-02-17
    • 2021-10-06
    • 2017-12-25
    相关资源
    最近更新 更多