スナップショットコマンドを使用して作成したスナップショットを使用して、誤って削除されたデータを復元したり、エラー発生時にサービスの継続性を確保するためにデータをバックアップしたりできます。 OSS-HDFSのスナップショット機能は、HDFSのスナップショット機能と同じ方法で使用できます。 OSS-HDFSのスナップショット機能は、ディレクトリレベルの操作をサポートします。
この機能は試行錯誤であり、大規模な使用にはお勧めできません。
前提条件
Hadoop環境、Hadoopクラスター、またはHadoopクライアントが作成されます。 Hadoopのインストール方法の詳細については、「手順2: Hadoopランタイム環境の作成」をご参照ください。
特定のバケットに対してOSS-HDFSが有効になります。 詳細については、「OSS-HDFSの有効化とアクセス許可の付与」をご参照ください。
JindoSDK 4.5.0以降がインストールおよび設定されています。 詳細については、「非EMRクラスターのOSS-HDFSへの接続」をご参照ください。
ステップ1: 環境変数の設定
Elastic Compute Service (ECS) インスタンスに接続します。 詳細については、「インスタンスへの接続」をご参照ください。
インストールされているJindoSDK JARパッケージのbinディレクトリに移動します。
cd jindosdk-x.x.x/bin/
説明x.x.xは、JindoSDK JARパッケージのバージョン番号を示します。
binディレクトリの
jindo-util
ファイルに読み取りおよび書き込み権限を付与します。chmod 700 jindo-util
jindo-util
ファイルの名前をjindo
に変更します。mv jindo-util jindo
jindosdk.cfg
という名前の設定ファイルを作成し、次のパラメーターを設定ファイルに追加します。[common] Retain the following default configurations: 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] Specify the following parameters: <!-- In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. --> fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com <! -- Configure the AccessKey ID and AccessKey secret that are used to access OSS-HDFS. --> fs.oss.accessKeyId = LTAI******** fs.oss.accessKeySecret = KZo1********
環境変数を設定します。
export JINDOSDK_CONF_DIR=<JINDOSDK_CONF_DIR>
<JINDOSDK_CONF_DIR> を
jindosdk.cfg
設定ファイルの絶対パスに設定します。
手順2: スナップショット関連の操作
スナップショット機能の有効化
たとえば、examplebucketという名前のバケットと、そのバケット内にexampledirという名前のディレクトリがあるとします。 exampledirディレクトリのスナップショット機能を有効にするには、JindoSDKシェルCLIで次のコマンドを実行します。
./jindo admin -allowSnapshot -dlsUri oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir
EMRのエンドポイントを設定する方法の詳細については、「非OSS-HDFSクラスターのOSS-HDFSへの接続」をご参照ください。
スナップショットの作成
examplebucketバケットのexampledirディレクトリのスナップショット機能を有効にした後、次の操作を実行してスナップショットを作成します。
サブディレクトリとオブジェクトを作成します。
dir1とdir2という名前のサブディレクトリ、およびfile1とfile2という名前のオブジェクトをexampledirディレクトリに作成します。
# Create the dir1 subdirectory. hdfs dfs -mkdir oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1 # Create the dir2 subdirectory. hdfs dfs -mkdir oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir2 # Create the file1 object. hdfs dfs -touchz oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/file1.txt # Create the file2 object. 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
スナップショットの名前変更
HDFSシェルCLIで次のコマンドを実行して、S1スナップショットS2の名前を変更できます。
hdfs dfs -renameSnapshot oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir S1 S2
スナップショット内のディレクトリとオブジェクトへのアクセス
examplebucketバケットのexampledirルートディレクトリにあるdir1サブディレクトリにアクセスするには、HDFSシェルCLIで次のコマンドを実行します。
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/dir1
exampledirルートディレクトリにアクセスするには、このディレクトリ用に作成したS1スナップショットにアクセスします。 S1スナップショット内のディレクトリとオブジェクトにアクセスする場合は、HDFSシェルCLIで次のコマンドを実行します。
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir/.snapshot/S1/dir1
スナップショットの比較
exampledirディレクトリのS1スナップショットとS2スナップショットを比較するには、JindoSDKシェルCLIで次のコマンドを実行します。
./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シェルCLIで次のコマンドを実行して、削除されたオブジェクトを復元できます。
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スナップショットを保持しない場合、またはS1スナップショットの名前を変更して取得したS2スナップショットを保持しない場合は、HDFSシェルCLIで次のコマンドを実行して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シェルCLIで次のコマンドを実行してスナップショット機能を無効にします。
./jindo admin -disallowSnapshot -dlsUri oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampledir
スナップショット機能を無効にする前に、宛先パスのすべてのスナップショットが削除されていることを確認してください。 それ以外の場合、スナップショット機能を無効にするとエラーが発生します。