千家信息网

hive编译源码支持自定义UDF函数

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,在工作中,我们需要用到自定义UDF函数:1.可以创建持久函数2.也可以将其编译在源码中本文档以源码编译的方式使用,下面为编译步骤;下载源码包wget http://archive.cloudera.c
千家信息网最后更新 2024年11月23日hive编译源码支持自定义UDF函数

在工作中,我们需要用到自定义UDF函数:

1.可以创建持久函数

2.也可以将其编译在源码中

本文档以源码编译的方式使用,下面为编译步骤;


  • 下载源码包

wget http://archive.cloudera.com/cdh6/cdh/5/hive-1.1.0-cdh6.7.0-src.tar.gztar xf hive-1.1.0-cdh6.7.0-src.tar.gzcd hive-1.1.0-cdh6.7.0/
  • 进入UDF代码的目录

cd ql/src/java/org/apache/hadoop/hive/ql/udf/------这里我们可以看到好多的UDF代码,以UDFXXX.java开头


  • 将UDF的代码上面的目录下

helloUDF.javapackage 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.javaimport 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/目录下



0