1. 通过回收站恢复

HDFS 为我们提供了垃圾箱的功能,也就是说当我们执行 hadoop fs -rmr xxx 命令之后,文件并不是马上被删除,而是会被移动到 执行这个操作用户的 .Trash 目录下,等到一定的时间后才会执行真正的删除操作。看下面的例子:

$ hadoop fs -rmr /user/iteblog/test.txt
Moved: 'hdfs://iteblogcluster/user/iteblog/test.txt' to trash at: hdfs://iteblogcluster/user/iteblog/.Trash/Current
$ hadoop fs -ls /user/iteblog/.Trash/Current/user/iteblog
-rw-r--r--   3 iteblog iteblog  103 2017-05-15 17:24 /user/iteblog/.Trash/Current/user/iteblog/test.txt
$ hadoop fs -mv /user/iteblog/.Trash/Current/user/iteblog/test.txt /user/iteblog/
$ hadoop fs -ls /user/iteblog/test.txt
-rw-r--r--   3 iteblog iteblog  103 2017-05-15 17:24 test.txt

从上面的例子中可以看出,在我们删了 test.txt 文件之后,文件被移到 /user/iteblog/.Trash/Current/user/iteblog/test.txt 路径下,如果这个操作属于误操作,我们则可以到回收站找回这个文件并直接 mv 回原来的目录,即可恢复之前的数据。不过使用这个功能的前提是我们配置了 fs.trash.interval 参数,默认是 0,代表不启用垃圾箱功能。

<property><name>fs.trash.interval</name><value>1440</value><description>Number of minutes after which the checkpoint gets deleted. If zero, the trash feature is disabled. This option maybe configured both on the server and the client. If trash is disabled server side then the client side configurationis checked. If trash is enabled on the server side then the value configured on the server is used and the clientconfiguration value is ignored.</description>
</property>

上面的配置是说:文件会被删除会保留到 .Trash 目录下,时间为一天,超过这个时间,被删除的文件就会真正被删除。所以为了避免误删除操作,强烈建议开启 HDFS 回收站功能。

2. 通过快照恢复

Hadoop 从 2.1.0 版本开始提供了 HDFS 快照(SnapShot)功能。一个快照是一个全部文件系统、或者某个目录在某一时刻的镜像。利用快照可以防止用户错误操作,管理员可以通过滚动的方式周期性设置一个只读的快照,这样就可以在文件系统上有若干份只读快照。如果用户意外地删除了一个文件,就可以使用包含该文件的最新只读快照来进行恢复。下面我们来实操说明如何利用快照恢复误删除的文件:

  1. 创建目录和文件

    $ hadoop fs -mkdir /user/iteblog/important/
    $ echo "important data" | hadoop fs -put - /user/iteblog/important/important-file.txt
    $ hadoop fs -cat /user/iteblog/important/important-file.txt
    important data
    

​ 在上面我们创建了/user/iteblog/important/目录,里面有一个文件 important-file.txt ,假设这个文件是非常重要的。

  1. 创建快照

    $ hadoop dfsadmin -allowSnapshot /user/iteblog/important
    $ hadoop fs -createSnapshot /user/iteblog/important important-snapshot
    

    现在我们已经为 important 目录创建了快照,名称为 important-snapshot。

  2. 误删除操作
    因为开启了快照功能,我们无法删除已经创建快照的目录(/user/iteblog/important),但是我们依然可以删除这个目录下的文件:

    $ hadoop fs -rm -r /user/iteblog/important/important-file.txt
    

​ 现在这个重要的文件被我们误删除了!

  1. 恢复文件
    由于我们开启了快照,所以我们可以从快照中恢复这个文件,步骤如下:

    $ hadoop fs -ls /user/iteblog/important/.snapshot/
    $ hadoop fs -cp /user/iteblog/important/.snapshot/important-snapshot/important-file.txt /user/iteblog/important/
    $ hadoop fs -cat /user/iteblog/important/important-file.txt
    important data
    

通过上面几步,我们就恢复了误删除的重要文件。

3. 通过编辑日志恢复

如果你的 Hadoop 集群没有开启回收站功能,也没有对重要的数据创建快照,这时候如果有人将一份非常重要的数据误删除了,那我们如何恢复这些数据?答案是通过修改编辑日志,但是**通过这种方法不一定能恢复已经被删除的文件,或者只能恢复一部分被删除的文件,也可能恢复全部误删除的数据,这个和你的集群繁忙状态有很大的关系。**而且通过这种方式恢复误删除的文件代价很高,风险很大,需要谨慎使用。下面介绍通过这种恢复删除数据的步骤。

  1. 删除文件

    $ hadoop fs -rmr -skipTrash /user/iteblog/important-file.txt
    

    由于上面删除操作使用了 -skipTrash 参数,这意味着这个文件会被直接删除,并不会先放到回收站。

  2. 恢复数据
    NameNode 在收到删除命令时,会先将这个命令写到编辑日志中,然后会告诉 DataNode 执行真正的文件删除操作。所以我们需要做的是立刻停止 NameNode 和 DataNode 节点,阻止删除命令的执行。然后找到执行 rmr 操作发生时间对应的编辑日志,假设是 edits_inprogress_0000000000000001512,这个文件是二进制的形式,我们需要通过 HDFS 自带的命令将这个文件转换成可读的形式,如下:

    $ hdfs oev -i edits_inprogress_0000000000000001512 -o edits_inprogress_0000000000000001512.xml
    

    上面执行的结果是二进制的编辑日志被转换成我们人类可读的xml格式的文件,我们找到执行删除 important-file.txt 文件的命令记录:

    <RECORD><OPCODE>OP_DELETE</OPCODE><DATA><TXID>1624</TXID><LENGTH>0</LENGTH><PATH>/user/iteblog/important-file.txt</PATH><TIMESTAMP>1515724198362</TIMESTAMP><RPC_CLIENTID>34809cac-a89f-4113-98b5-10c54d7aac1a</RPC_CLIENTID><RPC_CALLID>1</RPC_CALLID></DATA>
    </RECORD>
    

    OP_DELETE 这个标记就是删除操作,我们将这个标记修改成比较安全的操作(比如OP_SET_PERMISSIONS),如果这个命令是在最后,可以直接删除,然后保存。再将修改后的编辑日志转换成计算机能够识别的格式:

    $ hdfs oev -i edits_inprogress_0000000000000001512.xml -o edits_inprogress_0000000000000001512 -p binary
    

