在工作中,我们需要用到自定义UDF函数:
成都创新互联是一家专注于成都网站建设、成都网站制作与策划设计,界首网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:界首等地区。界首做网站价格咨询:13518219792
1.可以创建持久函数
2.也可以将其编译在源码中
本文档以源码编译的方式使用,下面为编译步骤;
下载源码包
wget http://archive.cloudera.com/cdh6/cdh/5/hive-1.1.0-cdh6.7.0-src.tar.gz tar xf hive-1.1.0-cdh6.7.0-src.tar.gz cd hive-1.1.0-cdh6.7.0/
进入UDF代码的目录
cd ql/src/java/org/apache/hadoop/hive/ql/udf/ ------这里我们可以看到好多的UDF代码,以UDFXXX.java开头

将UDF的代码上面的目录下
helloUDF.java
package com.ruozedata.hadoop.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class HelloUDF extends UDF{
public String evaluate(String input) {
//TODO...此处为开发业务逻辑的地方
return "Hello:" + input;
}
//下面为测试代码
public static void main(String[] args) {
HelloUDF udf = new HelloUDF();
String output = udf.evaluate("测试数据");
System.out.println(output);
}
}在源代码中注册自定义的UDF函数
cd ql/src/java/org/apache/hadoop/hive/ql/exec/ #vim FunctionRegistry.java import org.apache.hadoop.hive.ql.udf.HelloUDF;

在176行增加如下内容
system.registerUDF("HelloUDF", HelloUDF.class,false);
编译hive
[root@hadoop001 exec]# pwd /opt/sourcecode/hive-1.1.0-cdh6.7.0 [root@hadoop001 hive-1.1.0-cdh6.7.0]#mvn clean package -DskipTests -Phadoop-2 -Pdist

编译后的文件为:
1.packaging/target/apache-hive-1.1.0-cdh6.7.0-bin.tar.gz
2. ./lib/hive-exec-1.1.0-cdh6.7.0.jar
使用方式
方式一:将apache-hive-1.1.0-cdh6.7.0-bin.tar.gz重新部署
方式二:将编译后的/lib/hive-exec-1.1.0-cdh6.7.0.jar复制到${HIVE_HOME}/lib/目录下