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

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

最終更新日:Jun 21, 2026

E-MapReduce (EMR) 3.27.0 以降のバージョンの JindoFS は、名前空間サービスのストレージバックエンドとして Raft-RocksDB-Tablestore をサポートします。EMR JindoFS クラスターでは、3 つのマスターノードが Raft インスタンスを形成し、各ピアノードはローカルの RocksDB を使用してメタデータを保存します。

前提条件

  • Tablestore インスタンスを作成します。高性能インスタンスを推奨します。詳細については、「Tablestore の有効化とインスタンスの作成」をご参照ください。

    説明

    トランザクション機能を有効にする必要があります。

  • 3 つのマスターノードを持つ EMR クラスターを作成します。詳細については、「クラスターの作成」をご参照ください。クラスターを作成する際、[High Availability] を有効にし、[Deployment Mode][3 Master] を選択します。

背景情報

RocksDB は Raft プロトコルを使用して、3 つのマスターノード間でデータをレプリケートします。クラスターを Tablestore インスタンスにバインドできます。これは JindoFS 名前空間サービスの追加のストレージバックエンドとして機能します。ローカルのメタデータは、Tablestore インスタンスに非同期で同期されます。

次の図は、名前空間サービスに Raft、RocksDB、および Tablestore を使用した高可用性アーキテクチャを示しています。Raft + RocksDB + Tablestore

ローカル Raft バックエンドの設定

  1. EMR クラスターを作成した後、すべての SmartData サービスを停止します。

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

    2. 上部のメニューバーで、必要に応じてリージョンとリソースグループを選択します。

    3. Clusters タブをクリックします。

    4. Clusters ページで、対象のクラスターを見つけ、[Actions] 列の Details をクリックします。

    5. 左側のナビゲーションペインで、Services > [SmartData] を選択します。

    6. 右上隅で 操作 > > [Stop All Components] を選択します。

  2. 必要に応じて名前空間を追加します。

  3. SmartData サービスの [bigboot] タブに移動します。

    1. 左側のナビゲーションペインで、Services > [SmartData] を選択します。

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

    3. Service Configuration セクションで、[bigboot] タブをクリックします。

  4. SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。

    パラメーター

    説明

    namespace.backend.type

    名前空間サービスのストレージバックエンド。有効な値:

    • rocksdb

    • ots

    • raft

    デフォルト値は rocksdb です。

    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 から 手順 7 を実行します。それ以外の場合は、手順 6手順 7 に進みます。

  5. オプション:リモート非同期ストレージ用に Tablestore を設定します。

    SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。

    パラメーター

    説明

    namespace.ots.instance

    Tablestore インスタンスの名前。

    emr-jfs

    namespace.ots.accessKey

    Tablestore インスタンスの AccessKey ID。

    ご自身の AccessKey ID

    namespace.ots.accessSecret

    Tablestore インスタンスの AccessKey secret。

    ご自身の AccessKey secret

    namespace.ots.endpoint

    Tablestore インスタンスのエンドポイント。EMR クラスターの場合、VPC エンドポイントの使用を推奨します。

    http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com

    namespace.backend.raft.async.ots.enabled

    Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:

    • true

    • false

    このパラメーターを true に設定する場合、SmartData サービスが初期化される前にこの機能を有効にする必要があります。

    説明

    サービスの初期化後にこの機能を有効にすることはできません。有効にすると、Tablestore 内のデータがローカルの RocksDB 内のデータよりも古くなるためです。

    true

  6. 設定を保存します。

    1. 右上隅にある Save をクリックします。

    2. 変更する ダイアログボックスで、変更理由を入力し、[Auto-update Configuration] をオンにします。

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

  7. 右上隅で 操作 > > [Start All Components] を選択します。

Tablestore からのメタデータの復元

