HDFS 杂谈:SnapShot 快照
HDFS SnapShot 介绍
在分享 HDFS SnapShot(快照)功能前,首先了解文件系统的快照技术。一般文件系统的快照技术分为两种:
把时点的数据文件拷贝到另一个存储空间形成快照,读取快照时相当于直接读取时点的数据文件。
优点是读取快照效率高,直接读取备份的数据文件即可;缺点是快照生成时间与数据文件的大小成正比,而且还得额外申请空间存储快照时点的数据文件。
给对象打上创建快照的时间戳,并存储该对象的时点元数据信息,比如数据块信息、寻址信息等,形成快照。当需要读取快照数据时,再根据特定策略通过当前数据计算得出。
优点是不需额外占用空间备份数据文件,且由于仅保留快照对象的元数据,所以可以瞬时创建快照;缺点是快照读取的效率低,因为快照需要通过当前数据依据特定的算法重新计算。
HDFS SnapShot 特性
HDFS SnapShot 功能是基于第二种技术而诞生的。所以 HDFS SnapShot 功能具备以下特性:
HDFS SnapShot 由于不涉及数据的拷贝,所以是瞬时生成的;
由于快照是历史数据块信息的连接,所以快照无法修改,为只读属性;
被创建了快照内的所有对象,只有发生修改时才会产生额外的内存操作,用于记录该对象的修改操作;
HDFS SnapShot 不会影响快照内所有对象的当前数据,这是因为从最早的快照创建时点起,对象的修改记录会一直记录下来并按时间倒序排序,所以用户访问该对象时仍然是最新时点的数据。而读取快照时,数据为当前数据减去当前时点与快照时点之间所有的修改操作而得到,所以快照创建时点与当前时点的时间间隔越大,包含的对象越多,对象的修改操作越频繁,计算快照数据的时间越长。
HDFS SnapShot 应用场景
基于上述特性,HDFS SnapShot 适合以下场景的应用:
防止用户误操作:不断周期性地创建快照(当然快照的生命周期也要管理好,比如只保留最新 10 个快照),一旦用户误操作删除了已创建快照内的任意对象,也可以使用最新快照进行恢复;
数据备份:通过对根目录或制定目录创建快照,并以此快照作为全量备份的起点。增量备份可通过两个快照之间的差异来进行;
灾备恢复:可以把快照拷贝到其他远程节点进行备份,除非遇到极端情况,否则都可以通过快照来恢复时点数据;
数据测试:创建某个时点的快照用于数据测试使用。由于快照为只读属性,所以不怕应用程序对快照内的数据的覆盖。
HDFS SnapShot 指令及数据恢复实践
存储快照的目录被称为 snapshottable,位置在<快照目录>/.snapshot。一个 snapshottable 下最多可以创建 65536 个快照。同时快照不能被设置为 snapshottable,即快照间不能成嵌套关系。
HDFS SHELL 有关 snapshot 的指令有 createSnapshot、deleteSnapshot 和 renameSnapshot,具体使用方式可访问《Hadoop编程实战:HDFS用户Shell详解》。
以下演示快照的数据恢复功能:
目前/hdfstest/text.txt 是无任何数据的
在 2021/1/10 时已经创建了快照 s1
把 s1 快照的 test.txt 恢复到/hdfstest/test.txt 上
此时数据已回复到 2021/1/10 时点数据
总结
HDFS snapshot 功能可以创建根目录或指定目录的元数据信息副本,该副本被称为快照;
由于快照仅是元数据信息,所以具有瞬时创建、只读属性、不影响当前数据的特性;
快照适用于防止用户误操作、数据备份、灾备恢复及数据测试的应用场景。
版权声明: 本文为 InfoQ 作者【罗小龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/297f5bc9cab16afada07d45dd】。文章转载请联系作者。
评论