HDFS快照 | HDFS Snapshots

HDFS快照

概况

HDFS快照是文件系统的只读时间点副本。快照可以在文件系统的子树上或整个文件系统上进行。快照的一些常见用例是数据备份,防止用户错误和灾难恢复。

HDFS快照的实施非常高效:

  • 快照创建是即时的:成本为O(1),不包括索引节点查找时间。
  • 额外内存仅在相对于快照进行修改时使用:内存使用量为O(M),其中M是修改的文件/目录的数量。
  • datanodes中的块不被复制:快照文件记录块列表和文件大小。没有数据复制。
  • 快照不会对常规HDFS操作产生不利影响:以反向时间顺序记录修改,以便可以直接访问当前数据。快照数据是通过从当前数据中减去修改来计算的。

快照目录

一旦目录设置为snapshottable,可以在任何目录上拍摄 快照。快照表目录能够容纳65,536个同步快照。快照表目录的数量没有限制。管理员可以将任何目录设置为快照。如果快照可用目录中有快照,则在删除所有快照之前,既不能删除目录,也不能将其重命名。

当前不允许嵌套快照可用目录。换句话说,如果某个目录的祖先/后代之一是快照表目录,则不能将该目录设置为snapshottable。

快照路径

对于快照表目录,路径组件“.snapshot”用于访问其快照。假设/foo是一个snapshottable目录 /foo/bar是在一个文件/目录/foo,和/foo具有快照S0。然后,路径

/foo/.snapshot/s0/bar
指的是 / foo / bar 的快照副本。通常的API和CLI可以使用“.snapshot”路径。以下是一些例子。
  • 列出快照表目录下的所有快照:
    hdfs dfs -ls /foo/.snapshot
  • 列出快照s0中的文件:
    hdfs dfs -ls /foo/.snapshot/s0
  • 从快照s0复制文件:
    hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar/tmp

    请注意,此示例使用preserve选项来保留时间戳,所有权,权限,ACL和XAttrs。

使用快照升级到HDFS版本

HDFS快照功能引入了用于与快照进行交互的新保留路径名:.snapshot。从不支持快照的旧版HDFS进行升级时,现有的名为.snapshot的路径需要先重命名或删除,以避免与保留路径冲突。有关 更多信息,请参阅HDFS用户指南中的升级部分 。

快照操作

管理员操作

本节中描述的操作需要超级用户权限。

允许快照

允许创建目录的快照。如果操作成功完成,则该目录变为快照可见。

  • 命令:
    hdfs dfsadmin -allowSnapshot <path>
  • 参数:
    路径快照表目录的路径。

另请参见相应的Java API 无效allowSnapshot(路径路径)HdfsAdmin

禁止快照

禁止要创建的目录的快照。在禁用快照之前,必须删除目录的所有快照。

  • 命令:
    hdfs dfsadmin -disallowSnapshot <path>
  • 参数:
    路径快照表目录的路径。

另请参见相应的Java API 无效disallowSnapshot(路径路径)HdfsAdmin

用户操作

本节介绍用户操作。请注意,HDFS超级用户可以在不满足个别操作中的权限要求的情况下执行所有操作。

创建快照

创建快照表目录的快照。此操作需要snapshottable目录的所有者权限。

  • 命令:
    hdfs dfs -createSnapshot <path> [<snapshotName>]
  • 参数:
    路径快照表目录的路径。
    snapshotName 快照名称,它是一个可选参数。省略时,使用格式为”syyyyMMdd-HHmmss.SSS’的时间戳生成默认名称 ,例如“s20130412-151029.033”。

另请参见相应的Java API 路径createSnapshot(路径路径)路径createSnapshot(路径路径字符串snapshotName)文件系统。快照路径在这些方法中返回。

删除快照

从快照表目录中删除快照。此操作需要snapshottable目录的所有者权限。

  • 命令:
    hdfs dfs -deleteSnapshot <path> <snapshotName>
  • 参数:
    路径快照表目录的路径。
    snapshotName快照名称。

另请参见相应的Java API 无效deleteSnapshot(路径路径字符串snapshotName)文件系统

重命名快照

重命名快照。此操作需要snapshottable目录的所有者权限。

  • 命令:
    hdfs dfs -renameSnapshot <path> <oldName> <newName>
  • 参数:
    路径快照表目录的路径。
    使用oldName旧的快照名称。
    新名字新的快照名称。

另请参见相应的Java API 无效renameSnapshot(路径路径,字符串使用oldName,字符串newName)将文件系统

获取快照目录列表

获取当前用户有权拍摄快照的所有快照表目录。

  • 命令:
    hdfs lsSnapshottableDir
  • 参数:无

另请参见相应的Java API SnapshottableDirectoryStatus [] getSnapshottableDirectoryListing()DistributedFileSystem

获取快照差异报告

获取两个快照之间的差异。此操作需要两个快照中的所有文件/目录的读取权限。

  • 命令:
    hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
  • 参数:
    路径快照表目录的路径。
    fromSnapshot开始快照的名称。
    toSnapshot结束快照的名称。
  • 结果:
    +文件/目录已创建。
    - 文件/目录已被删除。
    M文件/目录已被修改。
    R文件/目录已被重命名。

一个RENAME条目表示一个文件/目录已被重命名,但仍然是相同的snapshottable目录下。如果将文件/目录重命名为快照目录外部,则会将其报告为已删除。从snapshottble目录外部重命名的文件/目录将被报告为新创建。

快照差异报告不保证相同的操作顺序。例如,如果我们将目录“/ foo”重命名为“/ foo2”,然后将新数据附加到文件“/ foo2 / bar”,则差异报告将为:

    R. / foo  - > / foo2
    M. / foo / bar
    
也就是说,重命名前的原始路径(上例中的 “/ foo / bar” )会报告重命名目录下文件/目录的更改。

快照部署操作实例

操作实例见我的另一篇文章 HDFS创建全局快照

参考:
[1] HDFS Snapshots
http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值