其他分享
首页 > 其他分享> > 被误删的HDFS文件如何有效恢复

被误删的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