
# 配置Hive目录旧数据自动移除至回收站
#### 操作场景
在Hive数据管理中，执行insert overwrite操作会覆盖目标目录的数据，默认情况下旧数据会被直接删除。但在实际业务中，旧数据可能因误操作或业务需求变更而需要恢复，直接删除会导致数据无法找回。如何在使用insert overwrite覆盖数据时保留旧数据，以便在需要时进行恢复？Hive提供目录旧数据自动移除至回收站功能，开启该功能后，执行insert overwrite directory操作时，旧数据会被自动移动到回收站（.Trash目录）而不是直接删除，用户可以在需要时从回收站恢复数据。本文介绍如何配置Hive目录旧数据自动移除至回收站功能。
- **insert overwrite directory**：Hive的SQL命令，用于将查询结果写入指定的HDFS目录，覆盖目录中的原有数据。默认情况下，旧数据会被直接删除。
- **回收站（Trash）**：HDFS提供的数据保护机制，删除的文件会被移动到回收站目录（.Trash），在回收站保留一段时间后才被永久删除。用户可以从回收站恢复误删除的数据。
 
#### 约束与限制
- 该功能仅适用于insert overwrite directory命令，不适用于insert overwrite table命令。
- 目标目录不能为Hive元数据库中已经存在的数据库路径。
- 回收站中的文件会占用额外的存储空间，需要合理规划回收站保留时间。
 
#### 前提条件
- 已安装Hive客户端。
- Hive服务已正常运行。
 
#### 操作步骤
1. 登录集群Manager页面，选择"集群 \> 服务 \> Hive \> 配置 \> 全部配置"。
2. 选择"HiveServer（角色） \> 自定义"，在参数文件"hive-site.xml"中添加自定义参数，设置"名称"为"hive.overwrite.directory.move.trash"，参数取值包括： 
   - true：Hive执行**insert overwrite**操作后，会将旧数据移除到回收站而不是直接删除。
   
   - false：默认值，Hive执行**insert overwrite**操作会直接删除目标目录中的旧数据。
   
   
   需将参数值设置为"true"。
   
   
3. MRS 3.6.0-LTS之前版本，单击"保存"保存配置。单击"实例"，勾选所有Hive实例，选择"更多 \> 重启实例"，输入当前用户密码，单击"确定"重启所有Hive实例。 
   MRS 3.6.0-LTS及之后版本，单击"保存"保存配置，等待界面提示"操作成功"，单击"完成"，配置已修改。该参数动态生效，不需要重启Hive服务。
   
   
4. 以客户端安装用户登录安装客户端的节点。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
5. 执行以下命令配置环境变量并认证用户。 
   切换至客户端安装目录：
   ```
   cd 客户端安装目录
   ```
   加载环境变量：
   ```
   source bigdata_env
   ```
   认证用户，集群未启用Kerberos认证（普通模式）请跳过该步骤：
   ```
   kinit Hive业务用户
   ```
   
   
6. 执行以下命令创建HDFS目录，例如"/user/test"： 
   ```
   hdfs dfs -mkdir /user/test
   ```
   
   
7. 执行以下命令登录Hive客户端： 
   ```
   beeline
   ```
   
   
8. 创建Hive表并插入数据。例如创建表"test"： 
   执行以下命令创建表，例如"test"：
   ```
   create table test(id int,name string);
   ```
   执行以下命令向表中插入数据：
   ```
   insert into table test(id,name) values("11","A");
   ```
   
   
9. 执行以下命令查询Hive表数据并写入至HDFS中，例如"/user/test"目录下： 
   ```
   insert overwrite directory '/user/test' select * from test;
   ```
   再次执行以下命令查询Hive表数据并写入至HDFS中：
   ```
   insert overwrite directory '/user/test' select id from test;
   ```
   命令执行成功后，第一次写入"/user/test"目录中的数据不会被删除，而是移除到回收站目录".Trash"中，例如移除至"/user/*用户名* /.Trash/*xxx*/user/test/000000_0" 文件中，内容为：
   ```
   11A
   ```
   
   
**验证操作：**
配置完成后，可通过以下方式验证回收站功能是否生效：
1. 执行**insert overwrite directory**命令覆盖数据。
2. 在HDFS中查看回收站目录（.Trash），确认旧数据已被移动到回收站中。
3. 执行**hdfs dfs -ls /user/** *用户名* **/.Trash/**命令，查看回收站中的文件。
 
#### 常见问题
- **回收站占用过多存储空间**
  启回收站功能后，旧数据会被移动到回收站，如果频繁执行insert overwrite操作，回收站中的文件会快速积累，占用大量存储空间。
  可以调整HDFS的回收站保留时间参数（fs.trash.interval），缩短文件在回收站中的保留时间。或者定期手动清理回收站中的旧数据。
  
- **如何从回收站恢复数据**
  用户误操作或业务需求变更，需要从回收站恢复旧数据。
  使用HDFS命令将回收站中的文件移动回原目录。
  例如：
  ```
  hdfs dfs -mv /user/_用户名_/.Trash/_xxx_/user/test/000000_0 /user/test/
  ```
  
- **配置参数后未生效**
  配置参数后未生效可能是因为MRS 3.6.0-LTS之前版本未重启Hive实例，或参数配置路径错误。
  
 
#### 相关文档
- 了解Hive数据操作，请参考[Hive数据存储及加密配置](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300253.html)。
- 了解Hive常见问题，请参考[Hive常见问题](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1752.html)。
- 了解Hive各角色日志文件说明，请参考[Hive日志介绍](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0976.html)。
 
