如何恢复在HDFS中删除的文件

       在大数据平台中,hdfs里面如果误删除文件后,我们需要对文件进行恢复,但是如果没有做相关配置,或者预先做设置,则会导致灾难性的后果,o(╥﹏╥)o

       我们可以通过下面几种方式来恢复误删除文件:

       在垃圾回收站中恢复:hdfs中提供类似其他文件系统中的垃圾回收站的功能,被删除的文件会被移动到该回收站中,也就是有的同学想要腾出空间,使用了hadoop fs -rmr 文件后,hdfs的空间还是没有腾出来,这就是被移动到了回收站,文件没有被清除,需要我们手动的使用删除命令去删除回收站的文件,才能达到效果。要启用垃圾回收箱的功能,我们需要注意的是需要我们手动在hdfs-site.xml中配置如下信息:


    fs.trash.interval
    1440
    
      	该值为设置放入回收站后保存的时长,分钟数
    

         如果不配置则不会启用,使用hadoop fs -rmr后直接删除文件。

         看看下面的测试:

        删除的文件被移动到了Trash中了,可以使用mv将Trash中的文件恢复到想要恢复的目录。参见下图:

       注:要删除的文件在回收站中只能保存配置的清除时长,一定要注意。更多大数据博文请关注网址:www.hotbigdata.com

       通过快照恢复数据:在hadoop2.x版本中,可以使用hdfs快照对hdfs的整个文件系统,或者是某个目录创建镜像。如果在对应做了镜像的目录中误删除了文件,则可以通过镜像对删除的文件进行恢复。

       通过上面的命令hadoop dfsadmin -allowSnapshot 文件夹 启用快照功能,使用hadoop fs -createSnapshot 文件夹 快照名,来创建一个快照,该快照存储在被快照的目录下隐藏文件夹.snapshot下,以快照名存储,通过webhdfs查看hotbigdata-snapshot文件夹中备份的文件:

       可以观察一下在该快照目录下,我们发现和我们备份的数据相同的文件及内容,这样我们在原目录中删除错了文件后,即可以将快照目录中的文件通过hadoop fs -cp 源文件 目的文件夹命令来恢复文件。

       这个方法比通过垃圾回收站有优势在于,不必受回收站的自动删除时长限制。而且可以对整个文件系统、或者针对关键性比较重要的文件夹进行备份。

       最后一个方案通过打时间差,截断编辑日志:当在hdfs中没有配置回收站和快照,误删除了文件,使用rmr删除了,可以立即将hadoop停掉,因为我们提交删除命令的时候,会将命令提交给NameNode,而不会直接和DataNode打交道,而NameNode获取到命令后,会将命令存储在edits文件中,追加到后面,然后再将删除命令分发给DataNode上,我们可以打开三台 journal 的日志文件里面:

        最后的操作命令即存储到edits_inprogress_0000000000000000138文件中,该文件存储的是二进制,我们需要手动的把该文件转变为可识别的文件,使用命令:hdfs oev -i edits_inprogress_0000000000000000138 -o edits_inprogress_0000000000000000138.xml ,这样我们可以打开138.xml查看内容,如下:

        打开可以看到里面是OP_DELETE操作的是/zookeeper.out文件,我们可以将最后这个删除掉,然后再将该xml还原为二进制edits,命令:hdfs oev -i edits_inprogress_0000000000000000138.xml -o edits_inprogress_0000000000000000138 -p binary,这样还原了编辑日志文件,然后启动整个hdfs,看看文件是否还存在吧,O(∩_∩)O哈哈~,我没有测试成功过,有可能笔者的集群IO比较好的缘故吧。

版权声明:本文为橘子学院原创文章,转载请标记出处,谢谢! http://www.hotbigdata.com/article/4

你可能感兴趣的:(如何恢复在HDFS中删除的文件)