OSS-HDFS服务(JindoFS服务)的快照功能在使用方式上与HDFS的快照功能完全兼容,同时支持目录层级的操作。本文介绍JindoFS服务快照功能的常见操作。

前提条件

已开通OSS-HDFS服务。具体操作,请参见开通OSS-HDFS服务

开启快照功能

假设您拥有名为examplebucket的Bucket,且该Bucket已开启HDFS服务,并在该Bucket下创建了名为exampledir的目录。当您需要为该目录开启快照功能时,请通过JindoSDK的Shell命令行工具执行如下命令:

jindo dlsadmin -allowSnapshot -dlsUri oss://examplebucket.<Endpoint>/exampledir

关于配置Endpoint的具体操作,请参见JindoFS服务Endpoint

创建快照

在examplebucket下的exampledir目录开启快照功能后,在该目录下新建了子目录dir1以及dir2以及文件file1和file2:

# 新建子目录dir1。
hdfs dfs -mkdir oss://examplebucket.<Endpoint>/exampledir/dir1
# 新建子目录dir2。
hdfs dfs -mkdir oss://examplebucket.<Endpoint>/exampledir/dir2
# 新建文件file1。
hdfs dfs -touchz oss://examplebucket.<Endpoint>/exampledir/file1
# 新建文件file2。
hdfs dfs -touchz oss://examplebucket.<Endpoint>/exampledir/file2

此时,您可以为exampledir目录创建快照,用于记录当前该目录下的子目录及文件结构。通过HDFS的Shell命令行工具执行以下命令创建快照,并将快照命名为S1:

hdfs dfs -createSnapshot oss://examplebucket.<Endpoint>/exampledir S1

重命名快照

例如,您需要将已创建的快照S1重命名为S2,请通过HDFS的Shell命令行工具执行以下命令:

hdfs dfs -renameSnapshot oss://examplebucket.<Endpoint>/exampledir S1 S2

访问快照中的目录和文件

当您需要访问examplebucket根目录exampledir的子目录dir1,请通过HDFS的Shell命令行工具执行以下命令:

hdfs dfs -ls oss://examplebucket.<Endpoint>/exampledir/dir1

考虑到此前您已为examplebucket根目录exampledir创建了快照S1,因此访问快照S1的行为等同于访问根目录exampledir。请通过HDFS的Shell命令行工具执行以下命令访问快照S1中的目录和文件:

hdfs dfs -ls oss://examplebucket.<Endpoint>/exampledir/.snapshot/S1/dir1

通过快照恢复数据

快照功能通常用于数据备份和恢复。通过快照功能,可以及时恢复误删除的数据。假设您误删除了examplebucket根目录exampledir下的文件dir1:

hdfs dfs -rm -r oss://examplebucket.<Endpoint>/exampledir/dir1

考虑到此前您已为examplebucket根目录exampledir创建了快照S1,此时您可以通过HDFS的Shell命令行工具执行以下命令恢复误删除数据:

hdfs dfs -cp oss://examplebucket.<Endpoint>/exampledir/.snapshot/S1/dir1  oss://examplebucket/exampledir

完成数据恢复后,您可以通过以下命令查看误删除的文件夹或者文件:

hdfs dfs -ls oss://examplebucket.<Endpoint>/exampledir/dir1

删除快照

例如,您不再需要保留examplebucket根目录exampledir创建的快照S1或者重命名后的快照S2,请通过HDFS的Shell命令行工具执行如下命令删除快照S1以及S2。

  • 删除快照S1
    hdfs dfs -deleteSnapshot oss://examplebucket.<Endpoint>/exampledir S1
  • 删除快照S2
    hdfs dfs -deleteSnapshot oss://examplebucket.<Endpoint>/exampledir S2

关闭快照功能

当您不再需要使用快照功能时,请通过JindoSDK的Shell命令行工具执行如下命令关闭快照功能:

jindo dlsadmin -disallowSnapshot -dlsUri oss://examplebucket.<Endpoint>/exampledir
注意 关闭快照功能前,请确保已删除目标路径下的所有快照。否则,关闭快照功能将会报错。