本篇仅展示UDF完整的操作流程,不包含UDF的具体开发内容
UDF简述
Hive中本身自带很多函数供开发人员使用,但现实情况中,有些特殊情景需要特定的操作,而Hive函数本身是支持扩展的,所以UDF就是自定义函数,在HIve中使用的一种方式
流程步骤
- 继承UDF类或GenericUDF类
- 重写evaluate()方法并实现函数逻辑
- 编译打包为jar文件
- 复制到正确的HDFS路径
- 使用jar创建临时/永久函数
- 调用函数
一.新建maven项目
-
第一步:新建项目选择maven
-
第二步:设置包名以及项目名
-
第三步:设置maven安装的所在位置
-
第四步:完成
二.配置pom.xml文件
- 增加hadoop-common、hive-exec
三.创建类
- 创建类继承UDF后实现方法
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import org.json.Test;
/**
* @ Author: Zhangyu
* @ Date: 2020/10/6
* @ Description:实现转大写功能
*/
//继承UDF类
public class TestUDF extends UDF {
//实现方法evaluate(并非继承的方法,仅仅是简易将UDF实现的方法同一命名)
public Text evaluate(Text str){
if (str==null){
return null;
}
return new Text(str.toString().toUpperCase());
}
}
- 完成后,将项目打成JAR包上传至Linux(如果对打JAR包有疑问的可以点击这里)
四.在Hive上使用UDF
使用创建函数可能会出现一些奇怪报错
建议创建前先执行下面操作:
yum install -y zip
zip -d [jar包名].jar ‘META-INF/.SF’ ‘META-INF/*SF’
- 创建临时函数(在Hive下):临时函数可以直接跨库使用
第一步:add jar [/路径/包名.jar];
第二步:create temporary function [函数名] as '[实现类完整的包路径]';
//示例
//add jar
add jar /root/testUDF.jar;
//create
create temporary function upword as 'cn.kgc.kb09.utf.ADDHour';
//测试
select upword("hello");
//结果
HELLO
- 创建永久函数(在Hive下):永久函数不可直接跨库使用,需要在函数名前加上创建时所在库的库名
第一步(在HDFS上新建jar包存放路径):hdfs dfs -mkdir -p /apps/hive/functions
第二步(将jar包上传至HDFS):hdfs dfs -put [/路径/包名.jar] /apps/hive/functions/
第三步(创建永久函数):create function [函数名] as ['实现类完整的包路径'] using jar ['hdfs://IP地址:9000/JAR包在HDFS上的路径'];
永久函数删除的方法:drop function [函数名];