在工作中,我们需要用到自定义UDF函数:
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/目录下
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。