最后启动 NameNode 和 DataNode 节点,至于文件是否能够恢复,就听天由命了。

恢复HDFS上误删除的文件相关推荐

  1. 如何恢复 Linux 上删除的文件

    转自:http://blog.csdn.net/chinalinuxzend/article/details/2591694 如何恢复 Linux 上删除的文件 来源:developerWorks 中 ...

  2. 如何将计算机删除的程序还原,如何去恢复电脑上误删的文件?简单恢复

    原标题:如何去恢复电脑上误删的文件?简单恢复 电脑文件误删怎么恢复?相信很多的人都有过这个烦恼,因为有的时候,我们会在清理我们的垃圾的时候将我们的电脑文件给误删了,误删了之后,我们便会想要找回它.那么 ...

  3. Java在hdfs上创建新文件夹遇错误:Permission denied: user=atguigu, access=READ_EXECUTE, inode=“/tmp“:root:supe

    在IDEA里编写测试代码用于在HDFS上创建新文件夹遇到以下错误: Permission denied: user=atguigu, access=READ_EXECUTE, inode=" ...

  4. 电脑上删除的文件可以恢复吗 如何恢复电脑上删除的文件

    电脑早已走进千家万户,成为我们不可或缺的家庭设备,我们用电脑来学习.工作,处理各种数据.在使用电脑处理数据时,可能会失误操作,删除重要文件.那么,电脑上删除的文件可以恢复吗,如何恢复电脑上删除的文件. ...

  5. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用

    1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...

  6. Centos7.5 -Vim编辑器和恢复ext4下误删除的文件-Xmanager工具

    本节所讲内容: 5.1 vim的使用 5.2 实战:恢复ext4文件系统下误删除的文件 5.3 实战:使用xmanager等远程连接工具管理Linux 5.1 vim主要模式介绍,vim命令模式. 5 ...

  7. android手机文件误删除恢复软件,被误删除的文件用安卓手机数据恢复软件怎么找回...

    被误删除的文件用安卓手机数据恢复软件怎么找回 电脑是我们每天都要用的工具,不管是在工作中还是在家庭生活中,电脑里面也存存了不少重要的信息,但是一不小心或者不经意间就把重要文件删除了的情况时有发生,一旦 ...

  8. linux删除 0 字节文件,如何恢复 Linux 上删除的文件

    要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的,以及如何定位并恢复数据.本文从数据恢复的角度,着重介绍了 ext2 文件系统中使用的一些基本概念和重要数据结构,并通过几个实例介绍了如何手工 ...

  9. 如何恢复 Linux 上删除的文件:ext2

    要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的,以及如何定位并恢复数据.本文从数据恢复的角度,着重介绍了 ext2 文件系统中使用的一些基本概念和重要数据结构,并通过几个实例介绍了如何手工 ...

最新文章

  1. 记一次金士顿DT100 G3 32G修复
  2. Qt中QAbstractTableModel、QItemDelegate的联合使用
  3. 一个计算机爱好者的不完整回忆(二十八)关于计算机书籍
  4. unity 学习记录
  5. 2013年最新省市区三级联动mysql数据库_使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例...
  6. html 模糊匹配,CSS 属性选择器 模糊匹配的使用
  7. Kaggle 大师访谈:我的 ML 竞赛之旅
  8. 系统性能测试实施流程
  9. win10浏览器闪退_win10自带浏览器闪退解决方法
  10. 如何在计算机上增加一个磁盘分区,电脑怎么添加硬盘分区
  11. 服务器运维辐射,【服务器辐射】服务器辐射大吗_服务器防辐射_服务器辐射距离_佰佰安全网...
  12. SaltStack数据系统
  13. t420i升级固态硬盘提升_surface laptop3固态升级指南——拆机、换固态硬盘、重装系统...
  14. matlab 矩阵 矢量场,Matlab将矢量转换为矩阵(Matlab turning vectors into a matrix)
  15. Allegro通孔电气焊盘
  16. 解线性方程组之LU分解算法实现
  17. 计算机学术英语演讲,学术英语写作与演讲
  18. Mybatis源码分析与技术原理
  19. 今天我是如何10分钟完成30万售后单问题分类的
  20. 游戏服务器设计之观察者模式

热门文章

  1. 多核心Linux内核路径优化的不二法门之-多核心平台TCP优化
  2. 您的家里需要这样一套智能影院!
  3. 2020.11.10丨BSA基础知识及产品介绍
  4. rct与宋婷合作作品Nüwa女娲以38万元在永乐NFT专场拍卖会成交
  5. MyBatis的sql动态传入表名和字段名,并判断是否为空
  6. Android 自定义View中坐标点的理解学习(一)
  7. 《大话设计模式》之--第17章 在NBA我需要翻译----适配器模式
  8. make工具及makefile文件
  9. 第七篇:面向对象高级
  10. unity中暂停游戏