关于alluxio+spark报错,Jackson version is too old,不能生成sparkContext

来源:互联网 发布:淘宝大学商学院哪个好 编辑:程序博客网 时间:2024/05/29 13:52

问题重现:关于alluxio+spark报错,Jackson version is too old,不能生成sparkContext

在搭建alluxio(原tachyon)+spark时,我们需要将alluxio-core-client-1.3.0-jar-with-dependencies.jar这个jar包添加到spark的classpath里,这样spark才能访问alluxio上的文件,才能把alluxio文件系统作为输入输出源。


但是,当我们用bin/spark-shell测试时,会出错,不能生成sparkContext,错误截图如下:


关键错误信息 Jackson version is too old 2.4.2


解决办法:

我们进入spark目录的jars目录下,发现:

spark 所用到的jackson版本都是2.6.5,因此一定是alluxio-core-client-1.3.0-jar-with-dependencies.jar中的jackson版本过于低,导致之后的种种错误。


首先,进入产生alluxio-core-client-1.3.0-jar-with-dependencies.jar的这个alluxio子项目

打开pom.xml


可以看到,在编译alluxio时候,激活spark 的profile,会激活以下的依赖项。

我们找到这里的设置,这里的jackson版本是2.6.6,但是由于编译的时候 没有激活spark 的profile,所以从maven库中将2.4的jackson加入到jar包中。因此导致,jackson的版本太老。


为了进一步验证我的猜想,我将alluxio-core-client-1.3.0-jar-with-dependencies.jar这个jar进行解压。

$ jar -xvf alluxio-core-client-1.3.0-jar-with-dependencies.jar

进入该路径,检查版本

果然版本太低,这样说明,这个jar包里的关于jackson的class文件都是低版本2.4的。

所以,我们需要做一下替换。

于是,我们到spark jars目录下,拿到关于jackson的3个2.6.5版本的jar包,在一个目录下解压开,然后将文件夹 com(里面盛放着class文件)  和META-INF(maven等的索引)递归考入到解压的alluxio-core-client-1.3.0-jar-with-dependencies.jar目录里。

$jar -cvf alluxio-core-client-1.3.0-jar-with-dependencies.jar ./*

这样,我们得到了一个新的alluxio-core-client-1.3.0-jar-with-dependencies.jar包,用这个包替换调原来的包

执行

$bin/spark-shell


启动成功。


原因分析:这个锅不得不由maven来背,工具有时候你很爱它,有时候你很恨他

由于没有激活spark profile,jackson的版本就没有更新到2.6,因为即使hadoop2.7,也只不过用jackson2.2,所以2.4对于2.2已经很新了,但是对于spark就too old了。但是-Pspark 去编译alluxio项目,alluxio-core-client-1.3.0-jar-with-dependencies.jar又不完整,所以可能是一个坑吧。

也许有更好的解决方法,但是目前来说,网上真心落地到实事的关于alluxio的文章,blog还是很少,只能自己爬坑呗。

0 0