在hdfs上,所有的数据文件都会有备份的操作,主要是避免文件被删除。但是万一出现下面的情况怎么办呢?
原本规划的/home/user/school/这个目录下是专门用来收集学校相关的数据,此时业务中有人误操作了,把交通相关的数据写入到这个school里面来了,此时这里的数据就乱了,该怎么办?
这里的话,我们可能就会想到有没有可能恢复到之前某个时间段的状态,然后重新调整程序把数据收集模块进行纠正了。
这个方案就是这篇文章给大家介绍的快照功能。
在hdfs上,快照就是对hdfs文件进行某个时间点的一个固定,如果需要恢复的话,则直接从快照里面进行恢复即可。下面给大家演示一下:
一、开启快照功能
./hdfs dfsadmin -allowSnapshot /home/pubserver/users
执行开启快照的命令后,出现如下提示就代表成功了。
Allowing snaphot on xxxx succeeded
二、创建一个快照
./hadoop fs -createSnapshot /home/pubserver/users
此时会在对应的目录下生成一个.snapshot的文件夹。但是我们使用正常的命令是看不到的,如图
但是我们直接输入对应的快照路径就能看到文件,如图:
三、恢复快照
1、首先我们查看下对应的快照
./hadoop fs -ls /home/pubserver/users/.snapshot/s20230210-021004.387
2、在原目录里面删除runa.sh文件
./hadoop fs -rmr /home/pubserver/users/runa.sh
3、恢复快照里面的runa.sh文件
./hadoop fs -cp /home/pubserver/users/.snapshot/s20230210-021004.387/runa.sh /home/pubserver/users/
可以看到被恢复了。
备注:
1、这里恢复的话需要使用cp命令,不能使用mv,因为快照里面的文件是只读权限,如果使用mv的话,还需要再进行授权,所以这里使用mv即可。
2、创建了快照之后,这里不会马上把所有的文件都固定下来,而是在新的操作的时候才会创建。
3、这里还有其他的一些命令如下:
1)禁用某个目录的快照功能
./hdfs dfsadmin -disallowSnapshot ${路径}
2)创建快照的时候指定快照名称
./hdfs dfs -createSanpshot 路径 名称
3)给快照重新命名
./hdfs dfs -renameSnapshot 路径 旧名称 新名称
4)列出当前用户已创建快照的所有目录
./hdfs lsSnapshottableDir
5)对两个快照进行比对不同之处
./hdfs snapshotDiff 路径1 路径2
6)删除某个快照
hdfs dfs -deleteSnapshot <path> <snapshotName>
还没有评论,来说两句吧...