java.io.invalidclassexception:本地类不兼容-多个工作进程的apache spark提交问题

liwlm1x9  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(486)

我们一直在尝试在apachespark中使用master-worker架构运行java应用程序。下面是pom.xml for 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应用程序的spark配置:

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

java版本-11
当我尝试使用spark submit运行时,通过将主url设置为一个worker节点,这可以很好地工作。
实际问题:
当我尝试使用spark submit在两个工作节点(使用相同网络的两台不同机器)中运行程序时,我遇到了本地类不兼容的问题。
下面是我使用spark submit与两个工作节点一起运行的命令:
./spark-master.sh-启动主机
./spark-slave.sh“主url”-启动工人
以下是上述配置的spark web ui:

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)>

apachespark版本用于spark submit-我们使用以下github版本用于spark submit-apachespark版本
问题
因此,当我们运行上述命令时,会出现以下异常:

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

我尝试了很多方法来解决这个问题。但不能。我认为问题可能是pom.xml spark和spark submit的spark版本不匹配。非常感谢您的帮助。提前谢谢。另外,如果你对这个问题有任何疑问,请告诉我。

wooyq4lh

wooyq4lh1#

这通常发生在您有冲突版本的 spark-catalyst_2.12 包含类的jar org.apache.spark.sql.catalyst.encoders.ExpressionEncoder 所以你能检查一下客户端模式下spark submit的类路径,看看它是从哪个jar获取这个类的吗?
确保您没有混合类路径来包含这两个jar。您可以检查“--jars”参数值。

相关问题