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

来源:互联网 发布:phaser.js 编辑:程序博客网 时间:2024/06/17 00:38

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

二、IDEA构建UDF函数

请参考IDEA构建Hive的UDF函数

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

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

[root@hadoop001 sourcecode]# lshive-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;OKtab_namehelloudf2(input_str) - returns Hello:inputExample:   > 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;OKename   _c1SMITH   Hello:SMITHALLEN   Hello:ALLENWARD    Hello:WARDJONES   Hello:JONESMARTIN  Hello:MARTINBLAKE   Hello:BLAKECLARK   Hello:CLARKSCOTT   Hello:SCOTTKING    Hello:KINGTURNER  Hello:TURNERADAMS   Hello:ADAMSJAMES   Hello:JAMESFORD    Hello:FORDMILLER  Hello:MILLERHIVE    Hello:HIVE
阅读全文
0 0