热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDFS快照

ApacheHadoop2.9.0


Apache Hadoop 2.9.0

请查看原文:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

概述:

HDFS快照是HDFS文件系统某个时间点的只读副本。快照可以是整个文件系统的快照,也可以是一个文件系统的子目录(subtree)。数据备份、保护数据以防止用户错误以及灾难恢复等都需要用到快照。

HDFS快照实现是非常高效的:

   快照是可以即时创建的:除去索引节点的查找时间代价是O(1).

   只有在修改也被应用到快照上的时候才需要额外的存储:存储代价是O(M)M是指修改的文件或者目录数目。

   数据节点上的文本块是不会被拷贝的:快照文件只是记录文本块列表以及文件大小,并不真正拷贝数据。

   快照并不影响常规的HDFS操作:修改可以按照修改相反的顺序记录下来,这样当前的数据可以直接被访问。当前的数据加上相应的修改才能得到快照数据。

Snapshottable(可快照) 目录

可以为任意设置为snapshottable的目录创建快照。一个snapshottable目录可以同时存放65,536份快照,并且快照目录的数目没有限制。管理员可以指定任意目录为snapshottable,但是只要在一个snapshottable目录下有快照,这个目录就不能被删除或者重名字,只有当所有快照都被删除时才能删除这个snapshottable目录或者重命名这个目录。

快照路径

针对一个snapshottable目录,“.snapshot”路径用来指定存放的快照。例如:/foo是一个snapshottable目录,/foo/bar是一个 /foo下的一个文件/目录,并且/foo有一个快照s0,那么路径/foo/.snapshort/s0/bar 指向/foo/bar的快照。常用的API以及CLI可以查看“.snapshot”,下面是一些列子。

列出snapshottable目录下的所有快照 :

hdfs dfs -ls foo/.snapshot

列出快照S0下的所有文件:

hdfs dfs -ls foo/.snapshot/s0

从快照S0中拷贝一个文件:

hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp

 

备注: 这些例子使用保护的操作保护时间戳、所有权、许可证、ACLsXAttrs

 

升级到一个包含快照特征的HDFS版本

HDFS快照特征使用.snapshot这个保留的目录名来保存快照,当一个旧的不支持快照的HDFS版本需要升级时,首先就要重命名或者删除当前目录中名字为.snapshot的目录来防止和保留名冲突。可以查看hadoop 用户指导中升级的部分来获得更多的信息。

快照操作

管理员操作

这部分讲述的操作需要超级用户的权限。

允许快照

指定一个目录可以创建快照,当这一操作成功,这个目录将会变成可以创建快照的目录。

命令:

hdfs dfsadmin -allowSnapshot

参数:

path

可以创建快照的目录


可以在HdfsAdmin中查看对应的JAVA API void allowSnapshot(Path path)

禁止快照

禁止一个目录创建快照,在禁止之前,当前目录下所有的快照必须已经被删除。

命令:

hdfs dfsadmin -disallowSnapshot

参数:

path

禁止创建快照的目录

 

可以在HdfsAdmin中查看对应的JAVA API void disallowSnapshot(Path path)

用户操作:

这部分描述用户操作,需要特别注意的是超级用户可以执行所有的操作,而不需要个体操作的权限。

创建快照:

创建一个快照,这个操作需要snapshottable 目录的owner权限

命令:

hdfs dfs -createSnapshot []

参数:

path

 snapshottable 目录.

snapshotName

快照名字,, 这是一个可选项,当省略时,就会用时间戳 "'s'yyyyMMdd-HHmmss.SSS"格式来默认,例如:"s20130412-151029.033"

 

可以查看对应的JAVA API 接口 Path createSnapshot(Path path)Path createSnapshot(Path path, String snapshotName)

删除快照

snapshottable 目录中删除一个快照,这个操作需要snapshottable 目录的owner权限。

命令:

hdfs dfs -deleteSnapshot

参数:

path

snapshottable 目录路径

snapshotName

快照名

FileSystem中查看对应的JAVA API void deleteSnapshot(Path path, String snapshotName)

重命名快照

重命名快照,这个操作需要snmapshottable目录的owner权限

命令:

hdfs dfs -renameSnapshot

参数:

path

snapshottable 目录路径.

oldName

旧快照名字

newName

新快照名字

FileSystem中查看对应的JAVA APIvoid renameSnapshot(Path path, String oldName, String newName)

查看Snapshottable目录列表

查看所有snampshottable目录列表,需要当前用户有快照的权限。

命令:

hdfs lsSnapshottableDir

参数:

FileSystem中查看对应的JAVA APISnapshottableDirectoryStatus[] getSnapshottableDirectoryListing() inDistributedFileSystem.

查看快照之间的差异报告

得到2份快照的差异,这个操作需要2份快照的目录文件的read access权限。

命令:

hdfs snapshotDiff

参数:

path

snapshottable 目录路径.

fromSnapshot

开始的快照名字.

toSnapshot

结束的快照名字.

snapshotDiff 就是2份快照的差异,也可以是一份快照和当前状态的差异,用户可以少用“.”来代表当前状态。

结果:

+

The file/directory 被创建了.

-

The file/directory 被删除了.

M

The file/directory 被修改了.

R

The file/directory 被重名了.

重命名代表的是 在相同sampshottable目录下的文件/目录被重命名了。如果文件/目录重命名是发生在snapsottable目录之外,那么报告中会显示的一个文件/目录 被删除了。一个文件/目录从snapsshottable目录之外被重命名,那么在报告中会显示是新创建的。

快照差异报告不敢担保和操作的顺序相同,例如,如果我们重命名目录/foo/foo2,并且在/foo2/bar后面追加数据,那么差异报告将会是如下情况。

R. /foo -> /foo2

M. /foo/bar

可以看到,对一个重命名过的目录上文件/目录的修改使用的是重命名之前的名字(例如上述例子中的/foo/bar

DistributedFileSystem查看相应的JAVA APISnapshotDiffReport getSnapshotDiffReport(Path path, String fromSnapshot, String toSnapshot)

 

 

 

 

 

 

 

 

 




推荐阅读
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 深入解析 Android TextView 中 getImeActionLabel() 方法的使用与代码示例 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在Eclipse中批量转换Java源代码文件的编码格式从GBK到UTF-8是一项常见的需求。通过编写简单的Java代码,可以高效地实现这一任务。该方法不仅适用于Java文件,还可以用于其他类型的文本文件编码转换。具体实现可以通过导入`java.io.File`类来操作文件系统,从而完成批量转换。此外,建议在转换过程中添加异常处理机制,以确保代码的健壮性和可靠性。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 在托管C++中开发应用程序时,遇到了如何声明和操作字符串数组的问题。本文详细探讨了字符串数组在托管C++中的应用与实现方法,包括声明、初始化、遍历和常见操作技巧,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
author-avatar
晓志1998_809
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有