
# 如何删除所有HiveServer中的永久函数
#### 问题
如果需要删除永久函数（Permanent UDF），如何在多个HiveServer之间同步删除？
#### 回答（MRS 3.6.0-LTS之前版本）
因为多个HiveServer之间共用一个MetaStore存储数据库，所以MetaStore存储数据库和HiveServer的内存之间数据同步有延迟。如果在单个HiveServer上删除永久函数，操作结果将无法同步到其他HiveServer上。
遇到如上情况，需要登录Hive客户端，连接到每个HiveServer，并分别删除永久函数。具体操作如下：
1. 以Hive客户端安装用户登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   **cd** *客户端安装目录*
   例如安装目录为"/opt/client"，则执行以下命令：
   **cd /opt/client**
   
   
3. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
4. 执行以下命令进行用户认证。 
   **kinit** *Hive业务用户*
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   登录的用户需具备Hive admin权限。
   
   
5. 执行如下命令，连接指定的HiveServer。
   
   **beeline -u "jdbc:hive2://** *10.39.151.74* **:** *21066* **/default;sasl.qop=auth-conf;auth=KERBEROS;principal=** *hive* /*hadoop.\<系统域名\>@\<系统域名\>*"
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - *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* **;**
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - *function_name*为永久函数的函数名。
   
   - 如果永久函数是在Spark中创建的，在Spark中删除该函数后需要在HiveServer中删除，即执行上述删除命令。
    
   
   
8. 确定是否已连接所有HiveServer并删除永久函数。 
   - 是，操作完毕。
   
   - 否，执行[5]。
   
   
   
   
 
#### 回答（MRS 3.6.0-LTS及之后版本）
因为多个HiveServer之间共用一个MetaStore存储数据库，所以MetaStore存储数据库和HiveServer的内存之间数据同步有延迟。如果在单个HiveServer上删除永久函数，操作结果将无法同步到其他HiveServer上，需要在Hive客户端执行以下SQL命令重新加载函数：
```
reload function;
```
