Hive udf上线相关

简述

本文旨在讲解开发好的hive udf如何上线到服务器并使用,关于如何开发hive udf不在本文讨论范畴内。

创建永久函数

对于长期使用的udf,推荐创建永久函数,这样就不用每次使用函数前都创建临时函数,下面这个命令需要先提前将jar包添加到classpath,关于如何添加jar到classpath查看下一章节。

CREATE FUNCTION [db_name.]function_name AS class_name;

如果没有加到classpath里可以使用命令:

CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

添加jar到classpath

  • 使用命令add jar

    • 描述:hive> add jar /home/hadoop/xxxx.jar;,可以用list jars;命令查看是否添加成功,一般在创建临时函数时才会用到该方法。

    • 时效性:临时的。

    • 服务:只针对当前session,重启hive-shell后失效,重启与HiveServer2的链接后失效。

  • 将jar放入hive目录下的auxlib目录或者lib目录下

    • 描述:lib是hive的依赖目录,auxlib目录是hive默认的插件目录(如果没有则手动创建)。

    • 时效性:永久的。

    • 服务:hive-shell重启后生效,HiveServer2重启后生效。

  • 修改hive-env.sh中的HIVE.AUX.JARS.PATH配置

    • 时效性:永久的。

    • 服务:hive-shell重启后生效,HiveServer2重启后生效。

  • 修改和hive-site.xml中的hive.aux.jars.path配置

    • 时效性:永久的。

    • 服务:对hive-shell无效,HiveServer2重启后生效。

更新函数

在实际应用场景里,我们会遇到Hive udf逻辑更新迭代的情况,这时就需要更新udf的jar包,然后让HiveServer2重新加载这个jar包里的类。

经过试验,HiveServer2一旦加载了udf的jar包就不会轻易卸载。

因此一般情况下,我推荐hive udf的jar包不要带上版本号,这样在更新了jar包后,只需要重启HiveServer2就可以,而并不需要删除/重新创建函数。

(至于如何分辨jar包的版本号,可以查看我的另一篇文章

借助zookeeper实现高可用的HiveServer2如何使用Hive udf

如果使用的HiveServer2借助zookeeper实现了高可用,那么每次与HiveServer2建立链接时,都只是与其中一个HiveServer2通信,如果该HiveServer2已经将目标jar添加到classpath里了,那就可以创建函数。

在一个HiveServer2上添加函数后,另外的HiveServer2节点并不能马上意识到已经创建了函数,使用show functions like '*function_name*';会找不到创建的函数,将该节点重启后才能发现该函数。

尽管HiveServer2重启后能够发现该函数,但如果该HiveServer2节点没有将jar添加到classpath里,那么依然无法使用函数。

因此,在创建函数时,要确保所有的HiveServer2都已经将jar添加到classpath里。

但是,如果按照前面《添加jar到classpath》章节里提到的方式,那么每个HiveServer2节点都需要部署jar包,这样会导致管理不方便,而且版本更新的时候也十分麻烦。

因此对于借助zookeeper实现了高可用的HiveServer2,我更加推荐使用命令CREATE FUNCTION [db_name.]function_name AS class_name USING JAR 'hdfs://file_uri'来创建udf函数,这样在版本更新时,我们就不再需要每一个节点去操作更新jar包,而只需要替换hdfs上的jar包,然后滚动重启每一个HiveServer2即可。

删除函数

DROP FUNCTION [IF EXISTS] function_name;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值