我想用oozie来称呼spark jobs。使用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条答案
按热度按时间9bfwbjaz1#
只是回来回答我自己的问题。这个问题最终通过更新oozie的共享库来解决。基本上,共享库中的jar对于我的作业来说是不完整的。所以我首先导入了一些额外的jar,比如spark-hive和spark-mllib。另外,oozie共享库中提供的jar太旧了,还需要更新以避免一些潜在的错误。