我编写了SparkSQL,它访问Java中的Hive表,并打包了一个可以使用运行的jar文件。将CLASSPATH添加到Oozie工作流程作业
现在我想运行这个jar作为Oozie工作流程(和协调器,如果我让工作流程工作)。当我尝试这样做,作业失败,我在Oozie的作业日志得到
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf
我所做的就是寻找在$HIVE_HOME/lib
包含类的jar,复制罐子在我Oozie的的lib
路径工作流的根路径,在Spark行动将其添加到workflow.xml
:
<spark-opts> --jars lib/*.jar</spark-opts>
但是,这导致另一个java.lang.NoClassDefFoundError
指向另一个失踪课,所以我又做了寻找罐子和复制的过程中,运行作业同样的事情都结束了。看起来它需要依赖于我的Hive lib中的许多jar。
我不明白的是当我使用jar在shell中使用spark-submit时,它运行正常,我可以选择并插入到我的Hive表中。只有当我使用Oozie时才会发生这种情况。看起来像Spark在Oozie工作流作业中不能再看到Hive库。有人可以解释这是怎么发生的?
如何添加或引用必要的类/罐到Oozie路径?
我使用的是Cloudera Quickstart VM CDH 5.4.0,Spark 1.4.0,Oozie 4.1.0。