自定义UDF函数 注册到hive源码

1.准备

  1. Hadoop环境 是hadoop-2.6.0-cdh1.51.1
资源 路径
hive-1.1.0-cdh5.15.1 http://archive.cloudera.com/cdh5/cdh/5/
  • 自定义的udf函数
    新建的AddPrefixUDF 类继承UDF这个类,然后重写 evaluate ()方法
  • 注意 要修改自定义的udf函数包路径
    package org.apache.hadoop.hive.ql.udf;
package org.apache.hadoop.hive.ql.udf;
	
	import org.apache.hadoop.hive.ql.exec.UDF;
	
	import java.util.Random;
	
	
	public class AddPrefixUDF extends UDF{

    public String evaluate(String input) {
        Random random = new Random();
        int num = random.nextInt(10);
        return num + "_" + input;
    }

    public String evaluate(String input, int length) {
        Random random = new Random();
        int num = random.nextInt(length);
        return num + "_" + input;
   }

}

2.解压hive源码,添加自定义函数

[hadoop@hadoop001 software]$ tar -zxvf hive-1.1.0-cdh5.15.1-src.tar -C /home/hadoop/source
#添加自定义函数 在hive-1.1.0-cdh5.15.1/ql/src/java/org/apache/hadoop/hive/ql/udf路径下
[hadoop@hadoop001 udf]$ pwd
/home/hadoop/source/hive-1.1.0-cdh5.15.1/ql/src/java/org/apache/hadoop/hive/ql/udf
[hadoop@hadoop001 udf]$ ll AddPrefixUDF.java
-rw-r--r-- 1 root root 670 Oct  6 15:10 AddPrefixUDF.java
[hadoop@hadoop001 udf]$ 

  • 注册自定义udf函数
#前往该路径 找到FunctionRegistry.java 类,在static 代码块中添加自定义udf函数信息
[hadoop@hadoop001 exec]$ pwd
/home/hadoop/source/hive-1.1.0-cdh5.15.1/ql/src/java/org/apache/hadoop/hive/ql/exec
[hadoop@hadoop001 exec]$ ll FunctionRegistry.java
-rw-rw-r-- 1 hadoop hadoop 68367 Oct  6 15:15 FunctionRegistry.java
[hadoop@hadoop001 exec]$ 

在这里插入图片描述

3.编译hive

mvn clean package -DskipTests -Phadoop-2 -Pdist
在这里插入图片描述

4.重新 部署hive或修改jar

  • 4.1 修改jar
#将编译好的文件解压 获取 hive-exec-1.1.0-cdh5.15.1.jar文件
[hadoop@hadoop001 lib]$ ll hive-exec-1.1.0-cdh5.15.1.jar
-rw-r--r-- 1 hadoop hadoop 19635635 Oct  6 17:45 hive-exec-1.1.0-cdh5.15.1.jar
[hadoop@hadoop001 lib]$ pwd
/home/hadoop/app/hive/lib
#在已经部署好的hive 同一个位置 ,找到原有的jar,备份 
编译后 的 hive-exec-1.1.0-cdh5.15.1.jar 放在当前位置

4.2 重新部署
https://blog.csdn.net/weixin_44131414/article/details/102395666

5.检测

hive> show functions;
abs
acos
add_months
#该函数既是 自定义函数 
add_prefix

and
array
array_contains
ascii
asin
assert_true
#测试 
hive> select add_prefix(domian) from access_log2;
#想要的结果
6_www.alibaba.com
7_www.ruozedata.com
3_www.alibaba.com
7_www.ruozedata.com
2_www.ruozedata.com
9_www.baidu.com
8_www.baidu.com
2_www.alibaba.com
5_www.baidu.com
2_www.baidu.com

 
发布了33 篇原创文章 · 获赞 1 · 访问量 2577

猜你喜欢

转载自blog.csdn.net/weixin_44131414/article/details/102391461