我編寫了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。