元のクラスターで Tablestore を使用してリモート非同期ストレージを有効にした場合、Tablestore インスタンスには JindoFS メタデータの完全なコピーが含まれます。元のクラスターを停止またはリリースした後、メタデータを新しいクラスターに復元して、ファイルへのアクセスを再開できます。

  1. オプション:準備作業を実行します。

    1. オプション:元のクラスターからメタデータ統計 (ファイル数とフォルダー数) を収集します。

      [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
              1596      1482809                 25 jfs://test/
    2. 元のクラスター上のすべてのジョブを停止し、メタデータが Tablestore に完全に同期されるまで 30~120 秒待機します。次のコマンドを実行してステータスを確認します。LEADER ノードで _synced=1 が表示された場合、Tablestore 内のデータは完全に同期されています。

      jindo jfs -metaStatus -detail

      以下はコマンド出力の例です。state: LEADER は、現在の Raft ノードが LEADER ノードであることを示します。ログ インデックスは 624625 に更新され、すべてのレプリカが同期されています。

      [RaftPeerImpl]
      peer_id: xxx
      state: LEADER
      readonly: 0
      term: 2
      conf_index: 1
      peers: xxx
      changing_conf: NO    stage: STAGE_NONE
      election_timer: timeout(5000ms) STOPPED
      vote_timer: timeout(5000ms) STOPPED
      stepdown_timer: timeout(5000ms) SCHEDULING(in 2335ms)
      snapshot_timer: timeout(3600000ms) SCHEDULING(in 150305ms)
      storage: [1, 624625]
      disk_index: 624625
      known_applied_index: 624625
      last_log_id: (index=624625,term=2)
      first_index_pinned: 624625
      state_machine: Idle
      last_committed_index: 624625
      last_snapshot_index: 0
      last_snapshot_term: 0
      snapshot_status: IDLE
      replicator_25769803789@xxx  next_index=624626   flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0
      replicator_32985348833259@xxx    next_index=624626   flying_append_entries_size=0 idle hc=2301 ac=623564 ic=0
      OtsUploader: _lastStopIndex=624624, _synced=1
    3. 元のクラスターを停止またはリリースして、他のクラスターが Tablestore インスタンスにアクセスしていないことを確認します。

  2. 新しいクラスターを作成します。

    Tablestore インスタンスと同じリージョンに新しい EMR クラスターを作成し、すべての SmartData サービスを停止します。詳細については、「ローカル Raft バックエンドの設定」の「手順 1」をご参照ください。

  3. 設定を初期化します。

    SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。

    パラメーター

    説明

    namespace.backend.raft.async.ots.enabled

    Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:

    • true

    • false

    false

    namespace.backend.raft.recovery.mode

    Tablestore からのメタデータ復元を有効にするかどうかを指定します。有効な値:

    • true

    • false

    true

  4. 設定を保存します。

    1. 右上隅にある Save をクリックします。

    2. 変更する ダイアログボックスで、変更理由を入力し、[Auto-update Configuration] をオンにします。

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

  5. 右上隅で 操作 > > [Start All Components] を選択します。

  6. 新しいクラスターで SmartData サービスが開始されると、メタデータは Tablestore からローカルの Raft-RocksDB に自動的に復元されます。次のコマンドを実行して、復元の進行状況を監視できます。

    jindo jfs -metaStatus -detail

    コマンドを実行した後、出力の stateLEADER であり、[Recovery From OTS Status] セクションの stateFINISH であることを確認します。これは、復元が完了したことを示します。以下は出力例です。

    [RaftPeerImpl]
    peer_id: xxx:8103:0
    state: LEADER
    readonly: 0
    term: 2
    conf_index: 1
    peers: xxx
    changing_conf: NO    stage: STAGE_NONE
    election_timer: timeout(5000ms) STOPPED
    vote_timer: timeout(5000ms) STOPPED
    stepdown_timer: timeout(5000ms) SCHEDULING(in 3382ms)
    snapshot_timer: timeout(600000ms) SCHEDULING(in 474855ms)
    storage: [1, 153]
    disk_index: 153
    known_applied_index: 153
    last_log_id: (index=153,term=2)
    first_index_pinned: 1
    state_machine: Idle
    last_committed_index: 153
    last_snapshot_index: 1
    last_snapshot_term: 2
    snapshot_status: IDLE
    replicator_1116691496965@xxx: next_index=154   flying_append_entries_size=0 idle hc=262 ac=154 ic=0
    replicator_3311419785217@xxx: next_index=154   flying_append_entries_size=0 idle hc=262 ac=154 ic=0
    
    [Recovery From OTS Status]
    state: FINISH
    [Recovery From OTS Status]
    state: FINISH
    total rows: 1484409
    table `jfs_block_test` 2 rows.
    table `jfs_namespace_cache_ns` 1 rows.
    table `jfs_namespace_test` 1484406 rows.
  7. オプション:新しいクラスターのファイル数が元のクラスターのファイル数と一致することを確認します。

    クラスターは現在、読み取り専用のリカバリーモードです。

    # ファイル数を比較して、元のクラスターのファイル数と一致することを確認します。
    [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.
  8. 設定を更新して、クラスターを通常モードに切り替え、Tablestore への非同期データアップロードを有効にします。

    SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。

    パラメーター

    説明

    namespace.backend.raft.async.ots.enabled

    Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:

    • true

    • false

    true

    namespace.backend.raft.recovery.mode

    Tablestore からのメタデータ復元を有効にするかどうかを指定します。有効な値:

    • true

    • false

    false

  9. クラスターを再起動します。

    1. Clusters タブをクリックします。

    2. Clusters ページで、対象のクラスターを見つけ、[Actions] 列のその他 > 再起動 を選択します。