自定义udf集成到Hive的源码中

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35744460/article/details/89352286
[root@hadoop001 tar]#  tar -zxvf hive-1.1.0-cdh5.7.0-src.tar.gz -C /home/hadoop/source/
  • 自定义udf
    在ql/src/java/org/apache/hadoop/hive/ql/udf 目录下
package org.apache.hadoop.hive.ql.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

public class SayHi extends UDF{

    public String evaluate(String input){
        return  "Hi: " + input;
    }

}
  • 修改FunctionRegistry.java
    在ql/src/java/org/apache/hadoop/hive/ql/exec目录下
vi FunctionRegistry.java
...
import org.apache.hadoop.hive.ql.udf.SayHi;
...
system.registerUDF("SayHi", SayHi.class, false);
...
  • 编译
    编译环境配置看以前文章hadoop编译环境
    有可能网络不好需要多试几次,等待时间较长
[hadoop@hadoop001 hive-1.1.0-cdh5.7.0]$ mvn clean package -DskipTests -Phadoop-2 -Pdist

编译成功后会在packaging/target 路径下生成以下包

drwxr-xr-x. 2 root root        28 Apr 17 09:53 antrun
drwxr-xr-x. 3 root root        44 Apr 17 09:54 apache-hive-1.1.0-cdh5.7.0-bin
-rw-r--r--. 1 root root 105537224 Apr 17 09:54 apache-hive-1.1.0-cdh5.7.0-bin.tar.gz
-rw-r--r--. 1 root root  12610957 Apr 17 09:54 apache-hive-1.1.0-cdh5.7.0-jdbc.jar
-rw-r--r--. 1 root root  12528214 Apr 17 09:54 apache-hive-1.1.0-cdh5.7.0-src.tar.gz
drwxr-xr-x. 2 root root         6 Apr 17 09:53 archive-tmp
drwxr-xr-x. 3 root root        22 Apr 17 09:53 maven-shared-archive-resources
drwxr-xr-x. 3 root root        18 Apr 17 09:53 tmp
drwxr-xr-x. 2 root root         6 Apr 17 09:53 warehouse
  • 启动hive查看结果
hive> show functions;
row_number
rpad
rtrim
sayhi
second
sentences
sign
sin
size
...

发现有了 添加成功
测试一下函数

hive> select name, sayhi(name) from tmp;
OK
lingzong	Hi: lingzong

到此, 自定义UDF函数集成到源码就完成了

猜你喜欢

转载自blog.csdn.net/qq_35744460/article/details/89352286