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 バックエンドの設定
-
EMR クラスターを作成した後、すべての SmartData サービスを停止します。
-
Alibaba Cloud EMR コンソールにログインします。
-
上部のメニューバーで、必要に応じてリージョンとリソースグループを選択します。
-
Clusters タブをクリックします。
-
Clusters ページで、対象のクラスターを見つけ、[Actions] 列の Details をクリックします。
-
左側のナビゲーションペインで、 を選択します。
-
右上隅で を選択します。
-
-
必要に応じて名前空間を追加します。
-
SmartData サービスの [bigboot] タブに移動します。
-
左側のナビゲーションペインで、 を選択します。
-
Configure タブをクリックします。
-
Service Configuration セクションで、[bigboot] タブをクリックします。
-
-
SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。
パラメーター
説明
例
namespace.backend.type
名前空間サービスのストレージバックエンド。有効な値:
-
rocksdb -
ots -
raft
デフォルト値は
rocksdbです。raftnamespace.backend.raft.initial-conf
Raft インスタンスをホストする 3 つのマスターノードのアドレス。この値は固定です。
emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0jfs.namespace.server.rpc-address
Raft インスタンスの 3 つのマスターノードのクライアントアクセスアドレス。この値は固定です。
emr-header-1:8101,emr-header-2:8101,emr-header-3:8101 -
-
オプション:リモート非同期ストレージ用に Tablestore を設定します。
SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。
パラメーター
説明
例
namespace.ots.instance
Tablestore インスタンスの名前。
emr-jfsnamespace.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.comnamespace.backend.raft.async.ots.enabled
Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:
-
true -
false
このパラメーターを
trueに設定する場合、SmartData サービスが初期化される前にこの機能を有効にする必要があります。説明サービスの初期化後にこの機能を有効にすることはできません。有効にすると、Tablestore 内のデータがローカルの RocksDB 内のデータよりも古くなるためです。
true -
-
設定を保存します。
-
右上隅にある Save をクリックします。
-
変更する ダイアログボックスで、変更理由を入力し、[Auto-update Configuration] をオンにします。
-
OK をクリックします。
-
-
右上隅で を選択します。
Tablestore からのメタデータの復元
元のクラスターで Tablestore を使用してリモート非同期ストレージを有効にした場合、Tablestore インスタンスには JindoFS メタデータの完全なコピーが含まれます。元のクラスターを停止またはリリースした後、メタデータを新しいクラスターに復元して、ファイルへのアクセスを再開できます。
-
オプション:準備作業を実行します。
-
オプション:元のクラスターからメタデータ統計 (ファイル数とフォルダー数) を収集します。
[hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ -
元のクラスター上のすべてのジョブを停止し、メタデータが 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 -
元のクラスターを停止またはリリースして、他のクラスターが Tablestore インスタンスにアクセスしていないことを確認します。
-
-
新しいクラスターを作成します。
Tablestore インスタンスと同じリージョンに新しい EMR クラスターを作成し、すべての SmartData サービスを停止します。詳細については、「ローカル Raft バックエンドの設定」の「手順 1」をご参照ください。
-
設定を初期化します。
SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。
パラメーター
説明
例
namespace.backend.raft.async.ots.enabled
Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:
-
true -
false
falsenamespace.backend.raft.recovery.mode
Tablestore からのメタデータ復元を有効にするかどうかを指定します。有効な値:
-
true -
false
true -
-
設定を保存します。
-
右上隅にある Save をクリックします。
-
変更する ダイアログボックスで、変更理由を入力し、[Auto-update Configuration] をオンにします。
-
OK をクリックします。
-
-
右上隅で を選択します。
-
新しいクラスターで SmartData サービスが開始されると、メタデータは Tablestore からローカルの Raft-RocksDB に自動的に復元されます。次のコマンドを実行して、復元の進行状況を監視できます。
jindo jfs -metaStatus -detailコマンドを実行した後、出力の
stateが LEADER であり、[Recovery From OTS Status]セクションのstateが FINISH であることを確認します。これは、復元が完了したことを示します。以下は出力例です。[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. -
オプション:新しいクラスターのファイル数が元のクラスターのファイル数と一致することを確認します。
クラスターは現在、読み取り専用のリカバリーモードです。
# ファイル数を比較して、元のクラスターのファイル数と一致することを確認します。 [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 への非同期データアップロードを有効にします。
SmartData サービスの [bigboot] タブで、次のパラメーターを設定します。
パラメーター
説明
例
namespace.backend.raft.async.ots.enabled
Tablestore への非同期データアップロードを有効にするかどうかを指定します。有効な値:
-
true -
false
truenamespace.backend.raft.recovery.mode
Tablestore からのメタデータ復元を有効にするかどうかを指定します。有効な値:
-
true -
false
false -
-
クラスターを再起動します。
-
Clusters タブをクリックします。
-
Clusters ページで、対象のクラスターを見つけ、[Actions] 列の を選択します。
-