HDFS快照

原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

概述

HDFS快照是文件系统在某个时刻的只读副本。快照可以是文件系统的一个子树,也可以是整个文件系统。快照的一些通用用途包含数据备份,出错保护和容灾恢复。

HDFS快照的实现是高效的:

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

可以快照的目录

如果目录设置为可以快照的,那么就可以对该目录进行快照操作。一个可以快照的目录可以允许同时存在65536个快照。而对可快照目录数的限制则不存在。管理员可以设置任意目录为可快照的。如果一个可快照目录已经存在快照,那么该目录不能被删除,也不能被重命名,除非将其中所有的快照都先删除。

嵌套的可快照目录目前还不允许。换句话说,如果一个祖先目录或者子孙目录已经是可快照的目录,那么该目录不可以再设置为可快照的目录。

快照路径

对于一个可快照的目录,路径组件“.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
    
  • 从快照s0拷贝一个文件:
    hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp
    

注意一下这个例子使用了保留选项来保留timestamps,ownership,permission,ACL和XAttrs。

使用快照升级HDFS的版本

HDFS快照的特种引入一个新的保留路径.snapshot,用来和快照交互。当从一个老版本升级HDFS时,如果已经存在.snapshot目录,那么需要先删除或者重命名以避免冲突。详细参见HDFS的一些概念

快照操作

管理员操作

下面的操作需要超级用户权限。

允许快照

允许创建一个目录的快照。如果该操作成功,那么目录变为可快照的。

  • 命令:

    hdfs dfsadmin -allowSnapshot <path>
    
  • 参数:
    参数 描述
    path 可快照的目录路径。

可以参考对应的Java API,HdfsAdmin类下面的void allowSnapshot(Path path)方法。

禁止快照

禁止创建一个目录的奎照。在禁止快照前,该目录下已有的快照需要被删除。

  • 命令:

    hdfs dfsadmin -disallowSnapshot <path>
    
  • 参数:
    参数 描述
    path 可快照的目录路径。

可以参考对应的Java API,HdfsAdmin类下面的void disallowSnapshot(Path path)方法。

用户操作

这一部分描述用户操作。注意HDFS超级用户可以进行任何操作。

创建快照

为一个可快照的目录创建一个快照。该操作需要可快照目录的owner权限。

  • 命令:

    hdfs dfs -createSnapshot <path> [<snapshotName>]
    
  • 参数:
    参数 描述
    path 可快照的目录路径。
    snapshotName 快照名称,这是个可选参数。如果没有提供,系统会生成一个默认的名字,该名字使用时间戳,按照格式“'s'yyyyMMdd-HHmmss.SSS”来生成,例如“s20130412-151029.033”。

可以参考对应的Java API,FileSystem类下面的Path createSnapshot(Path path)方法和Path createSnapshot(Path path, String snapshotName)方法。这些方法会返回快照的路径。

删除快照

从一个可快照的目录删除一个快照。该操作需要可快照目录的owner权限。

  • 命令:

    hdfs dfs -deleteSnapshot <path> <snapshotName>
    
  • 参数:
    参数 描述
    path 可快照的目录路径。
    snapshotName 快照名称。

可以参考对应的Java API,FileSystem类下面的void deleteSnapshot(Path path, String snapshotName)方法。

重命名快照

重命名一个快照。该操作需要可快照目录的owner权限。

  • 命令:

    hdfs dfs -renameSnapshot <path> <oldName> <newName>
    
  • 参数:
    参数 描述
    path 可快照的目录路径。
    oldName 老快照名
    newName 新快照名

可以参考对应的Java API,FileSystem类下面的void renameSnapshot(Path path, String oldName, String newName)方法。

获取可快照目录列表信息

获取当前用户有权限创建快照的所有可快照目录的列表。

  • 命令:

    hdfs lsSnapshottableDir
    
  • 参数:无

可以参考对应的Java API,DistributedFileSystem类下面的SnapshottableDirectoryStatus[] getSnapshottableDirectoryListing()方法。

获取快照的差异报告

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

  • 命令:

    hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
    
  • 参数:
    参数 描述
    path 可快照的目录路径。
    fromSnapshot 对比源快照名。
    toSnapshot 对比目的快照名。
  • 结果:
    状态 描述
    + 文件或目录被创建。
    - 文件或目录被删除。
    M 文件或目录被修改。
    R 文件或目录被重命名。

一个RENAME的项表明一个文件或目录被重命名过,但是仍在同一个可快照目录下。一个文件或目录如果被重命名到可快照目录外面,那么被认为删除。一个文件或目录如果从可快照目录外重命名到可快照目录内,那么会被认为是新建。

