配置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服务已正常运行。
操作步骤
- 登录集群Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
- 选择“HiveServer(角色) > 自定义”,在参数文件“hive-site.xml”中添加自定义参数,设置“名称”为“hive.overwrite.directory.move.trash”,参数取值包括:
- true:Hive执行insert overwrite操作后,会将旧数据移除到回收站而不是直接删除。
- false:默认值,Hive执行insert overwrite操作会直接删除目标目录中的旧数据。
需将参数值设置为“true”。
- MRS 3.6.0-LTS之前版本,单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。
MRS 3.6.0-LTS及之后版本,单击“保存”保存配置,等待界面提示“操作成功”,单击“完成”,配置已修改。该参数动态生效,不需要重启Hive服务。
- 以客户端安装用户登录安装客户端的节点。
下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
- 执行以下命令配置环境变量并认证用户。
切换至客户端安装目录:
cd 客户端安装目录加载环境变量:
source bigdata_env
认证用户,集群未启用Kerberos认证(普通模式)请跳过该步骤:
kinit Hive业务用户 - 执行以下命令创建HDFS目录,例如“/user/test”:
hdfs dfs -mkdir /user/test - 执行以下命令登录Hive客户端:
beeline
- 创建Hive表并插入数据。例如创建表“test”: 执行以下命令创建表,例如“test”:
create table test(id int,name string);执行以下命令向表中插入数据:insert into table test(id,name) values("11","A"); - 执行以下命令查询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
验证操作:
配置完成后,可通过以下方式验证回收站功能是否生效:
- 执行insert overwrite directory命令覆盖数据。
- 在HDFS中查看回收站目录(.Trash),确认旧数据已被移动到回收站中。
- 执行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数据存储及加密配置。
- 了解Hive常见问题,请参考Hive常见问题。
- 了解Hive各角色日志文件说明,请参考Hive日志介绍。