Ошибка 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>

Исключения были необходимы для предыдущей версии, они могут быть не нужны больше