Spark2.1.1 Yarn ShuffleService在NodeManager升级问题分析

一、问题

首先,团队里不同的小组使用同一套hadoop集群,有做sqoop任务的,有做flink的,也有跑spark的。最近spark迁移2.1.1,升级shuffle-service,所以编译完社区2.1.1版本之后,就更新了nodemanager下的shuffle-service依赖,对于spark任务没有任何问题;

但问题却出在,其他小组在使用hadoop集群时,原本是运行的好好的,在升级完shuffle-service之后报scala冲突,具体如下:

23-06-2017 20:42:37 CST kafka_import_hotfix INFO - Error: scala.Predef$.augmentString(Ljava/lang/String;)Lscala/collection/immutable/StringOps;

23-06-2017 20:42:38 CST kafka_import_hotfix INFO - Error: scala.Predef$.augmentString(Ljava/lang/String;)Lscala/collection/immutable/StringOps;

23-06-2017 20:42:38 CST kafka_import_hotfix INFO - Container killed by the ApplicationMaster.

23-06-2017 20:42:38 CST kafka_import_hotfix INFO - Container killed on request. Exit code is 143

23-06-2017 20:42:38 CST kafka_import_hotfix INFO - Container exited with a non-zero exit code 143

二、分析

小组同学百思不得其解,最终还是定位到本次spark shuffle-service升级。想不到一个小的版本迭代,竟然有这么大的区别;

原来,在spark2.1.1中,common/network-yarn项目中引入了scala-library的依赖,导致编译的jar包中包含了scala2.11.8的scala代码;
而小组同学引用的kafka0.8项目是基于scala2.8编译的,导致上述问题;

社区引入commit:

7197a7bc7061e2908b6430f494dba378378d5d02 [SPARK-18993][BUILD] Unable to build/compile Spark in IntelliJ due to missing Scala deps in spark-tags
https://github.com/apache/spark/pull/16418

现在已经有人提交jira修复了该问题:https://issues.apache.org/jira/browse/MAPREDUCE-1700

三、解决

小组同学升级kafka0.8的scala依赖为2.11.8。

四、后续

存在的疑问:

  1. 虽然在hadoop/share/hadoop/yarn/lib下更新了spark-shuffle-service jar包,但从YARN资源申请的原理层面,如何解释该jar包如果传到小组同学项目的classpath中的?
  2. 社区在network-yarn中引入scala-library依赖的根据是什么?这岂不是在hadoop集群上留了一个很大的坑?

你可能感兴趣的:(Spark2.1.1 Yarn ShuffleService在NodeManager升级问题分析)