快照差别报告不保证操作顺序。举例来说,如果我们重命名一个目录“/foo”为“/foo2”,然后添加一个新文件为“/foo2/bar”,那么差别报告会是:

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

这种顺序不保证体现在,在重命名目录下的文件或目录变动会被认为是在目录重命名前完成的(比如上面的例子)。可以参考对应的Java API,DistributedFileSystem类下面的SnapshotDiffReport getSnapshotDiffReport(Path path, String fromSnapshot, String toSnapshot)方法。

时间: 2025-01-20 12:45:18

HDFS快照的相关文章

独家 | 一文读懂Hadoop(二)HDFS(下)

5.1 用户命令 hadoop集群用户的常用命令. 5.1.1 classpath 打印获取Hadoop jar和所需库所需的类路径.如果无参数调用,则打印由命令脚本设置的类路径,可以在类路径条目中包含通配符.其他选项在通配符扩展后打印类路径或将类路径写入jar文件的清单.后者在不能使用通配符且扩展的类路径超过支持的最大命令行长度的环境中非常有用. 5.1.2 dfs HDFS允许以文件和目录的形式组织用户数据.它提供了一个称为FS shell的命令行界面,允许用户与HDFS中的数据交互.此命令

独家 | 一文读懂Hadoop(二)HDFS(上)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识.2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值. 读者可以通过阅读"一文读懂Hadoop"系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文

Hadoop如何通过IT审计(下)?

内容: 1. 决策摘要 2. IT和企业风险环境 3. 越来越多的IT规范 4. Hadoop的职能 a. 安全 b. 灾难恢复和业务连续性 c. 资料管理:监督和法律要求 5. 额外要求 6. 关键要点 接上文: 在企业IT中,与植根于存储环境的企业数据管理相关的风险控制和法规遵从是非常普遍的.在该情况下,一些基本功能可以直接应用于数据之上.这些基本功能包括: 1. 数据保护.在主要存储设备或更多得是在二级存储设备上创建并维护备份文件,以保证导致数据丢失或损坏之后的恢复. 2. 本地数据复制.

GFS, HDFS, Blob File System架构对比

分布式文件系统很多,包括GFS,HDFS,淘宝开源的TFS,Tencent用于相册存储的TFS (Tencent FS,为了便于区别,后续称为QFS),以及Facebook Haystack.其中,TFS,QFS以及Haystack需要解决的问题以及架构都很类似,这三个文件系统称为Blob FS (Blob File System).本文从分布式架构的角度对三种典型的文件系统进行对比. 我们先看GFS和HDFS.HDFS基本可以认为是GFS的一个简化版实现,二者因此有很多相似之处.首先,GFS和

HBase伪分布式安装(HDFS)+ZooKeeper安装+HBase数据操作+HBase架构体系

HBase1.2.2伪分布式安装(HDFS)+ZooKeeper-3.4.8安装配置+HBase表和数据操作+HBase的架构体系+单例安装,记录了在Ubuntu下对HBase1.2.2的实践操作,HBase的安装到数据库表的操作.包含内容1.HBase单例安装2.HBase伪分布式安装(基于Hadoop的HDFS)过程,3.HBase的shell编程,对HBase表的创建,删除等的命令,HBase对数据的增删查等操作.4.简单概述了Hbase的架构体系.5.zookeeper的单例安装和常用操

Hadoop危机?替代HDFS的8个绝佳方案

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:不适合低延迟数据访问.无法高效存储大量小文件.不支持多用户写入及任意修改文件. Apache软件基金会成立的时候,HDFS就一直在想办法提高它的性能和可用性,坦白说,这也许对试点项目.非常规项目.要求不严格的大环境中比较适用,但是对于某些Hadoop用户来说,他们对于性能.可用

HDFS简介及用C语言访问HDFS接口操作实践

一.概述 近年来,大数据技术如火如荼,如何存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有非常广泛的应用. Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是Hadoop项目的核心子项目,是一种具有高容错性.高可靠性.高可扩展性.高吞吐量等特征的分

HADOOP1.X中HDFS工作原理

简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② 运行在廉价的机器上. ③ 适合大数据的处理.多大?多小?HDFS默认会将文件分割成block,64M为1个block,不足一64M的就以实际文件大小为block存在D

HDFS基本原理及数据存取实战

--------------------------------------------------------------------------------------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51622547 作者:朱培 --------------------------------------------------