spark版本:2.0.1
最近在用spark提交scala语言写的任务时,提交任务总是失败,异常如下:
17/05/05 18:39:23 ERROR yarn.ApplicationMaster: User class threw exception: java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaMirrors$JavaMirror;
java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaMirrors$JavaMirror;
at LRPipeline$.main(LRPipeline.scala:17)
at LRPipeline.main(LRPipeline.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:627)
17/05/05 18:39:23 INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 15,
网上查找了半天,结合自己测试,终于解决了,解决过程如下:
我的原始maven配置如下:
<properties>
<scala.version>2.10.6</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
首先,可以确认spark2.0.1使用的scala版本时2.11.8,而上述maven中我使用的配置是2.10.6,因此尝试调整scala版本。
调整版本后,继续mvn package编译,提交spark任务,问题依旧存在。
追查半天,最终发现竟然是替换maven中scala版本后,居然忘记mvn clean清理项目编译后再重新mvn package打包。导致maven的更改未生效。
关于有没有clean命令有什么不一样的地方,可以参考网友的整理,见这里。
因此,执行mvn clean package,重新打包,提交任务后,运行成功!!!
把这个记录在此,希望大家都能少遇到一些坑。