すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Raft-RocksDB-Tablestore をストレージバックエンドとして使用する

最終更新日:Mar 26, 2026

E-MapReduce (EMR) V3.27.0 以降では、JindoFS 名前空間サービスのメタデータストレージバックエンドとして Raft-RocksDB-Tablestore をサポートしています。このアーキテクチャにより、3 台のマスターノード間で高可用性が実現され、さらに Tablestore を使用したクラスター外の完全なバックアップもオプションで利用可能です(クラスター終了後も保持されます)。

仕組み

Raft-RocksDB-Tablestore アーキテクチャは、以下の 3 つのレイヤーで構成されます:

レイヤー役割責任
Raft 合意形成3 台のマスターノードが Raft グループを構成書き込み成功を確認する前に、メタデータの書き込みを過半数のノードに複製します。1 台のノード障害を許容し、データ損失を防ぎます。
RocksDB ローカル記憶域各マスターノードメタデータをローカルに保存します。読み取りおよび書き込みはローカルの RocksDB に対して行われるため、レイテンシーを低く保てます。
Tablestore リモートバックアップクラスター外のオプションストアEMR がリアルタイムで非同期にメタデータの変更を Tablestore にアップロードし、クラスター終了後も永続化される完全なレプリカを作成します。

Raft は書き込みのコミットに過半数(quorum)を必要とするため、3 台のマスターノードが必要です。3 台構成の場合、1 台のノード障害を許容できます。3 台未満では有効な Raft グループを構成できません。

Raft + RocksDB + Tablestore

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • Tablestore インスタンスが作成済みであること。高性能インスタンスの使用を推奨します。また、トランザクション機能が有効化されている必要があります。詳細については、「インスタンスの作成」をご参照ください。

  • 3 台のマスターノードを持つ EMR クラスターが存在すること。詳細については、「クラスターの作成」をご参照ください。

3 Master

Raft-RocksDB をローカルストレージバックエンドとして構成する

ステップ 1:すべての SmartData コンポーネントを停止する

  1. Alibaba Cloud EMR コンソールにログインします。

  2. 上部ナビゲーションバーで、クラスターが配置されているリージョンとリソースグループを選択します。

  3. クラスター管理 タブをクリックします。

  4. 対象のクラスターを検索し、詳細 をクリックします(操作 列内)。

  5. 左側ナビゲーションウィンドウで、クラスターサービス > SmartData を選択します。

  6. 右上隅の 操作 ドロップダウンリストから、すべてのコンポーネントを停止 を選択します。

ステップ 2:名前空間サービスのパラメーターを構成する

ブロックストレージモードでの名前空間サービスパラメーターを構成します。詳細については、「JindoFS のブロックストレージモードでの使用」をご参照ください。

ステップ 3:bigboot タブで Raft パラメーターを構成する

  1. 左側ナビゲーションウィンドウで、クラスターサービス > SmartData を選択します。

  2. 構成 タブをクリックします。

  3. サービス構成 セクションで、bigboot タブをクリックします。

  4. 以下のパラメーターを設定します:

    パラメーター説明
    namespace.backend.type名前空間サービスのバックエンドストレージタイプ。値を raft に設定します。有効な値: rocksdbotsraft。デフォルト値:rocksdbraft
    namespace.backend.raft.initial-confRaft インスタンスが実行される 3 台のマスターノードのアドレス。Raft が過半数(quorum)を達成できるよう、3 台のノードが必要です(クラスターは 1 台のノード障害を許容)。それより少ない台数は使用できません。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

ステップ 4(任意):Tablestore をリモートバックアップバックエンドとして構成する

クラスター外のメタデータバックアップを必要としない場合は、このステップをスキップしてください。

bigboot タブで、以下のパラメーターを設定します:

パラメーター説明
namespace.ots.instanceTablestore インスタンスの名称。emr-jfs
namespace.ots.accessKeyTablestore へのアクセスに使用する AccessKey ID。kkkkkk
namespace.ots.accessSecretTablestore へのアクセスに使用する AccessKey Secret。XXXXXX
namespace.ots.endpointTablestore インスタンスのエンドポイント。トラフィックをプライベートネットワーク内に留めるため、VPC エンドポイントを使用してください。http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com
namespace.backend.raft.async.ots.enabledTablestore への非同期アップロードを有効化します。値を true に設定します。SmartData の初期化が完了する前に、この設定を行う必要があります。 初期化がすでに完了している場合、メタデータは既にローカルの RocksDB に書き込まれており、この設定は無効になります。true

ステップ 5:構成を保存してすべてのコンポーネントを起動する

  1. サービス構成 セクションの右上隅で、保存 をクリックします。

  2. 変更の確認 ダイアログボックスで、説明を入力し、自動構成更新 を有効化します。

  3. OK をクリックします。

  4. 右上隅の 操作 ドロップダウンリストから、すべてのコンポーネントを起動 を選択します。

Tablestore からのメタデータ回復

Tablestore をリモートバックアップバックエンドとして構成した場合、Tablestore には JindoFS のメタデータの完全なレプリカが保持されます。元の EMR クラスターが停止またはリリースされた後でも、新しいクラスターにメタデータを復元することで、元のファイルに再度アクセスできます。

ステップ 1(任意):回復の準備

  1. 回復結果の検証のために、元のクラスターのメタデータ統計情報を記録します:

    hadoop fs -count jfs://test/
          1596      1482809                 25 jfs://test/
    (フォルダ数) (ファイル数)
  2. 元のクラスター上で実行中のすべてのジョブを停止します。EMR がすべてのメタデータを Tablestore に同期するまで、30~120 秒待ちます。同期状況を確認するには、以下のコマンドを実行します:

    jindo jfs -metaStatus -detail

    出力にリーダーノードの _synced=1 が表示された場合、すべてのメタデータが Tablestore に同期されています。

    View metadata status

  3. 元のクラスターを停止またはリリースします。進行前に、Tablestore インスタンスにアクセスするクラスターが存在しないことを確認してください。

