IDEA Spark工程打包问题总结

IDEA Spark工程打包问题总结

这两天打算用一个WordCount测试一下在服务器上搭建的Spark+Hadoop+Scala实验环境,按照网上的教程写好SparkWordCount.scala和pom.xml,结果打包时遇到了很多问题,由于之前也没有接触过maven,Scala,调试过程中也踩了不少坑,不过还好问题总算是解决了,写篇博客记录一下。

pom.xml相关依赖介绍

最开始我引入的依赖有如下几个:
Scala2.10.4
Spark1.5.1
Hadoop2.6.4(后面改为2.2.0)
引入的插件有:
scala-maven-plugin3.3.3(后面改为3.2.0)
maven-shade-plugin2.4.3(后面改为3.2.1)

问题及解决过程

打包时控制台输出很多行异常信息,怀疑是版本问题,发现网上很多人用的是scala-maven-plugin3.2.x的版本,于是我将这个插件由开始的3.3.3换成了3.2.0,clean之后再次打包,还是出现了错误信息:

error:bad symbolic reference. A signature in RDD.class refers to term hadoop in package org.apache which is not availble.

error:bad symbolic reference. A signature in RDD.class refers to term io in value org.apache.hadoop which is not availble.

error:bad symbolic reference. A signature in RDD.class refers to term compress in value org.apache.io which is not availble.
在这里插入图片描述
Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile (default) on project Spark01:wrap:org.apache.commons.exec.ExecuteException:Process exited with an error:1 (Exit value:1) -> [Help 1]
在这里插入图片描述
于是各种百度,其中第一张的error网上很多解决方案是说需要将scala的相关依赖全部引入,而我一开始只引入了scala-library,后来我又引入了scala-reflect和scala-compiler,但还是没有用;还有人说是相关的jar包没有引入,可是我的pom.xml里全部引入了。于是我又开始找第二张图片中的error,网上很多人说是pom.xml中引入的scala版本与本地windows版本不一致,也有人说本地需要安装高版本的,IDEA中需要安装低版本的,但是我本来两个地方安装的scala版本就是一致的(2.10.4),于是我尝试将本地安装scala2.11.8,IDEA中安装2.10.4,结果并没有什么作用,后来我将本地安装scala2.10.4,IDEA中安装2.11.8,也没有用,唉这里真的折腾了我一个晚上,都有点灰心了。

没办法,在每天都要汇报进展的压力下我第二天又振作起来,重新思考这些报错信息,这次我选择将注意力又回到第一张报错信息了。首先我觉得本地和IDEA中引入的scala版本是一致的才是合理的,于是我先同步了Scala版本。然后我发现报错信息中的3个错误是关联的,先是RDD.class找不到hadoop,然后找不到hadoop中的io,最后找不到io中的compress,这样的话说明问题的根源就在这个hadoop中,我心想:明明引入了依赖为何还说找不到呢?于是我查看了本地仓库,这才发现我的本地仓库有两个版本的hadoop,一个是2.2.0(maven自己导入的,我都不知道),另一个是2.6.4(我自己手工导入的),我进一步比较了这两个版本,发现了问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以明显看出2.2.0的要比2.6.4的多几个文件,虽然也不知道多的这些文件的具体作用,但很可能2.6.4的hadoop是有缺失的。我还想,为啥maven会自动帮我下载2.2.0的呢,是不是2.6.4的版本不兼容?果然问题就在这里!我将pom.xml中的hadoop依赖换为2.2.0之后,竟然可以编译了!不过又出现了新的问题,唉这个maven的花样真是层出不穷啊。不过这个问题的解决给我带来了一点信心,新的错误信息如下:

Failed to execute goal org.apache.plugins:maven-shade-plugin:2.4.3:shade (default) on project Spark01:Execution default of goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade failed: A required class was missing while executing org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade:org/codehaus/plexus/util/xml/XmlStreamWriter

在这里插入图片描述
好吧,这次是另外一个插件maven-shade-plugin出问题了,这次我吸取上个问题的教训,不再盲目的尝试网上的解决方案,而是仔细读了一遍报错信息,发现运行时缺失了一个class文件,于是我去到本地仓库一看,果然,又是一个残缺的插件:
在这里插入图片描述
这个插件也是我手工导入的,也出问题了,于是我将pom.xml里的maven-shade-plugin改为3.2.1版本,由maven帮我自动import进本地仓库,发现这次是完整的。
在这里插入图片描述
怀着忐忑的心情,我再一次双击package,于是…
在这里插入图片描述
终于打包成功了!!!

流下了激动的泪水…

总结

1.遇到错误先研究一下错误信息,不要盲目的尝试网上的解决方案;

2.开发时要勤思考,多想想为什么会出现这个问题,而不是心急的、盲目的去解决问题,只有耐心思考出问题的原因才能更好的解决它以及后面类似的问题;

3.以后还是少用maven install手工导入依赖吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值