oozie spark 2.0 action giving exception: java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging

oozie spark 2.0 action giving exception: java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging

我在尝试使用 oozie

运行 触发操作时遇到以下异常
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.access0(URLClassLoader.java:73)
    at java.net.URLClassLoader.run(URLClassLoader.java:368)
    at java.net.URLClassLoader.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.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

Spark 代码 运行在 Eclipse 中本地运行良好。但是,我在尝试使用 oozie 运行 时遇到上述异常。

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

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

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

否则,如果您更愿意在 CDH 上使用 spark 操作,您可以考虑在 1.6 中重写代码。

根据 CDH 社区文档,oozie 与 spark2.0 不兼容。 所以你应该将 oozie 与 spark1.6

一起使用

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

快乐学习:)

您可以选择为 spark2 设置 oozie 共享库,然后通过在 job.propertiesworkflow.xml spark 操作中将 oozie.action.sharelib.for.spark=spark2 设置为

<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 作业。