HDFS 垃圾回收站原理


HDFS 垃圾回收站设计目标

HDFS 垃圾回收站设计目标是为了防止用户意外删除文件、目录.

HDFS 删除文件的方式

  • 通过命令行的方式删除 HDFS 文件
hadoop fs -rm /xxx/xxx : 默认行为, 先进入垃圾回收站 
hadoop fs -rm -skipTrash /xxx/xxx : 跳过回收站立即删除
  • 用户应用程序调用 RPC 接口立即删除文件


HDFS 垃圾回收站原理

以执行 hadoop fs -rm /tmp/README.txt 为案例分析:

  • 执行命令后判断用户目录下是否存 .Trash/Current 文件夹,不存在则会创建
/user/wzh/.Trash/Current/
  • 然后再将用户删除文件(文件夹)remove 到 .Trash/Current 文件夹下
/user/wzh/.Trash/Current/tmp/README.txt
  • HDFS 使用默认的垃圾回收策略 TrashPolicyDefault ,在 NameNode 中会启动一个 Emptier 线程每间隔一定时间处理回收站中的文件
# Emptier 线程运行间隔时间配置 (分钟)
fs.trash.checkpoint.interval 
  • Emptier 首先会找到 /user/ 目录,遍历下面所有用户目录执行 deleteCheckpoint、createCheckpoint 两个逻辑
  • createCheckpoint 逻辑会将 Current 目录 rename 为以当前时间(yyMMddHHmmss) 为准的目录(即 Checkpoint目录 )
/user/wzh/.Trash/Current 
.       |
.       | rename to 
.       |
/user/wzh/.Trash/220131164211
  • deleteCheckpoint 逻辑会删除 Trash 目录下所有到期的"Checkpoint目录",计算逻辑以 "Checkpoint目录" 名称为起始时间计算判断是否过期
# HDFS 文件在垃圾回收站存活的时间 (分钟)
fs.trash.interval

HDFS 垃圾回收站参数

配置 用途
fs.trash.checkpoint.interval Emptier 运行间隔时间
fs.trash.interval 回收站文件存活时间,如果为 0 则认为不启用回收站

HDFS 垃圾回收站存在的问题

删除大目录问题

  • 当在 Emptier 一个运行间隔时间内用户删除大量的文件或目录,导致该 Checkpoint 目录下文件数目过多
  • 在执行 delete Checkpoint 时删除“大目录” 会长期占用 NameNode 全局写锁(FSNamesystemLock) 直接会影响 NameNode 服务稳定性

回收站文件存活时间不精准

  • 垃圾回收站生命周期粒度较粗,以 Checkpoint 时间为准不能精确到删除时间
  • 文件实际保留时间 fs.trash.interval + fs.trash.checkpoint.interval

其它命令

hadoop fs -expunge : 针对当前用户执行一次 deleteCheckpoint、createCheckpoint 逻辑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容