重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在工作中,我们需要用到自定义UDF函数:
成都创新互联是一家专注于成都网站建设、成都网站制作与策划设计,界首网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:界首等地区。界首做网站价格咨询:13518219792
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/目录下