本地类不兼容exception:从IDE运行spark standalone时

我开始测试火花。 我在本地计算机上安装了spark,并使用单个worker运行本地集群。 当我尝试通过设置sparconf从我的IDE执行我的工作时,如下所示:

final SparkConf conf = new SparkConf().setAppName("testSparkfromJava").setMaster("spark://XXXXXXXXXX:7077"); final JavaSparkContext sc = new JavaSparkContext(conf); final JavaRDD distFile = sc.textFile(Paths.get("").toAbsolutePath().toString() + "dataSpark/datastores.json");* 

我有这个例外:

 java.lang.RuntimeException: java.io.InvalidClassException: org.apache.spark.rpc.netty.RequestMessage; local class incompatible: stream classdesc serialVersionUID = -5447855329526097695, local class serialVersionUID = -2221986757032131007 

全部使用以下组合版本

安装火花1.6.2

用bin / spark-submit –versionvalidation

  org.apache.spark spark-core_2.10 1.6.2  

Scala 2.10.6和Java 8。

请注意,它不起作用,并且与以下版本具有类似的类不兼容问题

Scala 2.11.8和Java 8

  org.apache.spark spark-core_2.11 1.6.2  

看起来您安装的Spark版本与IDE中使用的Spark版本不同。

如果您使用的是maven,只需比较pom.xml中声明的依赖项版本和bin/spark-submit --version的输出,并确保它们相同。

它可能是以下多种不兼容的原因:

  • Hadoop版本;
  • Spark版本;
  • Scala版;

对我来说,它的Scala版本,我在我的IDE中使用2.11.X ,但官方文档说:

Spark runs on Java 7+, Python 2.6+ and R 3.1+. For the Scala API, Spark 1.6.1 uses Scala 2.10. You will need to use a compatible Scala version (2.10.x).

如果你使用最新的Java(1.8),那么doc中的x 不能小于3 ,导致这个问题 。 希望它能帮到你!

我遇到了这个问题因为Spark jar依赖是2.1.0但安装的Spark Engine版本是2.0.0因此版本不匹配,所以它抛出了这个exception。

此问题的根本原因是项目中的Spark jar依赖项版本不匹配,并且已安装Spark Engine正在运行执行spark作业。

因此validation两个版本并使它们相同。

示例Spark-core Jar版本2.1.0和Spark Computation Engine版本必须为:2.1.0

Spark-core Jar版本2.0.0和Spark Computation Engine版本必须为:2.0.0

它对我很有帮助。