Spark Scala:java.lang.NoSuchFieldError:JAVA_9 位于 org.apache.spark.storage.StorageUtils$。<init>(StorageUtils.scala:207)

问题描述 投票:0回答:1

我有一个 Spark scala 应用程序,它使用以下版本(仅粘贴 pom.xml 的一部分)列出的依赖项和属性。

依赖关系:

  <groupId>org.apache.spark</groupId>
  <artifactId>spark-hive_2.12</artifactId>
  <version>3.3.2</version>

  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.12</artifactId>
  <version>3.3.2</version>

<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-reflect</artifactId>
  <version>2.12.10</version>
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-compiler</artifactId>
  <version>2.12.10</version>
  <scope>compile</scope>
</dependency>

特性:

<scala.major.version>2.12</scala.major.version>
<scala.test.version>3.2.18</scala.test.version>
<scala.version>2.12.18</scala.version>

<maven.assembly.plugin.verion>3.3.0</maven.assembly.plugin.verion>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.deploy.plugin.version>2.8.2</maven.deploy.plugin.version>
<maven.properties.plugin.verion>1.0.0</maven.properties.plugin.verion>
<maven.release.plugin.version>3.0.0</maven.release.plugin.version>
<maven.scala.plugin.version>4.5.6</maven.scala.plugin.version>
<maven.shade.plugin.version>3.5.2</maven.shade.plugin.version>
<maven.site.plugin.version>3.12.1</maven.site.plugin.version>
<maven.source.plugin.version>3.2.1</maven.source.plugin.version>

我的本地设置有 java=1.8.0_202 和 mvn=3.9.6

我能够成功编译 src/main 和 src/test --> “mvn test-compile”。

当我运行“mvn install”时,单元测试开始失败,并出现以下错误。

*** RUN ABORTED ***
An exception or error caused a run to abort: JAVA_9 
  java.lang.NoSuchFieldError: JAVA_9
  at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:207)
  at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala)
  at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:114)
  at org.apache.spark.SparkEnv$.$anonfun$create$9(SparkEnv.scala:353)
  at org.apache.spark.SparkEnv$.registerOrLookupEndpoint$1(SparkEnv.scala:290)
  at org.apache.spark.SparkEnv$.create(SparkEnv.scala:339)
  at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:194)
  at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:279)
  at org.apache.spark.SparkContext.<init>(SparkContext.scala:464)
  at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2714)

请帮我解决这个问题。另外,我不明白为什么控件会进入“org.apache.spark.storage.StorageUtils$.(StorageUtils.scala:207)”的“if”块,因为该应用程序仅使用java 8编译。

java scala maven apache-spark
1个回答
0
投票

问题不是由于代码进入

if
块造成的。这是因为它无法评估
if
语句

NoSuchFieldError
大多数情况下是由于混合了同一库的不同版本而引起的。

在这种情况下,它与运行时使用的

org.apache.commons.lang3.JavaVersion
不具有
Java_9
属性有关。可能是因为您正在拉取太旧版本的 Apache Commons Lang 3 库,而 Spark 需要更新版本。

您可以运行

mvn dependency:tree
来检查直接或传递拉取的版本是否存在不一致。

© www.soinside.com 2019 - 2024. All rights reserved.