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

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

最終更新日:Apr 14, 2025

JindoFS の Namespace Service は、さまざまなメタデータストレージバックエンドをサポートしています。デフォルトでは、RocksDB が使用されます。このトピックでは、RocksDB をメタデータストレージバックエンドとして構成する方法について説明します。

背景情報

RocksDB は高可用性モードで構成できません。メタデータストレージバックエンドを高可用性モードで構成する必要がある場合は、Raft インスタンスを使用することをお勧めします。詳細については、「Raft-RocksDB-Tablestore を使用してメタデータを保存する」をご参照ください。
次の図は、Namespace Service の単一の RocksDB インスタンスの構造を示しています。RocksDB

RocksDB をメタデータストレージバックエンドとして構成する

  1. SmartData サービスに移動します。
    1. Alibaba Cloud EMR コンソール にログインします。
    2. 上部のナビゲーションバーで、クラスターが存在するリージョンを選択します。必要に応じてリソースグループを選択します。デフォルトでは、アカウントのすべてのリソースが表示されます。
    3. [クラスター管理] タブをクリックします。
    4. 表示される [クラスター管理] ページで、ターゲットクラスターを見つけ、[アクション] 列の [詳細] をクリックします。
    5. 左側のナビゲーションペインで、[クラスターサービス] をクリックし、次に [smartdata] をクリックします。
  2. SmartData サービスの [namespace] タブに移動します。
    1. [構成] タブをクリックします。
    2. [サービス構成] セクションの [namespace] タブをクリックします。
      namespace
  3. [namespace.backend.type][rocksdb] に設定します。
  4. 構成を保存します。
    1. [サービス構成] セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。
  5. 右上隅にある Jindo Namespace Serviceの再起動[アクション] ドロップダウンリストから を選択します。
  6. オプション:Tablestore インスタンスをリモート非同期ストレージバックエンドとして構成します。

    EMR クラスターを Tablestore インスタンスにバインドし、Tablestore インスタンスを JindoFS の Namespace Service の追加ストレージメディアとして使用できます。EMR は、ローカルの RocksDB から 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.rocksdb.async.ots.enabled]Tablestore への非同期アップロードを有効にするかどうかを指定します。有効な値:
    • true
    • false
    このパラメーターを true に設定します。SmartData サービスの初期化が完了していないことを確認してください。
    説明 初期化が完了している場合、メタデータがローカルの RocksDB に既に生成されているため、設定は有効になりません。
    true
  7. 構成を保存します。
    1. [サービス構成] セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。
  8. 右上隅にある すべてのコンポーネントを開始[アクション] ドロップダウンリストから を選択します。

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

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

  1. リカバリの準備をします。
    1. オプション:元の EMR クラスターのメタデータ統計を収集します。メタデータ統計は、ファイルとフォルダーの数を示します。
      hadoop fs -count jfs://test/
      次のような情報が返されます:
       1596      1482809                 25 jfs://test/

      フォルダー数は 1596 で、ファイル数は 1,482,809 です。

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