我有一个 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编译。
问题不是由于代码进入
if
块造成的。这是因为它无法评估 if
语句。
NoSuchFieldError
大多数情况下是由于混合了同一库的不同版本而引起的。
在这种情况下,它与运行时使用的
org.apache.commons.lang3.JavaVersion
不具有 Java_9
属性有关。可能是因为您正在拉取太旧版本的 Apache Commons Lang 3 库,而 Spark 需要更新版本。
您可以运行
mvn dependency:tree
来检查直接或传递拉取的版本是否存在不一致。