如何删除所有HiveServer中的永久函数
问题
如果需要删除永久函数(Permanent UDF),如何在多个HiveServer之间同步删除?
回答
因为多个HiveServer之间共用一个MetaStore存储数据库,所以MetaStore存储数据库和HiveServer的内存之间数据同步有延迟。如果在单个HiveServer上删除永久函数,操作结果将无法同步到其他HiveServer上。
遇到如上情况,需要登录Hive客户端,连接到每个HiveServer,并分别删除永久函数。具体操作如下:
- 以Hive客户端安装用户登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录。
cd客户端安装目录
例如安装目录为“/opt/client”,则执行以下命令:
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令进行用户认证。
kinitHive业务用户
登录的用户需具备Hive admin权限。
- 执行如下命令,连接指定的HiveServer。
beeline -u "jdbc:hive2://10.39.151.74:21066/default;sasl.qop=auth-conf;auth=KERBEROS;principal=hive/hadoop.<系统域名>@<系统域名>"
- 10.39.151.74为HiveServer所在节点的IP地址。
- 21066为HiveServer端口。HiveServer端口默认范围为21066~21070,用户需根据实际配置端口进行修改。
- hive为用户名。例如,使用Hive1实例时,则使用hive1。
- 用户可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。
- “hive/hadoop.<系统域名>”为用户名,用户的用户名所包含的系统域名所有字母为小写。
- 执行如下命令,启用Hive admin权限。
set role admin;
- 执行如下命令,删除永久函数。
drop function function_name;
- function_name为永久函数的函数名。
- 如果永久函数是在Spark中创建的,在Spark中删除该函数后需要在HiveServer中删除,即执行上述删除命令。
- 确定是否已连接所有HiveServer并删除永久函数。
- 是,操作完毕。
- 否,执行5。