本地类不兼容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
它对我很有帮助。