搭建和使用最新版的Spark3.2.0,在版本上踩了很多坑,特此记录一下,避免后来者犯错。
首先看下图,即官网下载Spark的版本选择上的红框介绍:
这里介绍了Spark3用的是Scala2.12,Spark3.2+用的是Scala2.13,但是如果下载下来会发现,该包下的Scala版本是2.12.15,如下图所示:
通过Spark-Shell也可以看到,它的版本信息,简直就是在打脸:
这样就会造成一个问题,使用Maven引入Spark3.2.0、Scala2.13,在本地编译运行正常(因为Maven引入的Spark3.2.0不包含Scala),而打成jar上传到服务器实际环境中运行,便报如下版本不一致的异常:
Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.ClassTag$.Int()Lscala/reflect/ManifestFactory$IntManifest;
经过研究发现是它官网介绍上的混乱导致使用者遇到该问题,又下载下官网中指定的带scala2.13后缀的,发现里面的scala是2.13的:
里面包含的scala jar:
这里必须要吐槽的是,Spark的Scala版本要么就别轻易变,要么就跟上节奏。现在Scala都已经更新到3.1版本了,Spark在版本升级上不进行Scala大版本的升级,反而在小版本上更替,而且官方介绍上又混乱,导致误导使用者,浪费时间。
顺便提一下的是,选的时候显示的是Haoop3.3,下载的文件名上又标注的是Hadoop3.2。。
这样只能使用spark-3.2.0-bin-hadoop3.2-scala2.13.tgz版本,经测试,在Windows下配置该环境,执行spark-shell,还是会报异常,只能还是用Spark-3.1.2,详见:
Spark3.2教程(一)Windows10搭建Spark3.2.0
经测试,该版本在Linux上部署、运行jar正常。