1.問題
kylin版本:3.0.1
spark版本2.4.0(版本有很多修改,還有很多UDF)
yarn方式提交(local模式沒有問題)
在kylin中使用spark引擎構建cube的時候,一直會報如下錯誤:
INFO DAGScheduler: ShuffleMapStage 0 (mapToPair at SparkCubingByLayer.java:169) failed in 9.119 s due to Job aborted due to stage failure: Task 6 in stage 0.0 failed 4 times, most recent failure: Lost task 6.3 in stage 0.0 (TID 18, sd-hadoop-datanode-5
1-131.idc.vip.com, executor 2): java.lang.VerifyError: class com.google.common.collect.EmptyImmutableList overrides final method toArray.([Ljava/lang/Object
這裏有相關詳細問題:https://issues.apache.org/jira/browse/KYLIN-4102
這已經被認定不是一個bug,root cause:jar conflict.
2.解決歷程
1)根據報錯日誌,可以明確一點,spark在遇到action操作的時候會報錯。
我在源碼上對SparkCubingByLayer這個類加了幾行代碼如下(大概190行左右):
logger.info("SparkCubingByLayer jar real url is :{}", SparkCubingByLayer.class.getClassLoader().getResource("com/google/common/collect/EmptyImmutableList.class"));
allRDDs[0].take(5).forEach(item -> {
logger.info("SparkCubingByLayer, item:{}, {}",item._1, item._2);
});
打包,將apache-kylin-3.0.1-bin-hbase1x/lib/下的kylin-job-3.0.1.jar替換成源碼assembly下的kylin-assembly-3.0.1-job.jar(記得改名字,改爲kylin-job-3.0.1.jar)
重啓kylin
bin/kylin.sh stop
bin/kylin.sh start
構建cube,日誌如下:
SparkCubingByLayer real url is :jar:file:/xxx/xxx/xxx/xxx/xxx/xx-xx-xx/jars/guava-14.0.1.jar!/com/google/common/collect/EmptyImmutableList.class
20/04/06 21:04:12 WARN TaskSetManager: Lost task 11.0 in stage 0.0 (TID 10, jssz-bigdata-odatanode-359, executor 3): java.lang.VerifyError: class com.google.common.collect.EmptyImmutableList overrides final method toArray.([Ljava/lang/Object;)[Ljava/lang/Object;
可以看出加載的jar包是guava-14.0.1版本,看了jar的源碼,根本沒有啥問題。
經過分析kylin的源碼略微可以知道,kylin提交spark任務是以套娃的形式提交,任務裏面套了一層任務,此時我認爲問題出在spark集羣的執行節點。
(2)經過參考kylin文檔(中文看的真舒服),在kylin web頁面 System-> Server Config中添加配置:
kylin.engine.spark-conf.spark.yarn.archive=xxx
xxx爲local模式spark運行需要的jar,將其放到hdfs目錄,這樣spark運行就會讀取這個目錄的jar,而不是讀取每一個datanode上的jar。
重啓kylin,重啓之前可以刪除bin目錄下的cache開頭的文件,這是一些緩存配置。
然後就這樣解決了,問題是我們讀spark進行了修改,引入了其他版本的guava jar。
3.心得
也算是解決了kylin的spark運行的傷,這個問題卡了兩週,心痛,在此也感謝https://issues.apache.org/jira/browse/KYLIN-4102這位熱心同道中人的解答。