【发布时间】:2016-09-08 18:23:15
【问题描述】:
我正在尝试使用 oozie 来调用 spark 作业。并且使用 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)
有人知道这个错误吗?我已经卡了好几天了。
谢谢!
【问题讨论】:
-
也许你可以尝试做
import org.apache.spark.sql.hive._,然后直接创建上下文:val sqlContext = new HiveContext(sc) -
@DanieldePaula 在我的 scala 代码中,第 20 行是 val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 应该与您的建议相同?
-
我的建议只是尝试单独导入该类。只是快速尝试帮助您调试问题,因为错误可能会改变。
-
您是否检查过 Oozie ShareLib 中的 Spark 版本(
hdfs:///user/oozie/share/lib/*/spark/或类似的东西)完全与您在命令行中使用的版本相同?使用相同的编译选项??例如,您可以从 Apache 网站下载的 Spark 二进制文件在编译时没有 Hive 支持... -
@SamsonScharfrichter 感谢您的回复。我可以按照您提到的路径看到 spark 目录,但不确定如何检查此 spark 的版本。我只能在 spark 文件夹中看到一堆 jar 文件。您认为哪个 jar 文件需要 Hive 支持? spark-core_2.10-1.1.0.jar?
标签: apache-spark hive apache-spark-sql hadoop-yarn oozie