NoClassDefFoundError的:组织/阿帕奇/火花/ SQL /蜂巢/ HiveContext

时间:2016-05-12 18:41:13

标签: apache-spark hive apache-spark-sql yarn oozie

我正在尝试使用oozie来调用spark工作。使用spark-submit:

可以成功运行spark作业而无需oozie
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)

有没有人对此错误有任何疑问?我被困了几天。

谢谢!

1 个答案:

答案 0 :(得分:1)

刚回来回答我自己的问题。这个最终通过更新oozie的共享库来解决。基本上,共享库中的jar不能完成我的工作。所以我首先进口了一些额外的罐子,比如spark-hive和spark-mllib。 oozie共享库中提供的jar也太旧了,还需要更新以避免一些潜在的错误。