當您希望對OSS-HDFS服務的資料進行備份,在資料發生錯誤、被誤刪除時,將資料恢複至可用狀態,您可以使用Snapshot命令建立快照。OSS-HDFS服務的快照功能在使用方式上與HDFS的快照功能完全相容,同時支援目錄層級的操作。
此功能目前尚處於試用和小規模使用階段,不建議大規模生產使用。
前提條件
已建立Hadoop環境、Hadoop叢集或者Hadoop用戶端。具體操作,請參見建立Hadoop運行環境。
已開通OSS-HDFS服務。具體操作,請參見開通OSS-HDFS服務。
已配置4.5.0及以上版本JindoSDK 。具體操作,請參見非EMR叢集接入OSS-HDFS服務快速入門。
步驟1:配置環境變數
串連ECS執行個體。具體操作,請參見串連ECS執行個體。
進入已安裝的JindoSDK JAR包下的bin目錄。
以下以
jindosdk-x.x.x-linux
為例,如使用其他版本的JindoSDK,請替換為對應的JAR包名稱。cd jindosdk-x.x.x-linux/bin/
說明x.x.x表示JindoSDK JAR包版本號碼。
授予bin目錄下的
jindo-util
檔案的讀、寫、執行的許可權。chmod 700 jindo-util
將
jindo-util
檔案重新命名為jindo
。mv jindo-util jindo
建立設定檔
jindosdk.cfg
,然後在設定檔中添加以下配置項。[common]保持以下預設配置。 logger.dir = /tmp/jindo-util/ logger.sync = false logger.consolelogger = false logger.level = 0 logger.verbose = 0 logger.cleaner.enable = true hadoopConf.enable = false [jindosdk]自訂以下配置項。 <!-- 以下以杭州地區為例,其他地區請根據實際情況替換。 --> fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com <!-- 配置訪問OSS-HDFS服務的AccessKeyId、AccessKeySecret。 --> fs.oss.accessKeyId = LTAI******** fs.oss.accessKeySecret = KZo1********
設定環境變數。
export JINDOSDK_CONF_DIR=<JINDOSDK_CONF_DIR>
<JINDOSDK_CONF_DIR>填寫
jindosdk.cfg
設定檔所在的絕對路徑。
步驟2:執行快照相關操作
開啟快照功能
假設您擁有名為examplebucket的Bucket,並在該Bucket下建立了名為exampledir的目錄。當您需要為該目錄開啟快照功能時,請通過JindoSDK的Shell命令列工具執行如下命令:
./jindo admin -allowSnapshot -dlsUri oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir
關於配置Endpoint的具體操作,請參見JindoFS服務Endpoint。
建立快照
在examplebucket下的exampledir目錄開啟快照功能後,您需要執行以下操作:
建立子目錄和檔案。
在exampledir目錄下建立子目錄dir1以及dir2以及檔案file1
# 建立子目錄dir1。 hdfs dfs -mkdir oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1 # 建立子目錄dir2。 hdfs dfs -mkdir oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir2 # 建立檔案file1。 hdfs dfs -touchz oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/file1.txt # 建立檔案file2。 hdfs dfs -touchz oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/file2.txt
為exampledir建立名為S1的快照。
hdfs dfs -createSnapshot oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir S1
重新命名快照
例如,您需要將已建立的快照S1重新命名為S2,請通過HDFS的Shell命令列工具執行以下命令:
hdfs dfs -renameSnapshot oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir S1 S2
訪問快照中的目錄和檔案
當您需要訪問examplebucket根目錄exampledir的子目錄dir1,請通過HDFS的Shell命令列工具執行以下命令:
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1
考慮到此前您已為examplebucket根目錄exampledir建立了快照S1,因此訪問快照S1的行為等同於訪問根目錄exampledir。請通過HDFS的Shell命令列工具執行以下命令訪問快照S1中的目錄和檔案:
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/.snapshot/S1/dir1
對比快照內容
當您需要對比exampledir目錄下快照S1與快照S2存在的差異時,請通過JindoSDK的Shell命令列工具執行如下命令:
./jindo admin -snapshotDiff \
-dlsUri -dlsUri oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir \
-fromSnapshot S1 \
-toSnapshot S2
通過快照恢複資料
快照功能通常用於資料備份和恢複。通過快照功能,可以及時恢複誤刪除的資料。假設您誤刪除了examplebucket根目錄exampledir下的檔案dir1:
hdfs dfs -rm -r oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1
考慮到此前您已為examplebucket根目錄exampledir建立了快照S1,此時您可以通過HDFS的Shell命令列工具執行以下命令恢複誤刪除資料:
hdfs dfs -cp oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/.snapshot/S1/dir1 oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir
完成資料恢複後,您可以通過以下命令查看誤刪除的檔案夾或者檔案:
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1
刪除快照
例如,您不再需要保留examplebucket根目錄exampledir建立的快照S1或者重新命名後的快照S2,請通過HDFS的Shell命令列工具執行如下命令刪除快照S1以及S2。
刪除快照S1
hdfs dfs -deleteSnapshot oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir S1
刪除快照S2
hdfs dfs -deleteSnapshot oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir S2
關閉快照功能
當您不再需要使用快照功能時,請通過JindoSDK的Shell命令列工具執行如下命令關閉快照功能:
./jindo admin -disallowSnapshot -dlsUri oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir
關閉快照功能前,請確保已刪除目標路徑下的所有快照。否則,關閉快照功能將會報錯。