Apache spark NoClassDefFoundError:org/apache/spark/sql/hive/HiveContext

Apache spark NoClassDefFoundError:org/apache/spark/sql/hive/HiveContext,apache-spark,hive,apache-spark-sql,yarn,oozie,Apache Spark,Hive,Apache Spark Sql,Yarn,Oozie,我想用oozie来称呼spark jobs。使用spark submit,无需oozie即可成功运行spark作业: spark-submit --class xxx --master yarn-cluster --files xxx/hive-site.xml --jars xxx/datanucleus-api-jdo-3.2.6.jar,xxx/datanucleus-rdbms-3.2.9.jar,xxx/datanucleus-core-3.2.10.jar xxx.jar 但是当我

我想用oozie来称呼spark jobs。使用spark submit,无需oozie即可成功运行spark作业:

spark-submit --class xxx --master yarn-cluster --files xxx/hive-site.xml --jars xxx/datanucleus-api-jdo-3.2.6.jar,xxx/datanucleus-rdbms-3.2.9.jar,xxx/datanucleus-core-3.2.10.jar xxx.jar
但是当我尝试使用oozie调用作业时,它总是会失败,并出现以下错误。我在workflow.xml中涉及了3个外部jar和hive-site.xml

Launcher exception: org/apache/spark/sql/hive/HiveContext
java.lang.NoClassDefFoundError: org/apache/spark/sql/hive/HiveContext
    at xxx$.main(xxx.scala:20)
    at xxx.main(xxx.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.SparkSubmit$.launch(SparkSubmit.scala:328)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
    at org.apache.oozie.action.hadoop.SparkMain.runSpark(SparkMain.java:104)
    at org.apache.oozie.action.hadoop.SparkMain.run(SparkMain.java:95)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:47)
    at org.apache.oozie.action.hadoop.SparkMain.main(SparkMain.java:38)
我的scala代码的第20行是:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
有人知道这个错误吗?我被困了好几天了


谢谢大家!

刚回来回答我自己的问题。这个问题最终通过更新oozie的共享库来解决。基本上,共享库中的jar对于我的作业来说是不完整的。所以我首先导入了一些额外的jar,比如spark hive和spark mllib。此外,oozie共享库中提供的JAR太旧,也需要更新以避免一些潜在错误

也许您可以尝试执行导入org.apache.spark.sql.hive.\u然后直接创建上下文:
val sqlContext=new HiveContext(sc)
@DanieldePaula在我的scala代码中,第20行是val sqlContext=new org.apache.spark.sql.hive.HiveContext(sc)哪一个应该与您的建议相同?我的建议只是尝试单独导入类。请快速尝试帮助您调试问题,因为错误可能会更改。您是否检查了Oozie共享库中Spark的版本(在
hdfs:///user/oozie/share/lib/*/spark/
或类似的sthg)与您在命令行中使用的完全相同?使用相同的编译选项??例如,您可以从Apache网站下载的Spark二进制文件是在没有配置单元支持的情况下编译的…@SamsonScharfrichter谢谢您的回复。我可以看到spark目录遵循您提到的路径,但不确定如何检查此spark的版本。我只能在spark文件夹中看到一堆jar文件。您认为哪个jar文件需要配置单元支持?spark-core_2.10-1.1.0.jar?