1、通过垃圾箱恢复

使用这种方式的前提是在hdfs上面开启trash功能,默认是没有开启的。interval的值默认为0,单位是分钟。只需要在hadoop的配置文件core-site.xml中添加下面的内容:

<!--Enable Trash -->

<property>

<name>fs.trash.interval</name>

<value>120</value>

</property>

<property>

<name>fs.trash.checkpoint.interval</name>

<value>120</value>

</property>

添加好上述内容后,不需要重启后台程序,直接就会生效。

执行删除操作后,会先将文件移动到当前操作用户的.Trash/Current目录下面。例如:

[root@spark hadoop]# hdfs dfs -rm -r /widow
18/01/15 15:54:49 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 120 minutes, Emptier interval = 120 minutes.
Moved: 'hdfs://spark:9000/widow' to trash at: hdfs://spark:9000/user/root/.Trash/Current

我这里是以root用户进行操作的,所以HDFS上面上的路径/user/root/.Trash/Current

恢复:

#hdfs dfs -mv /user/root/.Trash/Current/widow   /

如果确定要删除的文件,直接将文件或目录drop掉,不放到trash里面,删除的时候使用参数-skipTrash:

#hdfs dfs -rm -r  -skipTrash  /widow

2、通过快照恢复

hadoop从2.1版本后开始支持HDFS快照(SnapShot)功能,

  • 快照创建瞬时性:除去inode的查询时间,算法消耗O(1)复杂度。
  • 只有在对快照修改时才会消耗额外内存:内存使用O(M),M是被修改的文件或者目录数。
  • DataNode的block不被复制:快照文件记录block列表和文件大小。不做数据的拷贝复制。
  • 快照不会对正常HDFS操作产生不利影响:所有的修改都按照时间倒序排序,因此当前数据总能被直接访问到。快照数据是根据与当前数据进行变更部分的差值计算得来的。

创建快照前要先对目录进行检查是否可以创建快照:

#hdfs lsSnapshottableDir

一个可以快照的目录最多可以允许同时65536个快照同时存在,嵌套的可快照目录目前还不允许

管理员操作:

1)允许快照:

#hdfs  dfsadmin  -allowSnapshot  <path>

path即想创建快照的目录的路径。通过上述命令将一个目录变成可快照的目录。

2)创建快照

一般使用普通用户操作,此用户需要有操作可快照目录的权限,最好是该目录的owner。管理员可以进行任何操作。

#hdfs  dfs  -createSnapshot  <path>  [<snapshotName>]

<path>可快照目录的路径,<snapshotName>快照的名称,可以不写,默认会生成一个格式为's'yyyyMMdd-HHmmss.SSS

3)删除快照

# hdfs  dfs -deleteSnapshot  <path>  <snapshotName>

<path>可快照目录的路径 ,<snapshotName>快照的名称

4)重命名快照

# hdfs  dfs  -renameSnapshot  <path>  <oldname>   <newname>

<path>可快照目录的路径,<oldname>老名字, <newname>新名字

5)获取可快照目录的信息

# hdfs  lsSnapshottableDir

6)获取快照的差异报告

#hdfs  snapshotDiff  <path> <fromSnapshot>  <toSnapshot>

<path>可快照目录的路径,<fromSnapshot>源快照名,<toSnapshot>目的快照名

结果:

+ 文件或目录被创建。
- 文件或目录被删除。
M 文件或目录被修改。
R 文件或目录被重命名。

已经创建快照的目录无法被删除,只有删除该目录下的所有快照,才允许删除这个目录。

使用方式:

1)创建快照:

#hdfs dfsadmin  -allowSnapshot  /widow

#hdfs dfs -put  test.txt   /widow

#hdfs  dfs  -createSnapshot  /widow   import-data

将test文件删除:

#hdfs  dfs -rm -r  /widow/test.txt

误删除后就可以使用快照目录进行恢复:

#hdfs  dfs  -cp  -ptopax /widow/.snapshot/import-data/test.txt  /widow

