irpas技术客

Hive udf上线相关_Tango小黄

网络投稿 6577

简述

本文旨在讲解开发好的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;


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive #udf上线相关 #udf不在本文讨论范畴内 #create #function