Hive 2.1.1 +cdh6.2.0 库更新UDF步骤说明
共有三种更新UDF的方式,整理如下:
名称 | 是否需要重启hive服务 | Jar保存位置 | 是否支持 Sentry | 适用场景 |
直接JAR配置 | 需要 | Hdfs | 不支持 | 开发场景 |
辅助JARs目录配置 | 需要 | 本地目录 | 不支持 | 防止意外覆盖文件的场景 |
可重载的辅助JAR配置 | 不需要 | 本地目录 | 支持 | 频繁更改UDF场景 |
选择“直接JAR配置”和“可重载的辅助JAR配置”这两种做详细说明。
两种方法优缺点:
直接JAR配置方式设置 Hive CLI 和 Beeline(需重启Hive服务) 均适用,目录位置为hdfs文件系统。
可重载的辅助JAR配置方式只对 Beeline 适用,Hive CLI 方式无法识别 Jar 包,优点在于目录位置可以随意指定,使用时需要执行执行 RELOAD 命令(要执行两次)即可加载到新增 Jar 包,不需要重启hive服务。
一、直接JAR更新步骤
1.1 删除原函数和jar包(在所有hiveserver节点执行)
--在beeline中执行删除原函数
drop function betUDF;
drop function chkUDF;
--在beeline中执行删除jar包(在所有hiveserver节点执行)
delete jar hdfs:///tmp/hive-function-1.2.3.1.jar;
--从hdfs上删除jar包(任一节点执行一次)
export HADOOP_USER_NAME=hive
Hdfs dfs -rm /tmp/hive-function-1.2.3.1.jar
1.2 上传新的jar包到hdfs(任一节点执行一次)
--在操作系统中执行
export HADOOP_USER_NAME=hive
Hdfs dfs -put hive-function-1.2.4.jar /tmp/
1.3 注册永久函数(在所有hiveserver节点执行)
--在beeline中执行添加jar包
add jar hdfs:///tmp/hive-function-1.2.4.jar;
--在beeline中执行注册永久函数
create function betUDF as 'com.function.BetUDF' using jar 'hdfs:///tmp/hive-function-1.2.4.jar';
create function chkUDF as 'com.function.ChkUDF' using jar 'hdfs:///tmp/hive-function-1.2.4.jar';
--在beeline中查看结果
show functions like '*udf';
1.4 重启所有节点的hive server服务,UDF生效。
二、可重载的辅助JAR更新步骤
2.1 首次初始化配置
需要预先配置相关参数和创建目录。
在CDH管理界面,hive组件的“hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)”配置项中,添加参数“hive.reloadable.aux.jars.path”,参数值为本地hive server对应的目录,所有实例的目录必须存在并且位置相同,如值为“/usr/local/hive/auxjar”,配置后如下图。
Xml格式视图为“<property><name>hive.reloadable.aux.jars.path</name><value>/usr/local/hive/auxjar</value></property>”
在所有服务器节点创建参数值对应的目录“/usr/local/hive/auxjar”,如无此目录,hive服务无法正常启动。
--在操作系统中执行
mkdir -p /usr/local/hive/auxjar
完成以上配置后,重启hive所有服务,配置生效。
2.2 更新UDF步骤
2.2.1 删除原UDF(在所有hiveserver节点执行)
--在beeline中执行
drop function betUDF;
drop function chkUDF;
2.2.2 所有操作系统节点替换jar包(在所有操作系统节点执行)
删除在操作系统/usr/local/hive/auxjar目录内的旧jar包,上传新的jar包到目录内。
2.2.3 执行jar重载命令(在所有hiveserver节点执行)
--在beeline中执行两次重载命令
RELOAD;
RELOAD;
2.2.4 注册永久函数(在所有hiveserver节点执行)
--在beeline中注册永久函数
create function betUDF as 'com.function.BetaUDF';
create function chkUDF as 'com.function.ChkUnitrdNavUDF';
注:在所有节点注册后,UDF函数立即生效,不用重启hive server服务。
--在beeline中查看注册结果
show functions like '*udf';
三、注意事项
3.1 在使用的时候,如不指定库名,默认使用default库下的UDF参数,如用指定库下的UDF函数需要指定库名才能使用。
3.2 如果要删除修改函数,务必先删除函数,后删除jar包,否则会报File dose not exist这个错误
出现错误后的恢复方法:重新上传与该函数创建时一致的jar包和路径,然后再删除函数,删除jar包。