HDFS恢复误删操作的方法的更多相关文章

  1. 读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

    本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2. ...

  2. 如何有效恢复误删的HDFS文件

    HDFS是大数据领域比较知名的分布式存储系统,作为大数据相关从业人员,每天处理HDFS上的文件数据是常规操作.这就容易带来一个问题,实际操作中对重要数据文件的误删,那么如何恢复这些文件,就显得尤为重要 ...

  3. crontab误删操作的恢复与防范

    1.crontab -r 误删操作的恢复 语句解析:crontab -e 编辑 与 crontab -r 删除,由于e, r在键盘上是紧邻的,一旦误操作 crontab -r 将会删除每个用户的定时任 ...

  4. Hadoop中操作HDFS出现异常的解决方法

    Hadoop环境搭建成功后,一般会运行一个小例子,这时候就涉及到了对HDFS文件系统的操作,对于刚开始学习Hadoop的初学者一般会多次的进行name节点的格式化操作,最后导致上传文件会抛出异常,通过 ...

  5. PostgreSQL恢复误删数据

    在Oracle中:删除表或者误删表记录:有个闪回特性,不需要停机操作,可以完美找回记录.当然也有一些其他的恢复工具:例如odu工具,gdul工具.都可以找回数据.而PostgreSQL目前没有闪回特性 ...

  6. git stash 的一次惊心动魄的误删操作

    git stash 的一次惊心动魄的误删操作 简介:行走在互联网最低端的小熊 问题--源起: 小熊和所有混迹在互联网中的开发一样,公司里面用git来管理项目,由于可能经常有几个问题要开发,要频繁在多分 ...

  7. 利用JAVA API远程进行HDFS的相关操作

    学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...

  8. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  9. 三、hdfs的JavaAPI操作

    下文展示Java的API如何操作hdfs,在这之前你需要先安装配置好hdfs https://www.cnblogs.com/lay2017/p/9919905.html 依赖 你需要引入依赖如下 & ...

随机推荐

  1. Java数据类型、赋值、类型转换、==运算

    数据类型 基本数据类型:即int/char等这样的数值类型,共8种 引用类型:除了基本数据类型之外都是引用类型:包括API中的类:如String.File:也包括自定义的类:如Personal.ABC ...

  2. Python3 安装 PyQt5 -pycharm 环境搭建

    执行命令: pip3 install PyQt5 PyQt5+python3+pycharm开发环境配置   1.下载PyQt 官方网站:http://www.riverbankcomputing.c ...

  3. centos rpm包下载地址

    这个是6.5的下载地址,其他版本可以退回目录找相应的版本 http://vault.centos.org/6.5/updates/x86_64/Packages/

  4. TTL与CMOS门电路

    个人观点总结 对TTL和CMOS门电路的认识: 1.构成 TTL集成电路一般都是有三极管(或二极管)和电阻.电容构成,其中三极管(二极管)是作为主要的开关器件 CMOS集成电路一般是由场效应管和电阻. ...

  5. SQL SERVER的锁机制(一)——概述(锁的种类与范围)

    锁定:通俗的讲就是加锁.锁定是 Microsoft SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制. 定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数 ...

  6. 网页登入验证码的实现(java&html)

    前端界面实现(由于验证码是动态获取所以用jsp格式) <%@ page language="java" contentType="text/html; charse ...

  7. Linux 操作系统文件略解

    1.使用tree命令查看根目录的树结构 # tree -L 1 如果没有tree命令,可以使用yum进行安装 # yum -y install tree 执行命令后,即可看到根下一共有19个目录 . ...

  8. OSX10.12搭建IPv6本地环境测试APP

    前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...

  9. MySQL字符集的设置

    Notice:文章基于ubuntu系统而写 1.关于MySQL字符集 MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式( ...

  10. css 的 conic-gradient 学习

    偶然间在微信公众号奇舞周刊上看到了这篇文章<CSS Painting API>,算是对 conic-gradient的初次见面. 后来有空的时候,百度搜了一下,看了这篇文章<CSS神 ...