【发布时间】:2015-08-06 06:24:32
【问题描述】:
我用 Java 编写了用于访问 Hive 表的 SparkSQL,并打包了一个可以使用 spark-submit 运行的 jar 文件。
现在我想将这个 jar 作为 Oozie 工作流(和协调器,如果我让工作流正常工作)运行。当我尝试这样做时,作业失败并进入 Oozie 作业日志
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf
我所做的是在 $HIVE_HOME/lib 中查找包含该类的 jar,将该 jar 复制到我的 Oozie 工作流根路径的 lib 路径中,并将其添加到 Spark 操作中的 workflow.xml:
<spark-opts> --jars lib/*.jar</spark-opts>
但这会导致另一个java.lang.NoClassDefFoundError 指向另一个丢失的类,所以我再次执行了查找 jar 和复制、运行作业的过程,同样的事情也结束了。看起来它需要依赖于我的 Hive 库中的许多 jar。
我不明白的是,当我使用 jar 在 shell 中使用 spark-submit 时,它运行正常,我可以 SELECT 和 INSERT 到我的 Hive 表中。只有当我使用 Oozie 时才会发生这种情况。当包含在 Oozie 工作流作业中时,Spark 似乎无法再看到 Hive 库。有人可以解释这是怎么发生的吗?
如何向 Oozie 路径添加或引用必要的类/jar?
我正在使用 Cloudera Quickstart VM CDH 5.4.0、Spark 1.4.0、Oozie 4.1.0。
【问题讨论】:
标签: apache-spark hive oozie