在工作中,我们需要用到自定义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/目录下
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/195627.html