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

简介 

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

准备工作

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

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <!-- 版本号需要与hadoop集群中hive的版本号一致 -->
    <version>3.1.2</version>
</dependency>

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 包

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;
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky_Tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值