当前位置: 首页 > 知识库问答 >
问题:

发现错误

赵征
2023-03-14

在Hadoop上运行Spark时,我遇到了以下错误。当我使用Scala API时,它也给了我这个错误。我确信这个错误与Spark路径和类路径有关。

错误是:

共有1个答案

桓信鸥
2023-03-14

编辑原来的答案实际上是错误的。当然,“classpath first”属性在某些情况下很有用,但在本例中并不有用。谢谢你的投票,但这是不配的。

Java语言lang.NoSuchMethodError:org。阿帕奇。拼花地板语义版本。(IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)在组织中。阿帕奇。拼花地板腐败统计

您正在使用Spark 2.1.0,它捆绑了Parket V1.8.1,它在包org.apache.parquet中定义了它的类。

您的Hadoop发行版似乎来自Cloudera,并且(例如)CDH 5.10捆绑了Parquet V1.5.0,它在package中定义了它的类。

unzip -l $SPARK_HOME/jars/parquet-column-1.8.1.jar | grep CorruptStatistics.class
     3507  07-17-2015 13:56   org/apache/parquet/CorruptStatistics.class

unzip -l /opt/cloudera/parcels/CDH/jars/parquet-common-1.5.0-cdh5.10.0.jar | grep SemanticVersion.class
     5406  01-20-2017 11:57   parquet/SemanticVersion.class

所以这些版本显然是不兼容的。

编辑时应确保它们不相互干扰,因为软件包不同。

默认情况下,在Thread下运行Spark executors时,类路径以随机顺序包含来自两个版本的Parquet的JAR,结果是灾难性的。

解决方法:确保您的Spark JAR在类路径中优先于

  • 每次执行时都有一个命令行选项--conf spark。纱线使用者类路径。第一个=真
  • 或spark Default中的全局条目。形态火花。纱线使用者类路径。第一个真值

“NoSuchmetodError”抱怨它在运行时找不到编译时存在的方法。
这适用于类SemanticVersion和没有名称的方法——这显然是错误的,即使是构造函数也应该用标记。

方法详细信息:参数(int, int, int, String, String, String)返回类型val。请参阅该帖子以供参考。

好的,让我们假设类CorruptStatistics是通过调用新的语义版本(1,2,3,“a”,“b”,“c”)编译的,该版本在编译时有效,但由于某种原因,当编译语义版本时,该构造函数不存在(版本不匹配?!)

这太疯狂了,因为“官方”源代码(参见“parquet-列”和“parquet-public”下的apache GIT repo)从来没有显示过这样的构造函数的痕迹,永远不会。实际上,腐败统计是一个错误修复,用于与一些有缺陷的镶木地板格式兼容,SemanticVersion只有两个构造函数,其中没有字符串。
V1.8.1的一些“非官方”(但更容易阅读)源代码可以在这里和这里找到。

一句话:所有这些都没有意义,除非

  • Spark 2.1.0提供的镶木地板罐在某种程度上不一致(而且还没有人发现这个bug!?!)

为了解决这个问题,我强烈建议您检查所有在运行时可能出现在纱线类路径中的罐子,包括您的自定义罐子Spark JARs Cloudera CDH JARs Cloudera extra parcels JARs,搜索任何腐败统计信息的引用。class--您有一个示例unzip-l | grep命令;把它绕成一个圈,准备好迎接惊喜。

 类似资料:
  • 问题内容: 这并不是一个问题。相反,当您使用外部API进行开发并且android.jar出现在Android中时,这是一个常见问题,它不会复制到您的项目中! 问题答案: 在搜索了各种论坛,Google和stackoverflow之后,我似乎自己得到了一个解决方案,并想到了共享它的想法。 每当您链接外部库时,最好通过创建一个/ lib文件夹并将其放在.jar文件夹中来进行链接(将其复制到文件中而不链

  • 我试图在本地打开一个浏览器来调试我在PhpStorm中编写的内容。然而,不管我安装了什么,PhpStorm总是抱怨“PHPCGINotFound”问题。 我已使用PHP 5.6安装了自制软件

  • 我在翻关于spring boot项目的例子。我已经通过maven编译并创建了一个jar文件,但是在运行尝试时出现了一个错误。 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-simple 错误: java-jar spring-boot-sample-

  • 我们在AKS有一个阿帕奇点火集群。我们设置了3个节点的ignite集群。我可以看到这3个节点显示在sys.nodes和sys.baseline_nodes中。下面是1个节点的缓存配置- 但是为什么日志文件中充满了下面的消息呢? [16:56:11,649][Strice][Grid-Nio-Worker-TCP-Comm-0-#23][TcpCommunicationSpi]无法处理选择器键[SE

  • 我收到此错误: 所有com.android.support库必须使用完全相同的versionspecification(混合版本会导致runtme崩溃)。找到版本27.1.1、26、1.0。示例包括com.android.support:animated-vector-drawable:27.1.1和android.supoirt:customTabs:26.1.0

  • 我正在尝试使用grails-rest-client-builder,但是我在安装插件时遇到了麻烦。 我确实看到了这篇文章:Grails导入插件在Grails中失败(rest Plugin:compile“:rest-client-builder:2.0.0”和“:rest0.8”),但我认为这个问题是不同的。谢谢,-J