恢复HDFS上误删除的文件

这篇具有很好参考价值的文章主要介绍了恢复HDFS上误删除的文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 may
        be configured both on the server and the client. If trash is disabled server side then the client side configuration
        is checked. If trash is enabled on the server side then the value configured on the server is used and the client
        configuration 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 节点,至于文件是否能够恢复,就听天由命了。文章来源地址https://www.toymoban.com/news/detail-518378.html

到了这里,关于恢复HDFS上误删除的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop分布式文件系统-HDFS

    HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。 HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成: - NameNode : 负责执行有关 ` 文件系统命名空间 ` 的操作,例如打开,关闭、

    2024年02月07日
    浏览(52)
  • Hadoop HDFS(分布式文件系统)

    一、Hadoop HDFS(分布式文件系统) 为什么要分布式存储数据 假设一个文件有100tb,我们就把文件划分为多个部分,放入到多个服务器 靠数量取胜,多台服务器组合,才能Hold住 数据量太大,单机存储能力有上限,需要靠数量来解决问题 数量的提升带来的是网络传输,磁盘读写,

    2024年02月06日
    浏览(48)
  • 实验二、熟悉常用的HDFS操作(HDFS JavaAPI之读取/上传/删除文件)

    理解HDFS在Hadoop体系结构中的角色 熟练使用HDFS操作常用的shell命令 熟悉HDFS操作常用的Java API 操作系统:CentOS 8 Hadoop版本:3.3.1 jdk版本:1.8 Java IDE:Eclipse 1. 使用Hadoop命令操作分布式文件系统。 新建目录 在本地和hadoop中分别创建文件夹: 在本地创建目录: Hadoop创建目录: 上

    2023年04月08日
    浏览(58)
  • Hadoop:HDFS--分布式文件存储系统

    目录   HDFS的基础架构 VMware虚拟机部署HDFS集群 HDFS集群启停命令 HDFS Shell操作 hadoop 命令体系: 创建文件夹 -mkdir  查看目录内容 -ls  上传文件到hdfs -put 查看HDFS文件内容 -cat 下载HDFS文件 -get 复制HDFS文件 -cp 追加数据到HDFS文件中 -appendToFile HDFS文件移动 -mv  删除HDFS文件 -rm  

    2024年02月09日
    浏览(56)
  • Hadoop中命令检查hdfs的文件是否存在

    在Hadoop中,可以使用以下命令检查HDFS文件是否存在: hadoop fs -test -e 其中,是要检查的HDFS文件的路径。 如果文件存在,命令返回0;如果文件不存在,命令返回非0值。 以下是一个示例: 示例中,使用hadoop fs -test -e命令检查/user/hadoop/myfile.txt文件是否存在。接着,通过检查命

    2024年02月14日
    浏览(57)
  • Hadoop入门学习笔记——三、使用HDFS文件系统

    视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8 Hadoop入门学习笔记(汇总) 3.1.1. HDFS文件系统基本信息 HDFS和Linux系统一样,均是以 / 作为根目录的组织形式; 如何区分HDFS和Linux文件系统: Linux文件系统以 file:// 作为

    2024年01月16日
    浏览(36)
  • HDFS Hadoop分布式文件存储系统整体概述

    整体概述举例: 包括机架 rack1、rack2 包括5个Datanode,一个Namenode( 主角色 )带领5个Datanode( 从角色 ),每一个rack中包含不同的block模块文件为 分块存储模式 。块与块之间通过replication进行 副本备份 ,进行冗余存储,Namenode对存储的 元数据进行记录 。该架构可以概括为一个 抽象

    2024年02月16日
    浏览(69)
  • hadoop(学习笔记) 4----怎么把文件放到hdfs上?

    怎么把文件放到hdfs上? 首先就是需要将hdfs相关程序启动起来----namenode和datanode namendoe-相当于目录,不进行文件信息的存储 datanode-真正数据存放的位置 但namenode的默认存放位置在tmp文件下,tmp又是临时文件,随时可能被系统清除,我们存放在hdfs上的数据并不安全,所以我们需要修改

    2024年02月04日
    浏览(41)
  • python hdfs远程连接以及上传文件,读取文件内容,删除文件

    目录 一、python连接操作hdfs 1 往hdfs上传文件 2 处理并存储到hdfs 3 读取hdfs上的txt文件 这里使用的是 pip 安装,很方便:      

    2024年02月11日
    浏览(55)
  • Hadoop3教程(三):HDFS文件系统常用命令一览

    hdfs命令的完整形式: 其中subcommand有三种形式: admin commands client commands:如本节重点要讲的dfs daemon commands dfs(文件系统命令),这个是HDFS里,日常使用 最为频繁的一种命令 ,用来在HDFS的文件系统上运行各种文件系统命令,如查看文件、删除文件等。 基本语法: 这俩基本

    2024年02月06日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包