IDEA构建UDF函数&注册到Hive源码&编译&验证及使用

一、注册到Hive源码目的
在上一篇UDF函数博文中说过,Hive自带的函数并不能满足日常工作,有很多功能需要我们自己去编写。对于经常使用的功能就希望注册到Hive当中和Hive的函数一样使用了。

二、IDEA构建UDF函数

请参考IDEA构建Hive的UDF函数

三、注册到Hive源码
1、下载Hive源码

2、将Hive源码放到/opt/sourcecode目录下并解压

[root@hadoop001 sourcecode]# ls
hive-1.1.0-cdh5.7.0  hive-1.1.0-cdh5.7.0-src.tar.gz

3、将IDEA构建的HelloUDF2.java放到以下目录(Hive自带函数目录)

/opt/sourcecode/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/udf

4、修改HelloUDF2.java
vi HelloUDF2.java

将package com.ruozedata.hive更改成package.org.apache.hadoop.hive.ql.udf

5、修改FunctionRegistry.java 文件

vi  /opt/sourcecode/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java

在FunctionRegistry.java文件19行下面添加

import org.apache.hadoop.hive.ql.udf.HelloUDF2;

在static{}代码块(174行)中添加

system.registerUDF("HelloUDF2", HelloUDF2.class, false);

四、开始编译
在/opt/sourcecode/hive-1.1.0-cdh5.7.0路径下执行

cd /opt/sourcecode/hive-1.1.0-cdh5.7.0
#编译时间较长,耐心等待
mvn clean package -DskipTests -Phadoop-2 -Pdist

编译完成后会在/opt/sourcecode/hive-1.1.0-cdh5.7.0/packaging目录下生成一个target文件夹

target文件夹下的apache-hive-1.1.0-cdh5.7.0-bin.tar.gz包就是编译之后的文件

五、验证及使用
如果要使用自己构建的函数有两种方法
㈠将apache-hive-1.1.0-cdh5.7.0-bin.tar.gz部署到机器上,可以参考Hive简单部署

然后hive (default)> show functions;
可以看到helloudf2函数(add jar方式看不到)

查看函数的描述

hive (default)> desc function extended helloudf2;
OK
tab_name
helloudf2(input_str) - returns Hello:input
Example:
   > SELECT helloudf2('zhangsan') FROM src LIMIT 1;
  'Hello:zhangsan'
Time taken: 0.032 seconds, Fetched: 4 row(s)

㈡如果你已经部署了Hive了那么采用下面的方式
备份已部署的Hive的hive-exec-1.1.0-cdh5.7.0.jar文件

mv $HIVE_HOME/lib/hive-exec-1.1.0-cdh5.7.0.jar   $HIVE_HOME/lib/hive-exec-1.1.0-cdh5.7.0.jar.bak 

将编译后的hive-exec-1.1.0-cdh5.7.0.jar文件拷贝到$HIVE_HOME/lib/目录下

cp hive-exec-1.1.0-cdh5.7.0.jar $HIVE_HOME/lib

然后查看是否成功(有时需要hive-exec-1.1.0-cdh5.7.0.jar.bak文件移除lib才可以成功)

hive (default)> show functions;   
hive (default)> desc function extended helloudf2;

功能已实现

hive (default)> select ename,helloudf2(ename) from emp;
OK
ename   _c1
SMITH   Hello:SMITH
ALLEN   Hello:ALLEN
WARD    Hello:WARD
JONES   Hello:JONES
MARTIN  Hello:MARTIN
BLAKE   Hello:BLAKE
CLARK   Hello:CLARK
SCOTT   Hello:SCOTT
KING    Hello:KING
TURNER  Hello:TURNER
ADAMS   Hello:ADAMS
JAMES   Hello:JAMES
FORD    Hello:FORD
MILLER  Hello:MILLER
HIVE    Hello:HIVE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值