これは、Hadoop2.0の最も重要な機能の1つです。 Namenodeの高可用性機能について説明する前に、クォーラムとは何かを知ることが不可欠です。クォーラムは、特定のクラスターが安定していると言うクラスタリングで使用される一般的な用語です。クォーラムはマシンのリストを提供し、クラスターの状態を判断するのに役立ちます。クォーラムには、期待クォーラムと計算クォーラムの2種類があります。
Quorum Journal Manager(QJM)によるNameNodeの高可用性
Hadoop 2.0より前は、NameNodeはHDFSクラスターの単一障害点(SPOF)でした。各クラスターには単一のNameNodeがあり、そのマシンが使用できない場合、NameNodeが再起動されるか、別のマシンで開始されるまで、クラスター全体が使用できなくなります。従来のHAクラスターでは、2つの別々のマシンがNameNodeとして構成されます。どの時点でも、NameNodeの1つはアクティブ状態になり、もう1つはスタンバイ状態になります。アクティブNameNodeは、クラスター内のすべてのクライアント操作を担当しますが、スタンバイは単にスレーブとして機能し、高速フェイルオーバーを提供するのに十分な状態を維持します。
スタンバイノードがその状態をアクティブノードと調整し続けるために、両方のノードは「JournalNodes」(JN)と呼ばれる別々のデーモンのグループと通信します。アクティブノードによって名前空間の変更が実行されると、変更の記録がJournalNodesに記録されます。スタンバイノードは、JNから修正された情報を読み取ることができ、JNの変更を定期的に監視しています。スタンバイノードは変更を確認すると、それらを独自の名前空間に適用します。フェイルオーバーの場合、スタンバイは、状態を「アクティブ状態」に変更する前に、JounalNodesからのすべての変更を読み取ったことを確認します。これにより、フェイルオーバーが発生する前に名前空間の状態が完全に同期されることが保証されます。
高速フェイルオーバーを提供するには、スタンバイノードがクラスター内のブロックの場所に関する最新の最新情報を持っている必要があります。これを実現するために、DataNodeは両方のNameNodeの場所で構成され、ブロックの場所情報とハートビートを両方に送信します。
一度にアクティブにする必要があるのは、NameNodeの1つだけであることが重要です。そうしないと、名前空間の状態が2つの間でずれて、データの損失や誤った結果につながる可能性があります。これを回避するために、JournalNodesは一度に1つのNameNodeのみをライターに許可します。フェイルオーバー中、アクティブになるNameNodeがJournalNodeへの書き込みの責任を引き継ぎます。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。
Pythonでの印刷とは
関連記事:
Hadoop2.0クラスターアーキテクチャフェデレーションの概要