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

E-MapReduce:Raft-RocksDB-Tablestore を使用してメタデータを保存する

最終更新日:Apr 14, 2025

E-MapReduce(EMR)V3.27.0 以降では、Raft-RocksDB-Tablestore を使用して、JindoFS の Namespace Service によって管理されるメタデータを保存できます。 EMR JindoFS クラスタを作成する場合は、3 つのマスターノードを作成し、マスターノードに Raft インスタンスをデプロイします。 Raft インスタンスの各ピアノードは、ローカルの Raft-RocksDB を使用してメタデータを保存します。

前提条件

  • Tablestore インスタンスが作成されている。高性能インスタンスを使用することをお勧めします。 詳細については、「インスタンスの作成」をご参照ください。
    説明 トランザクション機能を有効にする必要があります。
  • 3 つのマスターノードを持つ EMR クラスタが作成されている。 詳細については、「クラスタの作成」をご参照ください。3 Master

背景情報

RocksDB は、Raft プロトコルに基づいて 3 つのノード間のデータレプリケーションをサポートしています。 EMR クラスタを Tablestore インスタンスにバインドし、Tablestore インスタンスを JindoFS の Namespace Service の追加ストレージメディアとして使用できます。 EMR は、ローカルの RocksDB から Tablestore インスタンスにメタデータをリアルタイムで非同期的にアップロードします。

次の図は、Namespace Service のための高可用性 Raft-RocksDB-Tablestore のアーキテクチャを示しています。Raft + RocksDB + Tablestore

ローカルストレージバックエンドとして Raft インスタンスを設定する

  1. EMR クラスタのすべての SmartData コンポーネントを一時停止します。
    1. Alibaba Cloud EMR コンソール にログインします。
    2. 上部のナビゲーションバーで、クラスタが存在するリージョンを選択 し、ビジネス要件に基づいてリソースグループを選択します
    3. [クラスタ管理] タブをクリックします。
    4. [クラスタ管理] ページで、クラスタを見つけて、[アクション] 列の [詳細] をクリックします。
    5. 左側のナビゲーションペインで、[クラスタサービス] > SmartData を選択します。
    6. 右上隅にある すべてのコンポーネントを停止[アクション] ドロップダウンリストから を選択します。
  2. ビジネス要件に基づいて Namespace Service パラメータを設定します。
    詳細については、「ブロックストレージモードで JindoFS を使用する」をご参照ください。
  3. SmartData サービスの [namespace] タブに移動します。
    1. 左側のナビゲーションペインで、[クラスタサービス] > SmartData を選択します。
    2. [設定] タブをクリックします。
    3. [サービス設定] セクションで、[namespace] タブをクリックします。
  4. [namespace] タブで、次の表に示すパラメータを設定します。
    パラメータ説明
    namespace.backend.typeNamespace Service のバックエンドストレージタイプ。有効な値:
    • rocksdb
    • ots
    • raft

    デフォルト値:rocksdb。 このパラメータを raft に設定します。

    raft
    namespace.backend.raft.initial-confRaft インスタンスがデプロイされている 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 をスキップします。
  5. オプション:Tablestore インスタンスをリモート非同期ストレージバックエンドとして設定します。
    [namespace] タブで、次の表に示すパラメータを設定します。
    パラメータ説明
    namespace.ots.instanceTablestore インスタンスの名前。emr-jfs
    namespace.ots.accessKeyTablestore インスタンスにアクセスするために使用される AccessKey ID。kkkkkk
    namespace.ots.accessSecretTablestore インスタンスにアクセスするために使用される AccessKey シークレット。XXXXXX
    namespace.ots.endpointTablestore インスタンスのエンドポイント。 VPC エンドポイントを使用することをお勧めします。http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com
    namespace.backend.raft.async.ots.enabledTablestore への非同期アップロードを有効にするかどうかを指定します。有効な値:
    • true
    • false
    このパラメータを true に設定します。 SmartData サービスの初期化が完了していないことを確認してください。
    説明 初期化が完了している場合、ローカルの RocksDB にメタデータが既に生成されているため、設定は有効になりません。
    true
  6. 設定を保存します。
    1. [サービス設定] セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、説明を指定し、[設定の自動更新] をオンにします。
    3. [OK] をクリックします。
  7. 右上隅にある すべてのコンポーネントを開始[アクション] ドロップダウンリストから を選択します。

