E-MapReduce(EMR)V3.27.0 以降では、Raft-RocksDB-Tablestore を使用して、JindoFS の Namespace Service によって管理されるメタデータを保存できます。 EMR JindoFS クラスタを作成する場合は、3 つのマスターノードを作成し、マスターノードに Raft インスタンスをデプロイします。 Raft インスタンスの各ピアノードは、ローカルの Raft-RocksDB を使用してメタデータを保存します。 Raft インスタンスは、組み込みのディザスタリカバリ機能を提供します。 必要に応じて、ディザスタリカバリのために Tablestore インスタンスにメタデータをバックアップすることもできます。
背景情報
RocksDB は、Raft プロトコルに基づいて 3 つのノード間のデータレプリケーションをサポートしています。 EMR クラスタを Tablestore インスタンスにバインドし、Tablestore インスタンスを JindoFS の Namespace Service の追加ストレージメディアとして使用できます。 EMR は、ローカルの RocksDB から Tablestore インスタンスにメタデータをリアルタイムで非同期的にアップロードします。

前提条件
ローカルストレージバックエンドとして Raft インスタンスを構成する
- SmartData サービスページに移動します。
- Alibaba Cloud EMR コンソール にログインします。
- 上部のナビゲーションバーで、クラスタが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します。
- [クラスタ管理] タブをクリックします。
- [クラスタ管理] ページで、クラスタを見つけて、[アクション] 列の [詳細] をクリックします。
- 表示されるページの左側のナビゲーションペインで、 を選択します。
- Alibaba Cloud EMR コンソール にログインします。
- すべての SmartData コンポーネントを一時停止します。
- SmartData サービスページの右上隅で、 を選択します。
- [クラスタアクティビティ] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。
- [確認] メッセージで、[OK] をクリックします。
- ビジネス要件に基づいて Namespace Service パラメータを構成します。詳細については、「ブロックストレージモードで JindoFS を使用する」をご参照ください。
- SmartData サービスの [namespace] タブに移動します。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[namespace] タブをクリックします。
- [namespace] タブで、次の表に記載されているパラメータを構成します。
パラメータ 説明 例 namespace.backend.type Namespace Service のバックエンドストレージタイプ。 有効な値: - rocksdb
- ots
- raft
デフォルト値: rocksdb。 このパラメータを raft に設定します。
raft namespace.backend.raft.initial-conf Raft インスタンスがデプロイされている 3 つのマスターノードのアドレス。 値は固定です。 emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0 jfs.namespace.server.rpc-address クライアントが Raft インスタンスにアクセスするために使用される 3 つのマスターノードのアドレス。 値は固定です。 emr-header-1:8101,emr-header-2:8101,emr-header-3:8101 - オプション:Tablestore インスタンスをリモート非同期ストレージバックエンドとして構成します。次の表に示すパラメーターを [namespace] タブで構成します。
パラメーター 説明 例 namespace.ots.instance Tablestore インスタンスの名前。 emr-jfs namespace.ots.accessKey Tablestore インスタンスへのアクセスに使用する AccessKey ID。 kkkkkk namespace.ots.accessSecret Tablestore インスタンスへのアクセスに使用する AccessKey シークレット。 XXXXXX namespace.ots.endpoint Tablestore インスタンスのエンドポイント。VPC エンドポイントを使用することをお勧めします。 http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com namespace.backend.raft.async.ots.enabled Tablestore への非同期アップロードを有効にするかどうかを指定します。有効な値: - true
- false
このパラメーターを true に設定します。SmartData サービスの初期化が完了していないことを確認してください。説明 初期化が完了している場合、メタデータがローカルの RocksDB に生成されているため、設定は有効になりません。true - 構成を保存します。
- [サービス構成] セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] を有効にします。
- [OK] をクリックします。
- すべてのSmartDataコンポーネントを起動します。
- SmartDataサービスページの右上隅で、 を選択します。
- [クラスターアクティビティ] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。
- [確認] メッセージで、[OK] をクリックします。
- SSH モードでクラスターにログオンし、次のコマンドを実行してメタデータの状態を表示します。
jindo jfs -metaStatus -detail
返された情報に raft が含まれている場合、構成は有効になります。
Tablestore インスタンスからメタデータを復旧する
EMR クラスターのリモート非同期ストレージバックエンドとして Tablestore インスタンスを構成した場合、JindoFS メタデータの完全なレプリカが Tablestore インスタンスに保存されます。 EMR クラスターを停止またはリリースした後、Tablestore インスタンスから新しい EMR クラスターに JindoFS メタデータを復旧できます。 この方法で、新しい EMR クラスターから元のファイルにアクセスできます。
- オプション:復旧の準備をします。
- 元の EMR クラスターのメタデータ情報を表示します。 メタデータ情報には、ファイルとフォルダーの数が含まれます。
hadoop fs -count jfs://test/
次の情報が返されます:1596 1482809 25 jfs://test/
説明 1596 はフォルダーの数です。 1482809 はファイルの数です。 - 元の EMR クラスターで実行されているジョブを停止します。 EMR がクラスターのすべてのメタデータを Tablestore インスタンスに同期するまで、30 ~ 120 秒待つ必要がある場合があります。 次のコマンドを実行して、メタデータの状態を表示します。 コマンド出力に LEADER ノードの
_synced=1
が含まれている場合、最新のメタデータは Tablestore インスタンスに同期されます。jindo jfs -metaStatus -detail
- 元の EMR クラスターを停止またはリリースし、Tablestore インスタンスにアクセスしているクラスターがないことを確認します。
- 元の EMR クラスターのメタデータ情報を表示します。 メタデータ情報には、ファイルとフォルダーの数が含まれます。
- EMR クラスターを作成します。 Tablestore インスタンスと同じリージョンにある EMR クラスターを作成します。 すべての SmartData コンポーネントを一時停止します。 詳細については、「Raft インスタンスをローカルストレージバックエンドとして構成する」をご参照ください。
- メタデータ復旧のパラメーターを構成します。 次の表に示すパラメーターを [namespace] タブで構成します。
パラメーター 説明 必須値 namespace.backend.raft.async.ots.enabled Tablestore への非同期アップロードを有効にするかどうかを指定します。 有効な値: - true
- false
false namespace.backend.raft.recovery.mode Tablestore からのメタデータ復旧を有効にするかどうかを指定します。 有効な値: - true
- false
true - 構成を保存します。
- サービス構成セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、説明を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
- すべての SmartData コンポーネントを起動します。
- SmartData サービスページの右上隅で、 を選択します。
- [クラスターアクティビティ] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。
- [確認] メッセージで、[OK] をクリックします。
- 新しい EMR クラスターの SmartData サービスがアクティブ化されると、EMR は Tablestore インスタンスからローカルの Raft-RocksDB にメタデータを自動的に復旧します。 次のコマンドを実行して、復旧の進行状況を表示できます。
jindo jfs -metaStatus -detail
LEADER ノードの状態が FINISH の場合、復旧は完了です。次の図を参照してください。 - オプション:新しい EMR クラスターのファイルとフォルダーの数が元の EMR クラスターの数と一致するかどうかを確認します。
- 次のコマンドを実行して、新しい EMR クラスターのファイルとフォルダーの数が元の EMR クラスターの数と一致するかどうかを確認します:
hadoop fs -count jfs://test/
次の情報が返されます:1596 1482809 25 jfs://test/
- 次のコマンドを実行して、ファイルからデータを読み取ることができるかどうかを確認します:
hadoop fs -cat jfs://test/testfile
- 次のコマンドを実行して、ファイルディレクトリを表示します:
hadoop fs -ls jfs://test/
次の情報が返されます:Found 3 items drwxrwxr-x - root root 0 2020-03-25 14:54 jfs://test/emr-header-1.cluster-50087 -rw-r----- 1 hadoop hadoop 5 2020-03-25 14:50 jfs://test/haha-12096RANDOM.txt -rw-r----- 1 hadoop hadoop 20 2020-03-25 15:07 jfs://test/testfile
- 次のコマンドを実行して、ファイルを削除できるかどうかを確認します:
hadoop fs -rm jfs://test/testfile
次の情報が返されます:java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only.
説明 新しい EMR クラスターは復旧モードであり、読み取り専用です。 ファイルは削除できません。
- 次のコマンドを実行して、新しい EMR クラスターのファイルとフォルダーの数が元の EMR クラスターの数と一致するかどうかを確認します:
- Tablestore への非同期アップロードを有効にし、Tablestore からの復旧を無効にします。 次の表に示すパラメーターを [namespace] タブで構成します。
パラメーター 説明 必須値 namespace.backend.raft.async.ots.enabled Tablestore への非同期アップロードを有効にするかどうかを指定します。 有効な値: - true
- false
true namespace.backend.raft.recovery.mode Tablestore からのメタデータ復旧を有効にするかどうかを指定します。 有効な値: - true
- false
false - 新しい EMR クラスターを再起動します。
- [クラスター管理] タブをクリックします。
- [クラスター管理] ページで、クラスターを見つけ、[アクション] 列の を選択します。
- [クラスターの再起動] ダイアログボックスで、[OK] をクリックします。
- [クラスター管理] タブをクリックします。