由Yarn管理的Spark集群抛出java.lang.ClassNotFoundException

时间:2018-01-15 11:30:07

标签: apache-spark yarn

我是Yarn的新手,但对Spark独立大师有一些经验,我最近使用Ambari安装了Yarn + Spark群集。

我有一个编译为jar的spark程序(program.jar)依赖于另一个jar来工作(infra.jar)。

我在Ambari中设置了以下配置:

spark.executor.extraClassPath=/root/infra.jar
spark.driver.extraClassPath=/root/infra.jar

我验证了所有节点上都存在该文件,并验证配置是否已推送到所有节点上的$ SPARK_HOME / conf / spark-defaults.conf。

实际上我还将它复制到所有节点上的$ SPARK_HOME / jars。

我使用以下方式运行作业:

$SPARK_HOME/bin/spark-submit --master yarn --class com.MyMainClass /root/program.jar

我有以下env变量:

export HADOOP_CONF_DIR=/usr/hdp/2.6.3.0-235/hadoop/conf
export HADOOP_HOME=/usr/hdp/2.6.3.0-235/hadoop

我收到错误:

Caused by: java.lang.ClassNotFoundException: com.MyPartition
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)
at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

MyPartition类位于infra.jar但由于某种原因未找到。

此代码看起来像是在Executor中调用,也有一些代码运行 - 这是驱动程序代码。

P.S。我尝试通过--jars标志或addJars手动添加jar但它仍然失败并且ClassNotFoundException(尽管出于某些奇怪的原因,来自infra.jar的不同类)

0 个答案:

没有答案