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这位热心同道中人的解答。