如何在Hive中创建自定义函数UDF及通过Impala同步元数据重用UDF的jar文件

简介 

        如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译

准备工作

创建 Maven 工程,导入如下依赖:


    org.apache.hive
    hive-exec
    
    3.1.2

1. 代码

        以判断某年是否为闰年为例:

package cn.kgc;

import org.apache.hadoop.hive.ql.exec.UDF;

public class IsLeapYear extends UDF {
    public Boolean evaluate(int year){
        if ((year%4 == 0 && year%100 != 0) || year%400 ==0) 
            return true;
        else 
            return false;
    }
}

2. 编译 jar 包

如何在Hive中创建自定义函数UDF及通过Impala同步元数据重用UDF的jar文件_第1张图片

3. 在 Hive 中使用自定义函数(UDF)

3.1 创建临时 UDF

(1)进入 hive 客户端,执行如下命令,创建临时函数 

add jar /root/hive_udf/hive_udf-1.0.jar;
create temporary function isLeapYear as 'cn.kgc.IsLeapYear';

(2)测试该 UDF 函数

select isLeap(2000);

+-------+
|  _c0  |
+-------+
| true  |
+-------+

3.2 创建永久 UDF

(1)在 HDFS 中创建相应目录,将 hive_udf-1.0.jar 包上传至该目录

[root@test hive_udf]# pwd
/root/hive_udf
[root@test hive_udf]# hdfs dfs -mkdir /udf
[root@test hive_udf]# hdfs dfs -put hive_udf-1.0.jar /udf

(2)进入 Hive 客户端,执行如下命令创建永久的 UDF

create function isLeapYear as 'cn.kgc.IsLeapYear' using jar 'hdfs://test:9820/udf/hive_udf-1.0.jar';

(3)退出客户端后重新进入,测试 UDF 函数,看是否生效

select isLeap(1900);

+--------+
|  _c0   |
+--------+
| false  |
+--------+

 (4)Impala使用Hive的UDF(直接使用hive中的java的jar文件中函数,同步元数据即可,可以直接复用哦)
1.在Impala shell命令行执行元数据同步命令

impala> invalidate metadata;

测试:
重新同步元数据之后再次进行测试:
注意,如果这边在第一个impala-shell进去的时候,同步元数据之后还是不能使用hive创建的UDF函数的话,关闭客户端连接,重新进入就可以使用了

4. 删除UDF函数命令:

impala> drop function SubStrUdf;

你可能感兴趣的:(hive,big,data,udf,impala)