E-MapReduce(EMR)V3.27.0 以降では、Raft-RocksDB-Tablestore を使用して、JindoFS の Namespace Service によって管理されるメタデータを保存できます。 EMR JindoFS クラスタを作成する場合は、3 つのマスターノードを作成し、マスターノードに Raft インスタンスをデプロイします。 Raft インスタンスの各ピアノードは、ローカルの Raft-RocksDB を使用してメタデータを保存します。
前提条件
背景情報
RocksDB は、Raft プロトコルに基づいて 3 つのノード間のデータレプリケーションをサポートしています。 EMR クラスタを Tablestore インスタンスにバインドし、Tablestore インスタンスを JindoFS の Namespace Service の追加ストレージメディアとして使用できます。 EMR は、ローカルの RocksDB から Tablestore インスタンスにメタデータをリアルタイムで非同期的にアップロードします。
次の図は、Namespace Service のための高可用性 Raft-RocksDB-Tablestore のアーキテクチャを示しています。

ローカルストレージバックエンドとして Raft インスタンスを設定する
- EMR クラスタのすべての SmartData コンポーネントを一時停止します。
- Alibaba Cloud EMR コンソール にログインします。
- 上部のナビゲーションバーで、クラスタが存在するリージョンを選択 し、ビジネス要件に基づいてリソースグループを選択します。
- [クラスタ管理] タブをクリックします。
- [クラスタ管理] ページで、クラスタを見つけて、[アクション] 列の [詳細] をクリックします。
- 左側のナビゲーションペインで、 を選択します。
- 右上隅にある すべてのコンポーネントを停止 ドロップダウンリストから を選択します。
- Alibaba Cloud EMR コンソール にログインします。
- ビジネス要件に基づいて 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 をリモートストレージとして使用する必要がない場合は、手順 5 をスキップします。 - オプション: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] をクリックします。
- 右上隅にある すべてのコンポーネントを開始 ドロップダウンリストから を選択します。
Tablestore インスタンスからメタデータをリカバリする
EMR クラスタのリモート非同期ストレージバックエンドとして Tablestore インスタンスを設定した場合、JindoFS メタデータの完全なレプリカが Tablestore インスタンスに保存されます。 EMR クラスタを停止またはリリースした後、Tablestore インスタンスから新しい EMR クラスタに JindoFS メタデータをリカバリできます。 これにより、新しい EMR クラスタから元のファイルにアクセスできます。
- オプション:リカバリの準備をします。
- オプション:元の EMR クラスタのメタデータ統計を収集します。 メタデータ統計は、ファイルとフォルダの数を示します。
hadoop fs -count jfs://test/ // フォルダ数 ファイル数 1596 1482809 25 jfs://test/
- 元の 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] をクリックします。
- 右上隅にある すべてのコンポーネントを開始 ドロップダウンリストから を選択します。
- 新しい EMR クラスタの SmartData サービスがアクティブ化されると、EMR は Tablestore インスタンスからローカルの Raft-RocksDB にメタデータを自動的にリカバリします。 次のコマンドを実行して、リカバリの進捗状況を表示できます。
jindo jfs -metaStatus -detail
LEADER ノードの状態が FINISH の場合、リカバリは完了です。次の図を参照してください。 - オプション:新しい EMR クラスタのファイルとフォルダの数が、元の EMR クラスタの数と一致するかどうかを確認します。新しい EMR クラスタはリカバリモードであり、読み取り専用です。
# 新しい EMR クラスタのファイルとフォルダの数をカウントします。結果は元の EMR クラスタの結果と一致します。 [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ # CAT または GET コマンドを使用して、ファイルからデータを読み取ります。 [hadoop@emr-header-1 ~]$ hadoop fs -cat jfs://test/testfile this is a test file # ファイルディレクトリを表示します。 [hadoop@emr-header-1 ~]$ 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@emr-header-1 ~]$ hadoop fs -rm jfs://test/testfile java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only.
- Tablestore への非同期アップロードを有効にし、Tablestore からのリカバリを無効にします。[namespace] タブで、次の表に示すパラメータを設定します。
パラメータ 説明 必須値 namespace.backend.raft.async.ots.enabled Tablestore への非同期アップロードを有効にするかどうかを指定します。有効な値: - true
- false
true namespace.backend.raft.recovery.mode Tablestore からのメタデータリカバリを有効にするかどうかを指定します。有効な値: - true
- false
false - 新しい EMR クラスタを再起動します。
- [クラスタ管理] タブをクリックします。
- [クラスタ管理] ページで、クラスタを見つけます。 このクラスタの [アクション] 列で、[詳細] をクリックし、 を選択します。
- [クラスタ管理] タブをクリックします。