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

问题重现:关于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还是很少,只能自己爬坑呗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值