hdfs回收站的配置使用与注意事项

本文介绍HDFS中的回收站功能,包括配置方法、使用步骤及注意事项。通过特定命令,删除的文件将暂时存放在指定路径,便于误删后的恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【概述】

在hdfs使用过程中,通过"rm"命令可以进行文件的删除,然后有时候,难免会出现误删了某个文件。那么hdfs是否存在回收站的功能,文件删除而不是真的删除,而是先进入垃圾回收站,这样可以对误删的文件有机会进行还原。本文就来聊聊hdfs中的回收站功能原理

【配置使用】

hdfs的回收站功能默认是不开启的,如需使用,只需在namenode的配置文件`core-site.xml`中增加如下配置项即可:

<!-- 进入回收站的文件的存放时间, 单位为min-->
<!-- 默认为0, 即不启用回收站 -->
<property>
    <name>fs.trash.interval</name>
    <value>10</value>
</property>
<!-- 回收站中文件超时的检测时间间隔, 单位为min -->
<property>
    <name>fs.trash.checkpoint.interval</name>
    <value>3</value>
</property>

完成配置后,我们就可以来进行测试,通过"hdfs dfs -rm"命令对某个文件进行删除时,文件进入了回收站。

回收站的位置默认为: "/user/$User/.Trash/Current"

一个简单的示例:

[root@nn-1 hadoop]# hdfs dfs -rm /hncscwc/core-site.xml
22/10/14 14:13:46 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hdfsHACluster/hncscwc/core-site.xml' to trash at: hdfs://hdfsHACluster/user/root/.Trash/Current/hncscwc/core-site.xml

[root@nn-1 hadoop]# hdfs dfs -ls /user/root/.Trash/Current
Found 1 items
drwx------ - root supergroup 0 2022-10-14 14:13 /user/root/.Trash/Current/hncscwc
[root@nn-1 hadoop]# hdfs dfs -ls /user/root/.Trash/Current/hncscwc
Found 1 items
-rw-r--r-- 3 root supergroup 1997 2022-10-14 14:13 /user/root/.Trash/Current/hncscwc/core-site.xml

经过10分钟后,回收站中的文件也被删除了

如果想要从回收站还原删除的文件,只需要通过`hdfs dfs -mv`命令,将文件移动到其他目录即可。

[root@nn-1 hadoop]# hdfs dfs -mv /user/root/.Trash/221014160300/hncscwc/core-site.xml /hncscwc/
[root@nn-1 hadoop]# hdfs dfs -ls -R /user/root/.Trash /hncscwc
drwx------ - root supergroup 0 2022-10-14 16:01 /user/root/.Trash/221014160300
drwx------ - root supergroup 0 2022-10-14 16:03 /user/root/.Trash/221014160300/hncscwc
-rw-r--r-- 3 root supergroup 1997 2022-10-14 16:00 /hncscwc/core-site.xml

当然,通过命令删除文件时,也可以直接跳过回收站直接进行删除,例如:

[root@nn-1 hadoop]# hdfs dfs -ls /hncscwc /user/root
Found 1 items
-rw-r--r-- 3 root supergroup 1997 2022-10-14 15:59 /hncscwc/core-site.xml
Found 1 items
drwx------ - root supergroup 0 2022-10-14 15:15 /user/root/.Trash
[root@nn-1 hadoop]# hdfs dfs -rm -skipTrash /hncscwc/core-site.xml
Deleted /hncscwc/core-site.xml
[root@nn-1 hadoop]# hdfs dfs -ls /hncscwc /user/root
Found 1 items
drwx------ - root supergroup 0 2022-10-14 15:15 /user/root/.Trash

【原理】

通过命令的方式,删除的文件可以正确进入回收站中,那么程序中删除的文件是否也同样可行呢?

答案是不会的!!通过API调用进行删除的文件直接就被删除了。除此之外,通过NN界面删除的文件也不会进入回收站,而是直接被删除了。

三者之间的关系如下图所示:

0ef149cf792749d87de62a493e448212.jpeg

