在用spark的yarn-cluster模式跑fpgrowth进行频繁项集挖掘的时候,报如下错误:
ERROR yarn.ApplicationMaster: User class threw exception: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapred.FileInputFormat java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapred.FileInputFormat at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:312) at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:199) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:248) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:246)
问题解决过程:
1、进行lib目录,发现有多个guava版本
2、修改pom,删除guava依赖,运行,还是报错
3、pom中spark相关jar包都是使用的provide模式,怎么会报错了,纳闷。
4、看下集群中hadoop使用的是hadoop-2.6.0-cdh5.7.0,跟进去代码,FileInputFormat中的Stopwatch已经进行了封装,没有使用guava了,这是怎么个情况?
5、最后最后。。。。
spark的配置文件里面有这个配置项
spark.yarn.jars hdfs://xxxxxx/spark/share/jars/*.jar
进入hdfs目录一看,果然里面有相关的hadoop jar包,删掉这些jar包,在试,ok了。