Exception in thread “main“ java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)

java面试题网站:www.javaoffers.com

对于这个错误我想吐血,网上都说scala的版本不对,我首先查看spark集群使用的Scala版本是多少?

执行spark-shell:

可以查看spark集群使用的Scala版本,为2.10.5,

再看我idea使用:也是2.10.5

并且在idea上spark程序运行正常,就是拷贝到spark集群后就报错,然后我 

怀疑idea中的spark依赖和spark集群不一致,所以 我查看一下:

spark集群的版本为:

idea中的spark依赖为:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.6.1</version>
</dependency>

版本是相同:所以排除

然后接着看报错信息:

关键点: at kafka.api.RequestKeys$.<init>(RequestKeys.scala:39)程序在执行这一行的时候报错的,说明与kafka依赖有关,怀疑kafka的依赖的Scala版本过高或者过低, 查看kafka依赖:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka_2.10</artifactId>
    <version>1.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>1.0.0</version>
</dependency>

但是 spark-streaming-kafka_2.10和kafka-clients 都是低版本是scala 2.10版本,再次回想spark程序在idea(Scala2.10环境)中是可以正常运行的。说明不是kafka的问题那就是打包的问题:查看包

Scala文件夹中存在Predef$ArrowAssoc。

 现在怀疑存在Scala包导致,也就是说打包的时候把Scala2.10打包进去了,但是我们提交到spark集群他会和spark集群的Scala2.10 冲突,猜测是这个的原因:就把jar包中的Scala文件夹删除,然后再次提交到spark集群并且没有报错 正常运行,在这记录一下自己踩得坑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值