• HDFS恢复误删操作的方法


    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

  • 相关阅读:
    Python_Excel文件操作
    Python_CRC32
    Python_替换当前目录下文件类型
    Python_os、os.path、os.shutil使用案例
    Python_文件与文件夹操作
    MyBatis/Ibatis中#和$的区别
    遍历listmap 遍历map
    jquery操作select(取值,设置选中)
    ==与===区别(两个等号与三个等号)
    常用map总结
  • 原文地址:https://www.cnblogs.com/cuishuai/p/8288976.html
Copyright © 2020-2023  润新知