结合上面的图来梳理下在启用回收站后,"hdfs dfs -rm xx"命令执行到文件最终被删除的流程:

  • 执行"hdfs dfs -rm xxx"命令时,首先检查"/user/${USER}/.Trash/Current"目录是否存在,不存在则创建。然后将待删除的文件移动(mv)到该目录下。

  • NN内部在启动时,创建独立线程(Emptier)定时对"/user/${USER}/.Trash"目录下的文件夹进行检测,并执行"deleteCheckpoint"和"createCheckpoint"动作。

    其中"createCheckpoint"是将"/user/${User}/.Trash/Current"目录重命名为"/user/${User}/.Trash/$TIMESTAMP","$TIMESTAMP"为系统当前时间"yyMMddHHmmss"格式;

    而"deleteCheckpoint"则是检测"/user/${User}/.Trash/$TIMESTAMP"是否过期,如果过期则进行删除。是否过期的依据为:当前时间-$TIMESTAMP > fs.trash.interval

例如:

# 1. 删除/hncscwc/core-site.xml 文件 移动到回收站
[root@nn-1 hadoop]# date;hdfs dfs -ls -R /user/root/.Trash
Fri Oct 14 14:59:44 CST 2022
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/Current
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/Current/hncscwc
-rw-r--r-- 3 root supergroup 1997 2022-10-14 14:57 /user/root/.Trash/Current/hncscwc/core-site.xml

# 2. 定时检测,将Current重命名
[root@nn-1 hadoop]# date;hdfs dfs -ls -R /user/root/.Trash
Fri Oct 14 15:00:03 CST 2022

drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc
-rw-r--r-- 3 root supergroup 1997 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc/core-site.xml

# 3. 删除/hncscwc/hdfs-site.xml 移动到回收站
[root@nn-1 hadoop]# date;hdfs dfs -ls -R /user/root/.Trash
Fri Oct 14 15:01:11 CST 2022
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc
-rw-r--r-- 3 root supergroup 1997 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc/core-site.xml
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/Current
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/Current/hncscwc
-rw-r--r-- 3 root supergroup 4094 2022-10-14 15:00 /user/root/.Trash/Current/hncscwc/hdfs-site.xml

# 4. 再次定时检测,将Current重命名
[root@nn-1 hadoop]# date;hdfs dfs -ls -R /user/root/.Trash
Fri Oct 14 15:03:01 CST 2022
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000
drwx------ - root supergroup 0 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc
-rw-r--r-- 3 root supergroup 1997 2022-10-14 14:57 /user/root/.Trash/221014150000/hncscwc/core-site.xml
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/221014150300
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/221014150300/hncscwc
-rw-r--r-- 3 root supergroup 4094 2022-10-14 15:00 /user/root/.Trash/221014150300/hncscwc/hdfs-site.xml

# 5. 超时删除
[root@nn-1 hadoop]# hdfs dfs -ls -R /user/root/.Trash
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/221014150300
drwx------ - root supergroup 0 2022-10-14 15:01 /user/root/.Trash/221014150300/hncscwc
-rw-r--r-- 3 root supergroup 4094 2022-10-14 15:00 /user/root/.Trash/221014150300/hncscwc/hdfs-site.xml

对于指定了"-skipTrash"、通过API,又或者是通过NN界面删除文件,这三种方式都是直接向NN发起rpc删除文件的请求,这样就不会经过回收站了。

【使用注意事项】

1. 配额问题

从上面的介绍可以知道,通过命令删除文件时,仅仅是将文件移动到了用户home目录下。那么如果待删除的文件累加超过了用户home的配置,那么删除命令会执行失败。

[root@nn-1 hadoop]# hdfs dfs -rm -f /hncscwc/test4.log
rm: Failed to move to trash:
hdfs://hdfsHACluster/hncscwc/test4.log: The DiskSpace quota of/user/root is exceeded: quota = 1073741824 B = 1 GB but diskspaceconsumed = 1258300215 B = 1.17 GB

2. 删除用户home目录

由于用户home目录中包含了回收站的内容,直接删除用户home目录是失败的, 因为无法移动到回收站中。但是,可以通过"-skipTrash"来删除。

