本文主要介绍如何使用OSS-HDFS服务中的快照功能。

背景信息

阿里云OSS-HDFS服务(JindoFS服务)是OSS新推出的存储空间类型,兼容HDFS接口,支持目录以及目录层级,通过JindoSDK 4.x可以兼容访问OSS-HDFS服务。OSS-HDFS服务的快照功能在使用上与HDFS的快照功能完全兼容。本文主要介绍在OSS-HDFS服务中使用快照功能的一些常见操作。

为了方便下面命令的介绍,假设您已经开启OSS-HDFS服务Bucket:oss://oss-dfs-test。关于如何创建和使用OSS-HDFS服务的基本功能,请参考OSS/OSS-HDFS快速入门

使用限制

仅JindoData 4.0.0及以上版本支持。

开启快照功能

假设您先在oss://oss-dfs-test下创建一个目录TestSnapshot。
hdfs dfs -mkdir oss://oss-dfs-test.<Endpoint>/TestSnapshot
默认情况下,目录的快照功能是关闭的。需要使用JindoSDK的Shell命令行开启和关闭目录的快照功能。开启快照命令为:
jindo admin -allowSnapshot -dlsUri <path>
例如,开启前面创建的TestSnapshot的快照功能的命令如下。
jindo admin -allowSnapshot -dlsUri oss://oss-dfs-test.<Endpoint>/TestSnapshot

创建快照

一个目录开启快照功能后,可以通过HDFS的Shell命令创建快照,具体命令为:
hdfs dfs -createSnapshot <path> [<snapshotName>]
例如,创建一个名称为S1的快照对TestSnapshot此刻的状态进行保存,命令如下。
#下面这些为创建测试的文件和目录
hdfs dfs -mkdir oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1
hdfs dfs -mkdir oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir2
hdfs dfs -touchz oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1/file1
hdfs dfs -touchz oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir3/file2

#通过HDFS的shell命令行工具执行以下命令创建快照,并将快照命名为S1:
hdfs dfs -createSnapshot oss://oss-dfs-test.<Endpoint>/TestSnapshot S1

访问快照中的目录和文件

快照目录的格式

为了区别于文件系统现有的目录和文件,访问快照中的文件和目录需要添加快照的信息来指出自己要访问的快照名。对于一个开启了快照的目录,如果需要访问它下面某个快照的目录和文件,您可以使用下面的格式来访问:
<snapshotRoot>/.snapshot/<snapshotName>/<actual subPath>
其中snapshotRoot为快照的根目录,即开启快照命令中dlsUri参数制定的路径。snapshotName是之前创建的快照名。制定了快照名之后,之后的路径就是原来快照根目录(snapshotRoot)下要访问的路径,比如上面的例子TestSnapshot目录。
您如果要列出oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1下的文件,可以使用常规的ls命令。
hdfs dfs -ls oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1
由于您在TestSnapshot下开启的快照,并创建了快照S1,您也可以通过下面的路径列出快照S1下的目录和文件。
hdfs dfs -ls oss://oss-dfs-test.<Endpoint>/TestSnapshot/.snapshot/S1/dir1
其中.snapshot/S1就是用来表明目录的快照的信息。

利用快照恢复数据

快照的一个常见作用是进行数据备份和恢复。利用快照可以对重要数据进行恢复,防止错误性的操作。您可以快照目录的格式访问只读副本中的数据,然后根据需要进行恢复操作。

例如,在上面的文件系统中,假设在后面的某次任务中误删了hdfs dfs -rm -r oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1,恢复数据的操作如下。

  1. 由于您已经对/TestSnapshot添加了快照S1,您可以用如下的命令恢复数据。
    hdfs dfs -cp oss://oss-dfs-test.<Endpoint>/TestSnapshot/.snapshot/S1/dir1 oss://oss-dfs-test.<Endpoint>/TestSnapshot
  2. 检验数据是否恢复。
    hdfs dfs -ls oss://oss-dfs-test.<Endpoint>/TestSnapshot/dir1
    此时,再访问/TestSnapshot/dir1,可以查看到原来的误删的文件夹和文件,说明数据已恢复。

重命名快照

对于一个已经创建的快照,可以通过下面的命令进行重命名。
hdfs dfs -renameSnapshot <path> <oldName> <newName>
例如上面例子中TestSnapshot的快照S1,您可以用下面的命令进行重命名为S100。
hdfs dfs -renameSnapshot oss://oss-dfs-test.<Endpoint>/TestSnapshot S1 S100

删除快照

当您不需要快照的时候,可以运行下面的命令来删除已有的快照。
hdfs dfs -deleteSnapshot <path> <snapshotName>
在上面的例子中,您可以运行下面的命令来删除之前创建并重命名的快照S100。
hdfs dfs -deleteSnapshot oss://oss-dfs-test.<Endpoint>/TestSnapshot S100

关闭快照功能

当您需要关闭目录的快照功能的时候,您同样需要使用JindoSDK的Shell命令行。具体的关闭快照的格式为:
jindo admin -disallowSnapshot -dlsUri <path>
重要 关闭目录的快照功能,首先要确保该目录下的所有快照已经被删除,您可以参考前面的删除快照。如果该目录下还存在快照,关闭快照功能会报错。
对于前面的例子TestSnapshot,假设您已经删除了所有快照,可以用下面的命令来关闭目录的快照功能。
jindo admin -disallowSnapshot -dlsUri oss://oss-dfs-test.<Endpoint>/TestSnapshot

查看两个快照之间的差异

您可以通过下面命令查看两个快照之间的差异。
jindo dls -snapshotDiff -dlsUri <uri> -fromSnapshot <fromSnapshot> -toSnapshot <toSnapshot>