【HDFS】rm命令的client行为

本文会主要解释在client端,rm命令会做一些什么行为。

首先,当我们在命令行中输入rm命令时,HDFS会将-rm作为参数传递给FsShell,FsShell会做一个command register的行为,说白了就是将java类与命令对应起来,这里大家如果好奇可以搜索“FsShell” 去探究细节,我们这里不做赘述。

通过FsShell,我们会来到org.apache.hadoop.fs.shell.Delete,在Delete类下,一共定义了四个子类

Rm -- 对应我们日常使用的“-rm", 负责一切与HDFS相关的删除操作

Rmr -- 与“-rm -r” 完全相同

Rmdir -- 主要用于清理空文件夹

Expunge -- 创建checkpoint并清理trash目录

我们最常用到的Rm类下,除去一些对删除参数的判断与过滤,client端会先尝试moveToTrash操作,如果moveToTrash失败,才会直接给NN发送delete请求:

我们trace moveToTrash方法可以来到TrashPolicyDefault.moveToTrash(Path):

在这里,客户端会生成本次删除的trash目录并判断文件/文件夹是否已经在trash目录下:

尝试创建trash目录并在trash目录已存在的情况下将trash+timestamp设为新的trash目录:

下面还有一个类似操作就不都贴出来了。之后就是会向server端发送rename到trash目录的请求了。

这里关于创建trash目录与rename操作,会做两次尝试,为了防止在第一次尝试时,创建trash目录结束后,正好做了createCheckPoint的行为,导致trash目录不存在,最终删除失败。

当然如果出现了两次尝试都出现这种情况的时候呢,这边建议直接汇报领导,看看是公司里哪个大聪明干的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值