[root@nn-1 hadoop]# hdfs dfs -rm -r /user/root
rm: Cannot move "hdfs://hdfsHACluster/user/root" to the trash, as itcontains the trash. Consider using -skipTrash option

3. API删除接口支持回收站问题

当前,通过API接口删除文件无法进入到回收站,而社区(HDFS-16032)中也就此进行过讨论,最终被驳回没有支持。

一是DistributedFileSystem只是hadoop支持的其中一个文件系统,如果delete方法支持回收站,需要所有文件系统都支持,但是s3a和abfs文件系统会存在问题。

二是设置回收站的目的是恢复误删的文件,通过程序调用接口删除文件应该全在意料之中,不会出现误删的情况,且如果确实有必要使用回收站,可以通过编码的形式达到目的(例如将delete改为mv移动到回收站中)。

三是兼容性的考虑,只要"fs.trash.interval"大于0,就开启回收功能,但如果要保持和之前delete一致的效果,就需要额外传入一个skipTrash参数。

好了,这就是本文的全部内容,如果觉得本文对您有帮助,请点赞+转发,也欢迎加我微信交流~

<think>好的,我需要帮助用户了解如何使用hdfs dfs -expunge命令清空HDFS回收站。首先,我得回顾一下HDFS回收站机制。HDFS回收站功能默认是关闭的,用户需要手动配置开启。当启用后,删除的文件会被移动到回收站目录,保留一段时间后才会真正删除。 接下来,用户提到的-expunge命令是关键。我需要确认这个命令的具体作用和用法。根据HDFS文档,-expunge命令用于永久删除回收站中超过保留期的文件。通常,回收站中的文件保留时间由配置参数fs.trash.interval决定,默认是0,也就是关闭。所以用户需要先检查这个参数是否配置正确,否则回收站可能无法正常工作。 然后,我需要解释如何执行这个命令。命令本身很简单,就是hdfs dfs -expunge。执行后,系统会返回一个提示,确认回收站已被清空。但用户可能需要注意权限问题,执行命令的用户需要有足够的权限,比如HDFS管理员权限。 另外,用户可能不清楚回收站的位置。根据引用[4],HDFS的默认工作目录是/user/$USER,而回收站通常位于/user/$USER/.Trash/。这个路径可能因配置不同而变化,但用户可以通过检查配置使用-ls命令查看。 最后,需要提醒用户,执行-expunge后文件将无法恢复,所以操作前要确认是否需要永久删除。同时,如果回收站功能未启用,-expunge可能不会起作用,这时候需要先配置fs.trash.interval参数。 现在整理这些信息,用中文分步骤说明,确保符合格式要求,使用正确的行内公式和独立公式,并生成相关问题。</think>要使用 `hdfs dfs -expunge` 清空 HDFS 回收站,可按照以下步骤操作: --- ### **步骤说明** 1. **确认回收站功能已启用** HDFS 回收站默认关闭,需在 `core-site.xml` 中配置参数 `fs.trash.interval`(单位为分钟),例如: ```xml <property> <name>fs.trash.interval</name> <value>1440</value> <!-- 保留24小时 --> </property> ``` 修改后需重启 HDFS 服务生效[^4]。 2. **执行清理命令** 直接运行以下命令清空回收站: ```bash hdfs dfs -expunge ``` 成功后会返回类似 `Successfully created trash checkpoint: .Trash/<timestamp>` 的提示,表示已删除超期文件[^3][^4]。 3. **验证清理结果** 查看回收站目录是否为空: ```bash hdfs dfs -ls /user/用户名/.Trash/Current ``` 若显示 `No such file or directory`,则清理完成[^1]。 --- ### **注意事项** - **权限要求**:执行命令的用户需具备 HDFS 管理员权限。 - **数据不可逆**:`-expunge` 会**永久删除**超期文件,操作前需确认。 - **回收站路径**:默认路径为 `/user/用户名/.Trash`,可通过 `hdfs dfs -ls /user/用户名` 查看。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值