Java 如何编译配置单元UDF
我正在尝试编译此UDF:Java 如何编译配置单元UDF,java,classpath,user-defined-functions,hive,Java,Classpath,User Defined Functions,Hive,我正在尝试编译此UDF: package com.dataminelab.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; import java.security.*; /** * Calculate md5 of the string */ public final class Md5 extends UDF { public Text evaluate(
package com.dataminelab.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import java.security.*;
/**
* Calculate md5 of the string
*/
public final class Md5 extends UDF {
public Text evaluate(final Text s) {
if (s == null) {
return null;
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(s.toString().getBytes());
byte[] md5hash = md.digest();
StringBuilder builder = new StringBuilder();
for (byte b : md5hash) {
builder.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
return new Text(builder.toString());
} catch (NoSuchAlgorithmException nsae) {
System.out.println("Cannot find digest algorithm");
System.exit(1);
}
return null;
}
}
正在尝试使用以下工具进行编译:
javac Md5.java
但我得到:
Md5.java:2: package org.apache.hadoop.hive.ql.exec does not exist
import org.apache.hadoop.hive.ql.exec.UDF;
^
Md5.java:3: package org.apache.hadoop.io does not exist
import org.apache.hadoop.io.Text;
我假设它们在某个jar文件中,但我不确定hadoop将它们安装到哪里,因此我无法将它们添加到我的类路径中。有人知道默认位置或如何找到吗?您是否在类路径中包含了格式为$HIVE_HOME/lib/HIVE serde-*.jar和$HIVE_HOME/lib/HIVE exec-*.jar的jar?以下内容对我来说很有用,但我怀疑详细信息会根据您的安装和源代码的用途而有所不同:
export CLASSPATH=/usr/lib/hive/lib/hive-exec-0.9.0.15.jar:/usr/lib/hadoop/hadoop-core.jar
将hive-0.4.1 jar文件添加到lib我通过猜测找到了一个
/usr/lib/hadoop-0.20/hadoop-core.jar
,修复了一些编译错误,但仍然得到了HortonWorks发行版上的org.apache.hadoop.hive.ql.exec.UDF的错误,我不得不使用hadoop common.jar
而不是hadoop core.jar