在用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了。