java .io.InvalidClassException: несовместимый локальный класс - Apache Проблема отправки Spark для более чем одного рабочего - PullRequest
0 голосов
/ 18 июня 2020

Мы пытались запустить приложение java в Apache Spark, используя архитектуру master-worker. Ниже приведен пом. xml для приложения java:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>Final</groupId>
    <artifactId>DLSH</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.12</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Ниже приведена конфигурация искры для приложения java:

            SparkSession spark = SparkSession
                  .builder()
                  .appName("JavaBucketedRandomProjectionLSHExample")
                  .master(args[0])
                  .getOrCreate();

Java Используемая версия-11

  • Это отлично работает, когда я пытаюсь запустить с помощью spark-submit, установив главный URL-адрес с одним рабочим узлом.

Фактическая проблема:

  • Когда я пытаюсь запустить программу на двух рабочих узлах (две разные машины, использующие одну и ту же сеть) с помощью spark-submit, я столкнулся с проблемой несовместимости локального класса .

Ниже приведена команда, которую я использовал для запуска с двумя рабочими узлами с помощью spark-submit:

  • . / spark-master. sh - Для запуска мастера

  • . / spark-slave. sh "Master-URL" - Для запуска рабочих

Ниже приведен веб-интерфейс искры для указанной выше конфигурации:

3.1.0-SNAPSHOT Spark Master at spark://mushfiq:7077

    URL: spark://mushfiq:7077
    Alive Workers: 2
    Cores in use: 16 Total, 0 Used
    Memory in use: 29.2 GiB Total, 0.0 B Used
    Resources in use:
    Applications: 0 Running, 34 Completed
    Drivers: 0 Running, 0 Completed
    Status: ALIVE

Workers (2)
Worker Id                                         Address            State    Cores     Memory  
worker-20200617123647-128.123.63.43-45983   128.123.63.43:45983     ALIVE   8 (0 Used)  14.6 GiB (0.0 B Used)   
worker-20200617124042-128.123.63.78-34355   128.123.63.78:34355     ALIVE   8 (0 Used)  14.6 GiB (0.0 B Used)   

Ниже приведена команда spark-submit, используемая для выполнения java jar приложения с использованием над двумя рабочими узлами:

./spark-submit --class DistributedLSH.Application /home/mushfiq/Desktop/Eclipse/DLSHlatest.jar spark://mushfiq:7077 /home/mushfiq/Desktop/LSH/Datasets/Color/Color.ds /home/mushfiq/Desktop/LSH/Datasets/Color/randomdata.ds

Объяснение приведенной выше команды:

./spark-submit --class <ClassName> 
<Path to Jar File("/home.../DSHlatest.jar")>
<args[0]-Master URL(spark://mushfiq:7077)>
<args[1](/home/..../Color.ds)>
<args[2](/home/.....randomdata.ds)>

Apache версия Spark для Spark-submit - Мы использовали следующую версию GitHub для spark-submit - Apache Версия Spark

Вопрос

  • Итак, при запуске с помощью указанной выше команды мы получаем следующее исключение:
Lost task 1.3 in stage 2.0 (TID 9, 128.123.63.78, executor 1): java.io.InvalidClassException: org.apache.spark.sql.catalyst.encoders.ExpressionEncoder; 
local class incompatible: stream classdesc serialVersionUID = -2784885576793145316, local class serialVersionUID = -2690984018213736661
  • Я перепробовал множество подходов, чтобы исправить проблему. Но не смог. Я думаю, что проблема может заключаться в несовпадении версий Spark для pom. xml spark и spark-submit. Любая помощь здесь приветствуется. Заранее спасибо. Также, если у вас есть какие-либо вопросы по этому поводу, дайте мне знать.

1 Ответ

0 голосов
/ 18 июня 2020

Обычно это происходит, если у вас есть конфликтующая версия spark-catalyst_2.12 JAR, которая содержит класс org.apache.spark.sql.catalyst.encoders.ExpressionEncoder

  • Итак, можете ли вы проверить путь к классам spark-submit в клиентском режиме, чтобы увидеть из какой jar он принимает этот класс?

Убедитесь, что вы не смешиваете путь к классам, чтобы включить оба JAR. Вы можете проверить значения параметра "--jars".

...