Ошибка Spark SQL с помощью java.lang.NoClassDefFoundError: org/codehaus/commons/compiler/UncheckedCompileException
Запуск программы Spark SQL (v2.1.0_2.11) в Java немедленно завершается с последующим исключением, как только первое действие вызывается в кадре данных:
java.lang.ClassNotFoundException: org.codehaus.commons.compiler.UncheckedCompileException
Я запустил его в Eclipse вне среды spark-submit
. Я использую следующую зависимость Spark SQL Maven:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0</version>
<scope>provided</scope>
</dependency>
Ответы
Ответ 1
Преступником является библиотека commons-compiler
. Вот конфликт:
![введите описание изображения здесь]()
Чтобы обойти это, добавьте следующее в свой pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>2.7.8</version>
</dependency>
</dependencies>
</dependencyManagement>
Ответ 2
У меня были похожие проблемы при обновлении spark-2.2.1 до spark-2.3.0.
В моем случае пришлось исправлять commons-compiler и janino
Решение Spark 2.3:
<dependencyManagement>
<dependencies>
<!--Spark java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerException-->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.8</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.8</version>
</dependency>
</dependencies>
Ответ 3
при переходе от CDH Parcel 2.2.0.cloudera1 к 2.3.0.cloudera4 мы просто переписали свойство maven:
<janino.version>3.0.8</janino.version>
Кроме того, мы определили правильную версию зависимости улья в части управления зависимостями:
<hive.version>1.1.0-cdh5.13.3</hive.version>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>${hive.version}</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>parquet-hadoop-bundle</artifactId>
<groupId>com.twitter</groupId>
</exclusion>
</exclusions>
</dependency>
Исключения были необходимы для предыдущей версии, они могут быть не нужны больше