一 创建Maven工程
二 导入依赖Jar包
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
三 继承UDF类或GenericUDF类
四 重写evaluate()方法并实现函数逻辑
public class TestUDF extends UDF {
public Text evaluate(Text str){
if(null==str){
return null;
}
return new Text(str.toString().toUpperCase());
}
public static void main(String[] args) {
TestUDF tu=new TestUDF();
Text rst = tu.evaluate(new Text("abc"));
System.out.println(rst);
}
}
五 编译打包为Jar文件
- 打Jar包方法在前文也已详细叙述过,请移步一观链接: 打Jar包知识点详解.
注意:这里的java程序可以删除main方法,这样在打Jar包时在选择Main方法时不选择即可。如下图
- 把打好的Jar包放到Linux上
- 删除依赖包中的META-INF中多余的.SF文件
yum install -y zip
zip -d /root/testudf.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'
六 使用Jar创建临时或永久函数
1 临时UDF函数
- 在hive命令行使用
add jar jar包路径;
即可加载到临时系统中 create temporary function 函数名 as '方法的全类名';
2 永久UDF函数
hdfs dfs -mkdir -p /apps/hive/functions
hdfs dfs -put /root/testudf.jar /apps/hive/functions
- 在hive命令行输入:
create function 函数名 as '方法的全类名' using jar 'jar包的hdfs路径';
七 调用函数
- 在hive命令行
- 临时UDF函数:可以跨库使用,最好在default库建立函数,本库及其他库直接:
select 函数名(函数值);
- 永久UDF函数:也可以跨库使用
select 库名.函数名(函数值);