Tablestore インスタンスからメタデータをリカバリする

EMR クラスタのリモート非同期ストレージバックエンドとして Tablestore インスタンスを設定した場合、JindoFS メタデータの完全なレプリカが Tablestore インスタンスに保存されます。 EMR クラスタを停止またはリリースした後、Tablestore インスタンスから新しい EMR クラスタに JindoFS メタデータをリカバリできます。 これにより、新しい EMR クラスタから元のファイルにアクセスできます。

  1. オプション:リカバリの準備をします。
    1. オプション:元の EMR クラスタのメタデータ統計を収集します。 メタデータ統計は、ファイルとフォルダの数を示します。
        hadoop fs -count jfs://test/
              // フォルダ数 ファイル数
              1596      1482809                 25 jfs://test/
      
    2. 元の EMR クラスタで実行されているジョブを停止します。 EMR がクラスタのすべてのメタデータを Tablestore インスタンスに同期するまで、30 ~ 120 秒待つ必要がある場合があります。 次のコマンドを実行して、メタデータの状態を表示します。 コマンド出力に LEADER ノードの _synced=1 が含まれている場合、最新のメタデータは Tablestore インスタンスに同期されています。
      jindo jfs -metaStatus -detail
      View metadata status
    3. 元の EMR クラスタを停止またはリリースし、Tablestore インスタンスにアクセスしているクラスタがないことを確認します。
  2. EMR クラスタを作成します。
    Tablestore インスタンスと同じリージョンに存在する EMR クラスタを作成します。 すべての SmartData コンポーネントを一時停止します。 詳細については、「ローカルストレージバックエンドとして Raft インスタンスを設定する」をご参照ください。
  3. メタデータリカバリのパラメータを設定します。
    [namespace] タブで、次の表に示すパラメータを設定します。
    パラメータ説明必須値
    namespace.backend.raft.async.ots.enabledTablestore への非同期アップロードを有効にするかどうかを指定します。有効な値:
    • true
    • false
    false
    namespace.backend.raft.recovery.modeTablestore からのメタデータリカバリを有効にするかどうかを指定します。有効な値:
    • true
    • false
    true
  4. 設定を保存します。
    1. [サービス設定] セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、説明を指定し、[設定の自動更新] をオンにします。
    3. [OK] をクリックします。
  5. 右上隅にある すべてのコンポーネントを開始[アクション] ドロップダウンリストから を選択します。
  6. 新しい EMR クラスタの SmartData サービスがアクティブ化されると、EMR は Tablestore インスタンスからローカルの Raft-RocksDB にメタデータを自動的にリカバリします。 次のコマンドを実行して、リカバリの進捗状況を表示できます。
    jindo jfs -metaStatus -detail
    LEADER ノードの状態が FINISH の場合、リカバリは完了です。次の図を参照してください。View recovery progress
  7. オプション:新しい 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.
  8. Tablestore への非同期アップロードを有効にし、Tablestore からのリカバリを無効にします。
    [namespace] タブで、次の表に示すパラメータを設定します。
    パラメータ説明必須値
    namespace.backend.raft.async.ots.enabledTablestore への非同期アップロードを有効にするかどうかを指定します。有効な値:
    • true
    • false
    true
    namespace.backend.raft.recovery.modeTablestore からのメタデータリカバリを有効にするかどうかを指定します。有効な値:
    • true
    • false
    false
  9. 新しい EMR クラスタを再起動します。
    1. [クラスタ管理] タブをクリックします。
    2. [クラスタ管理] ページで、クラスタを見つけます。 このクラスタの [アクション] 列で、[詳細] をクリックし、[再起動] を選択します。