记一次jar包冲突导致的问题

1:现象:

我在本地运行的时候总是报错,这个错误经过我的排查是和引入的hbase的依赖有关系。报错如下:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;)[C
	at org.apache.spark.SSLOptions$$anonfun$8.apply(SSLOptions.scala:188)
	at org.apache.spark.SSLOptions$$anonfun$8.apply(SSLOptions.scala:188)
	at scala.Option.orElse(Option.scala:289)
	at org.apache.spark.SSLOptions$.parse(SSLOptions.scala:188)
	at org.apache.spark.SecurityManager.<init>(SecurityManager.scala:117)
	at org.apache.spark.SparkEnv$.create(SparkEnv.scala:236)
	at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175)
	at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257)
	at org.apache.spark.SparkContext.<init>(SparkContext.scala:424)
	at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926)
	at scala.Option.getOrElse(Option.scala:121)
	at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
	at com.weibo.hive2hbase.Testv$.main(Testv.scala:15)
	at com.weibo.hive2hbase.Testv.main(Testv.scala)

这个错误很奇怪,后来经过排查我发现是和我引入的hbase-protocal 这个依赖有关系,但是我在项目中是需要这个依赖的,所以说pom文件里还必须有才行。

<dependency>-->
<!--                <groupId>org.apache.hbase</groupId>-->
<!--                <artifactId>hbase-protocol</artifactId>-->
<!--                <version>${hbase.version}</version>-->
<!--            </dependency>-->

最初的想法是去看相关的jar冲突,但是发现这个思路好像不对。有考虑过是因为不同的版本导致的问题,切换为2.x的hbase版本依旧是无法解决问题。

但是有个奇怪的现象就是:我打包到集群上之后运行spark-submit是ok的,但是在我本地就会出问题。此时我开始怀疑是集群上可能有我本地没有的依赖,然后才不会报错的。

2:去报错的地方看看:

为了彻底的去看看这个报错的地方我决定 debug到具体的位置去看看

定位进来之后发现:

 

是这里import 了 hadoop.conf.Configuration

定位到源码里发现位置是在:

 

spark-core里用到的

然后从这里进去看看可以定位到哪里,结果是定位到了hadoop-common包下面

解决方式一:

我是没有引入和这个hadoop-common 这个包的。也就是说spark-core 里使用到了这个依赖,然后hbase 引入的依赖里也用到了这个依赖,然后两者的依赖的版本可能还不一样。

使用插件分析果然是的,然后我就去看了下hbase 依赖的版本,果然是个低版本的,所以我就把hbase相关的hadoop-common 依赖都排除了。问题解决。

 

解决方式二:

前面说过,把jar包放到集群环境里就是没问题的,这个让我觉得可能是集群上有我本地没有的依赖,最后果然是的,

于是我就试着把 

<!--            <dependency>-->
<!--                <groupId>org.apache.hadoop</groupId>-->
<!--                <artifactId>hadoop-common</artifactId>-->
<!--                <version>2.7.3</version>-->
<!--            </dependency>-->

这个包给加进去了,结果问题就解决了。

3:总结:

同一个问题我用了两种方式来解决这个问题,其实主要还是解决问题的思路。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值