SerDe 上的 Oozie Hive 操作失败
Posted
技术标签:
【中文标题】SerDe 上的 Oozie Hive 操作失败【英文标题】:Oozie Hive Action Failed on SerDe 【发布时间】:2013-04-04 19:10:44 【问题描述】:我从 oozie hive 操作工作流中得到一个错误:
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.HiveMain],
main() threw exception, org/apache/hadoop/hive/serde2/SerDe
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/SerDe
我的 hive 表 SerDe 使用 CDH4.2、HUE 2.2 和 JSON-SerDe (rcongiu-hive-json-serde)。
Hive 查询脚本没问题,我已经在 hive 控制台中成功运行了它。我已经设置了 oozie 共享库。让我非常困惑的是,在使用默认表(不使用特殊的 SerDe)提交配置单元工作流时我没有收到任何错误,但是当我更改为我的 JSON-SerDe 表时它总是失败。 ADD JAR /path-to/serde.jar 也不起作用。
【问题讨论】:
serde.jar
必须在 HDFS 的某个地方,Oozie 才有希望找到它。也许你已经这样做了,但我不能从你的问题中确定。当我需要一个带有 Hive 操作的 Oozie 工作流的 jar 时,将 jar 复制到 Oozie 共享库中的 HDFS 对我有用/user/oozie/share/lib/hive/serde.jar
。执行此操作或将 <file>other/path/to/jar/on/HDFS/serde.jar</file>
添加到 Hive 操作应该使 jar 可用于 Oozie。或者,可能是 Oozie 确实看到了 serde.jar
,但 Hive 看不到。不幸的是,我没有在 Oozie 启动的 Hive 脚本中使用 ADD JAR
的经验。
@DanielKoverman 是的,先生,我确实将serde.jar
放在了 HDFS(sharelib 和 mysql-connector.jar
时,我觉得很奇怪,我只是将 JAR 文件放到了 sharelib (HDFS) 中,它就可以工作了。
@mr-bagio 哦,好吧,我希望我能为您提供一个简单的解决方案。希望其他人会来。
找到这个启动器的 MR 作业,并查看 job.xml - 类路径配置属性的值是什么(我不记得它们叫什么了,但是寻找罐子)
可能与此 other question about SerDe problems 有关,即使异常似乎提到了未找到的不同类?
【参考方案1】:
我通过将我的 Serde JAR 文件放在应用程序的 lib 路径中解决了这个错误。
下面是我的HDFS目录结构:
/user/manoj/app/workflow.xml
/user/manoj/app/lib/json-serde-1.3-jar-with-dependencies.jar
PS:您可能有任何版本的 serDe JAR,我特别使用了json-serde-1.3-jar-with-dependencies.jar
,因为我在其他答案中发现该版本也支持反序列化并且它对我有用。我遇到了 hive-serde.jar 的“无法反序列化”错误。
【讨论】:
以上是关于SerDe 上的 Oozie Hive 操作失败的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Oozie 工作流作业的第二次运行启动 Hive 操作
在hue 使用oozie sqoop 从mysql 导入hive 失败