java.lang.NoClassDefFoundError在yarn集群模式下spark-submit,使用Ambari

时间:2018-05-15 14:42:38

标签: yarn ambari spark-submit

我正在使用spark-submit命令,如下所示:

spark-submit --class com.example.hdfs.spark.RawDataAdapter --master yarn --deploy-mode cluster --jars /home/hadoop/emr/deployment/server/emr-core-1.0-SNAPSHOT.jar home/hadoop/emr-spark-1.0-SNAPSHOT.jar hdfs://111.11.11.111:8020/user/hdfsinputfile.zip 8000

然而,它给了我错误java.lang.NoClassDefFoundError:com / example / emr / parser / IParser3。虽然IParser3.class存在于emr-core-1.0-SNAPSHOT.jar中。我不明白为什么它会抛出那个错误。我尝试了几种方法,但没有成功。我该如何解决这个问题?

我能够在客户端模式下运行相同的命令,也可以作为独立的spark应用程序运行。仅在纱线群集模式下才会出现此错误。

  

容器启动的例外情况。容器ID:container_e37_1526066605784_0014_02_000001退出代码:15使用非零退出代码退出的容器15.错误文件:prelaunch.err。 prelaunch.err的最后4096个字节:com.example.hdfs.spark中java.lang.ClassLoader.defineClass(ClassLoader.java:642)的stderr:g.ClassLoader.defineClass(ClassLoader.java:763)的最后4096个字节。 com.example.hdfs.spark.input上的com.example.hdfs.spark.utils.SimpleClassLoader。(SimpleClassLoader.java:38)中的utils.SimpleClassLoader.loadJarFile(SimpleClassLoader.java:126)RawInputFormat.loadPlugins(RawInputFormat.java: 71)位于com.example.hdfs.spark.RawDataAdapter的org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)的com.example.hdfs.spark.RawDataAdapter.run(RawDataAdapter.java:54)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43).main(RawDataAdapter.java:33) )atg.apache.spark.deploy.yarn.ApplicationMaster $ anon $ 3.run(ApplicationMaster.scala:646)18/0中的java.lang.reflect.Method.invoke(Method.java:498) 5/14 14:00:13错误ApplicationMaster:未捕获异常:org.apache.spark.SparkException:awaitResult中抛出异常:atg中的org.apache.spark.util.ThreadUtils $ .awaitResult(ThreadUtils.scala:205)。位于org.apache.spark.deploy.yarn的org.apache.spark.deploy.yarn.ApplicationMaster.run(ApplicationMaster.scala:282)中的apache.spark.deploy.yarn.ApplicationMaster.runDriver(ApplicationMaster.scala:423)。 ApplicationMaster $ anonfun $ main $ 1.apply $ mcV $ sp(ApplicationMaster.scala:768)位于org.apache.spark.deploy的org.apache.spark.deploy.SparkHadoopUtil $ anon $ 2.run(SparkHadoopUtil.scala:67)。位于org.apache.hadoop.security的javax.security.auth.Subject.doAs(Subject.java:422)的java.security.AccessController.doPrivileged(Native Method)中的SparkHadoopUtil $ anon $ 2.run(SparkHadoopUtil.scala:66) .UserGroupInformation.doAs(UserGroupInformation.java:1869)org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:66)at org.apache.spark.deploy.yarn.ApplicationMaster $ .main(ApplicationMaster.s cala:766)at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)引起:java.util.concurrent.ExecutionException:scala.concurrent.impl.Promise $ .resolver(Promise。)的盒装错误。 scala:55)at scala.concurrent.impl.Promise $ .scala $ concurrent $ impl $ Promise $ resolveTry(Promise.scala:47)at scala.concurrent.impl.Promise $ DefaultPromise.tryComplete(Promise.scala:244)at scala.concurrent.Promise $ class.tryFailure(Promise.scala:112)at scala.concurrent.impl.Promise $ DefaultPromise.tryFailure(Promise.scala:153)at org.apache.spark.deploy.yarn.ApplicationMaster $ anon $ 3 .run(ApplicationMaster.scala:664)引起:java.lang.NoClassDefFoundError:com / example / emr / parser / IParser3 at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader。 java:763)at java.lang.ClassLoader.defineClass(ClassLoader.java:642)at com.example.hdfs.spark.utils.SimpleClassLoader.findClass(SimpleClassLoader.java:152)at java.lang.ClassLoader.loadClass(ClassLoader) 。 java:424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)java.lang.ClassLoader.defineClass1(Native Method)java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.lang com.example.hdfs.spark.utils.SimpleClassLoader.loadJarFile(SimpleClassLoader.java:126)中的.ClassLoader.defineClass(ClassLoader.java:642)at com.example.hdfs.spark.utils.SimpleClassLoader。(SimpleClassLoader.java: 38)在com.example.hdfs.spark.input.RawInputFormat.loadPlugins(RawInputFormat.java:71)at com.example.hdfs.spark.RawDataAdapter.run(RawDataAdapter.java:54)at org.apache.hadoop.util .toolRunner.run(ToolRunner.java:76)位于sun.reflect.NativeMethodAccessorImpl.invoke的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的com.example.hdfs.spark.RawDataAdapter.main(RawDataAdapter.java:33) (NativeMethodAccessorImpl.java:62)位于org.apache.spark.deploy的java.lang.reflect.Method.invoke(Method.java:498)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .yarn.ApplicationMaster $ anon $ 3.run(ApplicationMaster.scala:646)未能通过此尝试。申请失败。

1 个答案:

答案 0 :(得分:0)

引用Spark文档: -

http://spark.apache.org/docs/latest/running-on-yarn.html

在客户端模式下,驱动程序在客户端进程中运行,应用程序主服务器仅用于从YARN请求资源。

在群集模式下,Spark驱动程序在应用程序主进程内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后消失

因此,在集群模式下,jar会在任何可用节点上执行,因此您可以尝试以下两种方式: -

1)将依赖关系jar复制到每个节点。

2)您可以尝试将jar复制到Distributed(HDFS系统),然后使用它。

有关详细信息,请查看:

https://spark.apache.org/docs/latest/submitting-applications.html#advanced-dependency-management