重要

同期が完了する前にクラスターを停止した場合(_synced=1 がまだ表示されていない場合)、最後の同期ポイント以降に書き込まれたメタデータは、回復後に利用できなくなります。クラスターを停止する前に、必ず同期が完了していることを確認してください。

ステップ 2:新しい EMR クラスターを作成する

Tablestore インスタンスと同じリージョンに EMR クラスターを作成します。その後、すべての SmartData コンポーネントを停止します。詳細については、「Raft-RocksDB をローカルストレージバックエンドとして構成する」の「ステップ 1」をご参照ください。

ステップ 3:回復パラメーターを設定する

SmartData サービスの bigboot タブで、以下のパラメーターを設定します:

パラメーター説明必須値
namespace.backend.raft.async.ots.enabled回復中に Tablestore への非同期アップロードを無効化します。この値を false に設定すると、メタデータの復元中に Tablestore への書き込みが防止され、データの不整合が回避されます。false
namespace.backend.raft.recovery.modeTablestore からのメタデータ回復を有効化します。true

ステップ 4:構成を保存してすべてのコンポーネントを起動する

  1. サービス構成 セクションの右上隅で、保存 をクリックします。

  2. 変更の確認 ダイアログボックスで、説明を入力し、自動構成更新 を有効化します。

  3. OK をクリックします。

  4. 右上隅の 操作 ドロップダウンリストから、すべてのコンポーネントを起動 を選択します。

ステップ 5:回復進捗を監視する

SmartData の起動後、EMR は自動的に Tablestore からメタデータをローカルの Raft-RocksDB にプルします。進捗を確認するには、以下のコマンドを実行します:

jindo jfs -metaStatus -detail

リーダーノードの状態が FINISH になった場合、回復は完了です。

View recovery progress
回復中はクラスターが読み取り専用になります。書き込み操作は以下のエラーを返します。これは想定される動作です。クラスターは、まだ復元されていないデータを上書きして不整合を引き起こすことを防ぐため、読み取り専用モードを強制します。
java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only.

ステップ 6(任意):ファイルおよびフォルダー数の検証

以下のコマンドを実行して、メタデータが元のクラスターと一致していることを確認します:

# ファイルおよびフォルダー数が元のクラスターと一致することを確認
[hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
        1596      1482809                 25 jfs://test/

# ファイル内容を読み取り
[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

ステップ 7:回復モードを終了する

メタデータの検証が完了したら、Tablestore への非同期アップロードを再び有効化し、回復モードを無効化します。

bigboot タブで、以下のパラメーターを更新します:

パラメーター説明必須値
namespace.backend.raft.async.ots.enabled非同期アップロードを再び有効化し、新しいクラスターが Tablestore へのバックアップを開始できるようにします。true
namespace.backend.raft.recovery.mode回復モードを無効化し、クラスターを書き込み可能にします。false

その後、クラスターを再起動します:

  1. クラスター管理 タブをクリックします。

  2. 対象のクラスターを検索し、操作 列で その他 をクリックして、再起動 を選択します。

クイックリファレンス:主なコマンド

タスクコマンド
メタデータ同期および回復状況の確認jindo jfs -metaStatus -detail
ファイルおよびフォルダー数のカウントhadoop fs -count jfs://test/
ファイルの読み取りhadoop fs -cat jfs://test/<filename>
ディレクトリの一覧表示hadoop fs -ls jfs://test/

よくある質問

同期が完了する前に元のクラスターを停止した場合、どうなりますか?

最後の同期チェックポイント以降に書き込まれたメタデータは、回復後に利用できなくなります。データ損失を最小限に抑えるため、クラスターを停止する前に、_synced=1jindo jfs -metaStatus -detail の出力にリーダーノードで表示されていることを必ず確認してください。

3 台ではなく 2 台のマスターノードを使用できますか?

いいえ。Raft は書き込みのコミットに過半数(ノードの多数派)を必要とします。2 台のノードでは、1 台の障害発生時に過半数が成立せず、Raft グループは機能しません。1 台の障害を許容可能な有効な Raft グループを構成するには、最低でも 3 台のノードが必要です。

なぜ回復中はクラスターが読み取り専用になるのですか?

回復モードでは、Tablestore からまだ復元されていないデータを上書きすることを防ぐため、書き込み操作が禁止されます。書き込みを許可すると、後から復元されるメタデータが、より新しいデータと競合または上書きされ、データの不整合を引き起こす可能性があります。ステップ 7 を完了してクラスターを再起動すると、クラスターは自動的に読み取り専用モードを終了します。

回復途中で失敗した場合はどうすればよいですか?

回復が中断された場合、新しいクラスターを namespace.backend.raft.recovery.mode=true を指定して再起動します。EMR は Tablestore からのメタデータのプルを再開します。jindo jfs -metaStatus -detail で進捗を確認し、リーダーノードの状態が FINISH になるまで待ってから、次の手順に進んでください。

複数のクラスターが同じ Tablestore インスタンスを共有できますか?

いいえ。新しいクラスターでの回復を開始する前に、Tablestore インスタンスにアクセスするすべてのクラスターを停止またはリリースしてください。複数のクラスターが同時に同じ Tablestore インスタンスに書き込みまたは読み取りを行うと、メタデータバックアップが破損する可能性があります。