更新时间:2023-03-17 GMT+08:00

如何在多个HiveServer之间同步删除UDF

问题

如果需要删除永久函数(Permanent UDF),如何在多个HiveServer之间同步删除?

回答

因为多个HiveServer之间共用一个MetaStore存储数据库,所以MetaStore存储数据库和HiveServer的内存之间数据同步有延迟。如果在单个HiveServer上删除永久函数,操作结果将无法同步到其他HiveServer上。

遇到如上情况,需要登录Hive客户端,连接到每个HiveServer,并分别删除永久函数。具体操作如下:

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录。

    cd 客户端安装目录

    例如安装目录为“/opt/client”,则执行以下命令:

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 执行以下命令进行用户认证。

    kinit Hive业务用户

    登录的用户需具备Hive admin权限。

  5. 执行如下命令,连接指定的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.<系统域名>为用户名,用户的用户名所包含的系统域名所有字母为小写。

  6. 执行如下命令,启用Hive admin权限。

    set role admin;

  7. 执行如下命令,删除永久函数。

    drop function function_name;

    • function_name为永久函数的函数名。
    • 如果永久函数是在Spark中创建的,在Spark中删除该函数后需要在HiveServer中删除,即执行上述删除命令。

  8. 确定是否已连接所有HiveServer并删除永久函数。

    • 是,操作完毕。
    • 否,执行5