HDFS 的高级功能主要包括:
- 回收站:便于找到误删的数据。
- 快照:对数据的备份。
- 配额:限制目录中文件的数量和大小。
一、回收站(trash)
-
默认回收站是关闭的,可以通过在 core-site.xml 中添加 fs.trash.interval 来打开配置时间阀值,例如:
<property> <!-- 单位:分钟 --> <name>fs.trash.interval</name> <value>1440</value> </property>
-
删除的文件其实是被 ctrl + x 移动到了一个隐藏目录 .Trash,本质上就是一个 mv 命令。
-
上面的配置表示,删除之后放到回收站里的文件存放时间超过 1440 分钟将被彻底删除,释放占用的数据块。
-
查看回收站的数据:
hdfs dfs -lsr /user/root/.Trash/Current
。 -
从回收站中恢复数据:
hdfs dfs -cp /user/root/.Trash/Current/trashData.txt /data.txt
。 -
清空回收站:
hdfs dfs -expunge
。 -
对比没开启回收站和开启了回收站时删除文件的日志:
没开启回收站:
18/04/09 21:35:40 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted /tools ---> 成功删除(对比:回收站)
开启回收站:
Moved: 'hdfs://bigdata111:9000/tools/a.zip' to trash at: hdfs://bigdata111:9000/user/root/.Trash/Current
可以看出回收站其实就是个隐藏目录,删掉的文件其实就是剪切到了那个隐藏目录里。
二、快照(snapshot)
快照其实就是一种备份策略,本质上就是一个 cp 命令。
应用场景:
- 防止用户的错误操作
- 备份
- 实验 / 测试
- 灾难恢复
HDFS 的快照操作:
-
开启快照:
hdfs dfsadmin -allowSnapshot /input
-
创建快照:
hdfs dfs -createSnapshot /input backup_input_1125_01
-
查看快照:
hdfs lsSnapshottableDir
当然查看快照还可以通过我们的 WebConsole 来查看。
-
对比快照:
hdfs snapshortDiff /input backup_1125_01 backup_1125_02
-
恢复快照:
hdfs dfs -cp /input/.snapshot/backup_1125_01/data.txt /input
三、配额(quota)
配额作用:限制目录下的文件的数量和大小。最大的配额是 Long.Max_Value。配额为 1 可以强制目录保持为空。
配额是个管理员命令
-
名称配额:用于设置该目录中能够存放的最多文件(目录)个数。
-
空间配额:用于设置该目录中最大能够存放的文件大小。
示例:
-
设置 /input 目录的名称配额为 3:
hdfs dfsadmin -setQuota 3 /input
-
消除 /input 目录的名称配额:
hdfs dfsadmin -clrQuota /input
-
设置 /input 目录的空间配额为 1M:
hdfs dfsadmin -setSpaceQuota 1M /input
-
清除 /input 目录的空间配额:
hdfs dfs -clrSpaceQuota /input
注意:设置的值一定不能小于 Hadoop 的数据块的大小,1.x 版本的数据块大小是 64M,2.x 版本的数据块大小是 128M,HDFS 保存数据是以数据块为单位分配数据的,小于数据块的大小将不能分配数据。