oozie spark 2.0 action给出异常:java.lang.NoClassDefFoundError:org / apache / spark / internal / Logging

时间:2018-01-09 17:59:28

标签: scala hadoop apache-spark oozie

我在尝试使用oozie

运行spark动作时遇到以下异常
ERROR yarn.ApplicationMaster: User class threw exception: java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging
java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.spark.sql.SparkSession$.builder(SparkSession.scala:861)
    at com.spark.morbiditymerge.MorbidityProcessMessage$.main(MorbidityProcessMessage.scala:19)
    at com.spark.morbiditymerge.MorbidityProcessMessage.main(MorbidityProcessMessage.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:498)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:542)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.internal.Logging
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 20 more

在eclipse中,spark代码在本地运行正常。但是,当我尝试使用oozie运行它时,我得到了上述异常。

我正在使用spark 2.0和scala 2.11.8。我在我的pom文件中包含了所有spark 2.0依赖项。

我在cloudera文档中读到Oozie Spark2 Action不受支持。这就是我得到这个例外的原因吗?如果是,是否有其他方法可以使用oozie运行spark 2.0作业?

3 个答案:

答案 0 :(得分:1)

我也遇到过这个问题,并找到了解决方法。创建一个Oozie Shell 操作,使用必要的参数调用spark2-submit

否则如果你想在CDH上使用spark动作,你可以考虑在1.6中重写你的代码。

答案 1 :(得分:1)

您可以选择为spark2设置oozie共享库,然后通过在oozie.action.sharelib.for.spark=spark2job.properties spark操作中设置workflow.xml来使用此spark2 oozie库

<property>
    <name>oozie.action.sharelib.for.spark</name>
    <value>spark2</value>
</property>

要设置spark2的oozie共享库,请按照hortonworks documnet section Configuring Oozie Spark Action for Spark 2。在CDH中可以遵循相同的步骤,但是指定的路径需要根据CDH群集设置进行修改。我在cdh中使用oozie spark动作成功执行了spark2作业。

答案 2 :(得分:0)

根据CDH社区文档oozie不兼容spark2.0。 所以你应该使用oozie和spark1.6

下面的

是CDH参考的链接 - https://www.cloudera.com/documentation/spark2/latest/topics/spark2_known_issues.html#ki_oozie_spark_action

快乐学习:)