【HDFS运维】HDFS回收箱机制:原理、配置、配置可能导致的问题分析

文章详细介绍了HDFS的回收箱机制,包括基本逻辑(文件删除后移动至回收箱,定期清理过期文件),配置测试(如何开启和调整回收箱参数),以及API删除不走回收箱的情况和NN响应问题。还提醒了设置fs.trash.interval和fs.trash.checkpoint.interval的重要性以避免NameNode性能影响。

一. HDFS回收箱机制逻辑

1. 基本逻辑

If trash configuration is enabled, files removed by FS Shell is not immediately removed from HDFS. Instead, HDFS moves it to a trash directory (each user has its own trash directory under /user//.Trash). The file can be restored quickly as long as it remains in trash.
 
Most recent deleted files are moved to the current trash directory (/user//.Trash/Current), and in a configurable interval, HDFS creates checkpoints (under /user//.Trash/) for files in current trash directory and deletes old checkpoints when they are expired. See expunge command of FS shell about checkpointing of trash.
 
After the expiry of its life in trash, the NameNode deletes the file from the HDFS namespace. The deletion of a file causes the blocks associated with the file to be freed. Note that there could be an appreciable time delay between the time a file is deleted by a user and the time of the corresponding increase in free space in HDFS.

当hdfs配置了回收箱后,文件删除后会移动到回收箱目录,每个用户都有自己的回收箱目录:/user/<username>/.Trash。只要文件删除后还在回收箱,就可以随时恢复。

删除的文件被移动到/user/<username>/.Trash/Current目录下。配置时间间隔后,HDFS为当前垃圾目录下的文件创建检查点(在/user//. trash /下),并在过期时删除旧的检查点

当过期时,namenode会从namespace删除此文件。文件删除后会释放与之相关的块。文件删除后,磁盘空间的增加会有延迟。

参考:File Deletes and Undeletes

 

2. 举例说明

This will result in deleted files being move to trash and retained in trash for 4 days (i.e. fs.trash.interval); every 12 hours (i.e. fs.trash.checkpoint.interval) the Trash is scanned and files older than 4 days will be deleted (“expunged”) from Trash.

比如删除文件后,文件将会在回收箱保留4天(通过fs.trash.interval设置),每12小时(通过 fs.trash.checkpoint.interval设置)扫描回收箱,并将过期(超过4天)的文件删除。

 

二. 配置测试

1. 配置

在hdfs上面开启trash功能,默认是没有开启的。只需要在hadoop的配置文件core-site.xml中添加下面的内容:

<property>
     <name>fs.trash.interval</name>
     <value>360</value>
     <description>检查点被删除后的分钟数。如果为零,垃圾桶功能将被禁用。
     该选项可以在服务器和客户端上配置。如果垃圾箱被禁用服务器端,则检查客户端配置。
     如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。
     </description>
</property>
 
<property>
     <name>fs.trash.checkpoint.interval</name>
     <value>0</value>
     <description>垃圾检查点之间的分钟数。应该小于或等于fs.trash.interval。
     如果为零,则将该值设置为fs.trash.interval的值。每次检查指针运行时,
     它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。
     </description>
</property>

不需要重启,直接执行

2. 回收箱相关命令

# 删除
 bin/hdfs dfs -rm /conf.tar.gz
2023-12-05 14:54:43,989 INFO fs.TrashPolicyDefault: Moved: 'hdfs://xxx/conf.tar.gz' to trash at: hdfs://xmanhdfs3/user/taiyi/.Trash/Current/conf.tar.gz

# 查看回收箱文件
bin/hdfs dfs -ls hdfs://xxx/user/taiyi/.Trash/Current/conf.tar.gz
-rw-r--r--   3 taiyi supergroup       7605 2023-12-05 14:54 hdfs://xxx/user/taiyi/.Trash/Current/conf.tar.gz


# 文件恢复:就是将文件从回收箱中移出
bin/hdfs dfs -mv  hdfs://xxx/user/taiyi/.Trash/Current/conf.tar.gz /

# 清空回收站
bin/hdfs dfs -expunge

# 跳过回收站直接删除
hdfs dfs -rm -r -skipTrash /user/root/123123

 

三. 其他问题讨论

1. api不会走trash机制

但如果直接调用hadoop delete api进行删除操作,是默认不会走trash机制的,同时也未配置快照功能的情况下,文件所对应的block数据已经开始真正从底层文件系统层面进行删除,此时需要快速的做出决断进行恢复操作。

因为需要停止数据服务(nn、dn),所以需要综合考虑,去权衡恢复数据和停服对线上服务的影响两者之间的利害关系。

参考:

恢复数据
如何有效恢复误删的HDFS文件

ing

 

2. 因为设置了Trash configuration导致nn无法响应

Hadoop NameNode becomes un-responsive due to Trash configuration

Resolving The Problem
In order to prevent the NameNode having to perform an extreme amount of file to block map maintenance (which will also impact the DataNode(s)), the settings for fs.trash.interval and fs.trash.checkpoint.interval should be set so that the amount of data to be expunged at a single point of time is within the capability of the environment; a suggestion being under 10GB.

namenode单次删除回收箱的数据不大于10G

<think>嗯,用户想修改HDFS回收站清理时间间隔,这涉及到HDFS的核心配置管理。从引用内容看,用户已经查阅过相关资料,对回收站机制有一定了解,但可能对具体配置操作有疑问。 用户提供的引用信息非常全面:-引用[1]说明回收站文件不会立即删除,并提到跳过回收站的删除命令-引用[2]详细解释了回收站机制原理-引用[3]给出具体配置项fs.trash.interval和fs.trash.checkpoint.interval-引用[4]展示CM界面配置示例用户真正需要的是操作指导,重点应该放在:1.明确两个关键参数的含义:-fs.trash.interval决定文件在回收站保留时长(分钟)- fs.trash.checkpoint.interval控制检查点创建频率2.提供两种配置方式:-通过ClouderaManager可视化配置(适合企业环境)-直接修改core-site.xml(适合非CM集群) 3.强调配置生效的注意事项:-需要重启NameNode-新配置仅影响之后删除的文件4.补充验证方法:-通过hdfs命令查看配置-测试删除文件观察保留时间特别要注意提醒用户:-将fs.trash.interval设为0会彻底禁用回收站(危险操作) -生产环境建议保留合理时长(如1440分钟/24小时) -修改前备份配置文件用户可能还关心:-如何立即清理回收站(expunge命令)-不同用户回收站隔离机制这些可以作为相关问题补充</think>要修改HDFS回收站的清理时间间隔,需通过以下步骤配置核心参数(操作需管理员权限): ### 一、关键配置参数说明 1. **`fs.trash.interval`** - **作用**:文件在回收站中的保留时长(单位:分钟) - **示例值**: - `1440` = 保留24小时(默认值) - `4320` = 保留3天 - **`0` = 禁用回收站功能**(直接永久删除)[^3][^4] 2. **`fs.trash.checkpoint.interval`** - **作用**:回收站检查点的创建频率(单位:分钟) - **规则**: - 必须 ≤ `fs.trash.interval` - 设为 `0` 时,自动继承 `fs.trash.interval` 的值[^3][^4] --- ### 二、配置步骤(两种方式) #### ▶ 方式1:通过 Cloudera Manager(CM)配置 1. 登录CM控制台 → 进入 **HDFS 服务** 2. 导航到 **Configuration** → 搜索栏输入 `fs.trash` 3. 修改以下参数: ```xml <!-- 设置文件保留时长(示例:保留7天=10080分钟) --> <property> <name>fs.trash.interval</name> <value>10080</value> </property> <!-- 检查点间隔(建议保持默认0) --> <property> <name>fs.trash.checkpoint.interval</name> <value>0</value> </property> ``` 4. **保存配置** → 按提示重启HDFS服务生效[^4]。 #### ▶ 方式2:手动修改 `core-site.xml` 1. 在所有 **NameNode** 和 **DataNode** 节点上编辑文件: ```bash vi $HADOOP_HOME/etc/hadoop/core-site.xml ``` 2. 在 `<configuration>` 标签内添加参数: ```xml <property> <name>fs.trash.interval</name> <value>10080</value> <!-- 自定义保留时长 --> <description>文件在回收站的存活时间(分钟)</description> </property> <property> <name>fs.trash.checkpoint.interval</name> <value>0</value> <!-- 自动同步主间隔 --> </property> ``` 3. **同步配置** 到所有节点 → **重启HDFS服务**: ```bash hdfs --daemon restart namenode # 重启NameNode hdfs --daemon restart datanode # 重启DataNode ``` --- ### 三、验证配置生效 ```bash # 查看当前回收站配置 hdfs getconf -confKey fs.trash.interval hdfs getconf -confKey fs.trash.checkpoint.interval # 测试删除文件(观察是否进入回收站) hdfs dfs -rm /testfile.txt hdfs dfs -ls /user/${USER}/.Trash/Current # 检查回收站 ``` --- ### ⚠️ 重要注意事项 1. **新配置仅影响后续删除的文件**,已在回收站的文件按原规则清理。 2. **立即清理回收站**: ```bash hdfs dfs -expunge # 触发检查点删除过期文件[^1][^2] ``` 3. **跳过回收站永久删除**(慎用): ```bash hdfs dfs -rm -skipTrash /path/to/file [^1] ``` --- ### 相关问题 1. 如何监控HDFS回收站的空间占用情况? 2. 回收站机制可能导致哪些运维问题(如空间不足)?[^3] 3. 如何为不同用户设置差异化的回收站保留策略? 4. 误删HDFS文件后,除了回收站还有哪些恢复手段? [^1]: HDFS文件删除与回收站清理命令 [^2]: HDFS回收站机制原理与检查点操作 [^3]: 回收站配置参数详解及问题排查 [^4]: CM界面配置回收站参数示例
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值