HDFS 快照

目录

概述

可快照的目录

快照路径

升级到支持快照的HDFS版本

快照操作

管理员操作

允许快照

不允许快照

用户操作

创建快照

删除快照

快照重命名

获取快照目录列表

获取快照差异报告


概述

HDFS 快照(Snapshots)是文件系统在特定时间点生成的只读备份。快照可以在文件系统的一个子分支或整个文件系统上生成。快照的常见使用场景就是数据的备份,以达到容错容灾的目的。

  • 快照的创建是瞬时的:复杂度为O(1)(不包含inode查找时间)。
  • 仅当对快照进行修改时才使用额外的内存:内存使用空间复杂度是O(M),其中M是修改的文件/目录的数量。
  • DataNode里的数据块不会被复制:快照文件只对数据块,数据块的大小进行记录,不产生数据复制。
  • 快照不会对常规HDFS操作产生负面影响:修改是按时间倒序记录的,因此可以直接访问当前数据。快照数据是通过从当前数据中减去修改来计算的。

可快照的目录

要对目录做快照的话,首先得将其设置为可快照的目录。一个可快照的目录能够容纳65,536个同时快照。可快照目录的数量是没有限制的。管理员可以将任何目录设置为可快照的。如果一个目录中有快照,那么在删除所有快照之前,既不能删除该目录,也不能重命名该目录。

快照目录的嵌套目前(版本:3.2.1)是不允许的。换言之,如果一个目录的父/子目录之一是可快照目录,则这个目录不能再被设置为可快照目录。

快照路径

对于可快照的目录,路径下会生成一个.snapshot的目录,用于访问其快照。假设/foo是一个可快照的目录,/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
  • 从快照中复制文件
hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp

请注意,本示例使用了preserve选项来保存时间戳、所有权、权限、acl和XAttrs。

升级到支持快照的HDFS版本

HDFS快照特性引入了一个新的快照路径名,用于与快照交互:.snapshot。当从不支持快照的旧版本HDFS升级时,命名为.snapshot的现有路径需要先被重命名或删除,以避免与保留路径冲突。

快照操作

管理员操作

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

允许快照

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

hdfs dfsadmin -allowSnapshot <path>

不允许快照

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

hdfs dfsadmin -disallowSnapshot <path>

用户操作

本部分描述用户操作。请注意,HDFS超级用户可以执行所有操作,而不需要满足单个操作的权限要求。

创建快照

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

创建可快照目录的快照。该操作需要快照目录的所有者权限。

删除快照

从可快照目录中删除快照。该操作需要快照目录的所有者权限。

hdfs dfs -deleteSnapshot <path> <snapshotName>

快照重命名

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

hdfs dfs -renameSnapshot <path> <oldName> <newName>

获取快照目录列表

获取当前用户拥有快照权限的所有可快照目录。

hdfs lsSnapshottableDir

获取快照差异报告

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

hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>

注意,snapshotDiff可以用来获取两个快照之间的差异报告,或者快照与目录的当前状态之间的差异报告。用户可以使用“.”来表示当前状态。

+表明这个文件/目录被创建
-表明这个文件/目录被删除
M表明这个文件/目录被修改
R表明这个文件/目录被重命名

 

重命名项表示文件/目录已被重命名,但仍然位于相同的目录下。如果文件/目录被重命名到目录之外,则报告为已删除。从目录外部重命名的文件/目录标识为新创建的。

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

R. /foo -> /foo2
M. /foo/bar

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值