Spark中的NoSuchMethodError

时间:2017-04-28 09:12:53

标签: apache-spark nosuchmethoderror

我有一个spark 2.1.0的项目,它在我的本地集群上运行(它们是Ubuntu 16.04),但在工作集群(Red Hat 4.4.7-4,这么老)是错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.json4s.JsonWriter$.streaming(Ljava/io/Writer;Lorg/json4s/Formats;)Lorg/json4s/JsonWriter;
    at org.json4s.native.Serialization$.write(Serialization.scala:43)
    at org.json4s.native.Serialization$.write(Serialization.scala:37)
    at org.json4s.native.Json.write(Json.scala:11)
    at net.yunzone.OperSql$$anonfun$updateTypeStat$1.apply(OperSql.scala:315)
    at net.yunzone.OperSql$$anonfun$updateTypeStat$1.apply(OperSql.scala:299)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
    at net.yunzone.OperSql$.updateTypeStat(OperSql.scala:299)
    at net.yunzone.AnalysisLacci$.analysisLacci(AnalysisLacci.scala:62)
    at net.yunzone.UShanxi.AnalysisSource$.main(AnalysisSource.scala:203)
    at net.yunzone.UShanxi.AnalysisSource.main(AnalysisSource.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)

开始我认为它们是环境或配置的问题,我多次检查它们,它仍然是一个错误。我也试图将json4s版本替换为3.4或3.3,它仍然是一个错误。

这可能与glibc版本有关吗?

谁能帮助我,我几乎疯了。

1 个答案:

答案 0 :(得分:0)

根据我的经验,我认为最有可能的案例

你有一些来自依赖管理工具的jar依赖项,比如maven。

但是当你测试代码时,你可以在〜/ .m2 / ...中使用jar,也许在测试范围内。

但是其他群集也具有此依赖关系的不同版本。

您应该使用一些额外的插件将所有依赖项和应用程序代码打包在一个超级jar 中,并将其上传到您的驱动程序节点上,然后执行它。