被误删的HDFS文件如何有效恢复
作者:互联网
1.回收站机制恢复
HDFS的回收站机制默认是关闭的,需要我们在配置文件core-site.xml中配置一些参数
2.快照机制恢复
HDFS快照是文件系统的只读时间点副本。可以在文件系统的子树或整个文件系统上创建快照。一个快照是一个全部文件系统、或者某个目录在某一时刻的镜像。
为目录/bigdata/snapshot创建名为snapshot-test的快照:
创建快照: hdfs dfsadmin -allowSnapshot /bigdata/snapshot hdfs dfs -createSnapshot /bigdata/snapshot snapshot-test
快照机制进行文件的恢复(要用cp命令,不能用mv,因为快照在这里是只读的):
hdfs dfs -cp /bigdata/snapshot/.snapshot/snapshot-test/test.txt /bigdata/snapshot
3.编辑日志(edits)恢复
文件的恢复存在以下几种情况:(主要和集群的繁忙状态有很大关系。而且通过这种方式恢复误删文件的代价很高)
1)全部恢复
2)部分恢复
3)完全没有回复
NameNode在收到删除命令时,会先将这个命令写到edits中,然后会告诉DataNode执行真正的文件删除操作。所以我们在误删文件后,需要做的是立刻停止NameNode和DataNode节点,阻止删除命令的执行。然后找到执行删除操作发生时间对应的edits日志。
HDFS命令将这个文件转换成可读的xml形式
hdfs oev -i edits_inprogress_0000000007798347582 -o edits_inprogress_0000000007798347582.xml
在edits_inprogress_0000000007798347582.xml中查找删除/bigdatalearnshare/testlog下文件stats.json的命令记录:
<RECORD> <OPCODE>OP_DELETE</OPCODE> <DATA> <TXID>7798417530</TXID> <LENGTH>0</LENGTH> <PATH>/bigdata/snapshot/test.txt</PATH> <TIMESTAMP>1651136866754</TIMESTAMP> <RPC_CLIENTID>3c15a744-f3ba-4612-a69d-d48a9fb69161</RPC_CLIENTID> <RPC_CALLID>139622367</RPC_CALLID> </DATA> </RECORD>
OP_DELETE代表删除操作,可以将这个标记修改为安全的操作(如OP_SET_PERMISSIONS),如果这个命令在最后,可以直接删除,然后保存。再将修改后的编辑日志转换成计算机能够识别的格式:
hdfs oev -i edits_inprogress_0000000007798347582.xml -o edits_inprogress_0000000007798347582 -p binary
最后再启动NameNode和DataNode节点,查看误删文件的恢复情况。
标签:xml,HDFS,快照,文件,bigdata,误删,edits,snapshot,inprogress 来源: https://www.cnblogs.com/zyanrong/p/16203732.html