嗨, friend 们,我是 Hive 新手。我正在尝试在 Hive 中创建一个名为 ConvertDateFormatUDF 的 UDF 创建临时函数时出现以下错误:
hive>add jar /home/cloudera/date.jar
将/home/cloudera/date.jar 添加到类路径中 添加资源:/home/cloudera/date.jar
hive>CREATE TEMPORARY FUNCTION fun as 'com.db.acedq.opal.hive.ConvertDateFormatUDF';
java.lang.NoClassDefFoundError: org/apache/pig/EvalFunc
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Caused by: java.lang.ClassNotFoundException: org.apache.pig.EvalFunc
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask
请有人帮助我,因为我是 hive 新手。有人可以告诉我要遵循的步骤
最佳答案
您的 hive UDF 在某种程度上引用了 Pig 类,该类可能位于 pig.jar 文件中,但不一定位于 Hive 环境中的类路径中。
可以使用 add jar 添加外部 jar,就像您自己的用户创建的 jar 一样。例如,
hive> add jar /usr/lib/pig/pig.jar;
我不确定你的 UDF 想要做什么,但“ConvertDateFormat”听起来像是一个非常简单的方法,所以如果你的代码不需要显式引用 Pig 类,我会检查它是否有错误。您可能留下了一些从您的 pig UDF 复制的样板代码。
关于hadoop - 创建 hive UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583926/