2015-10-23 6 views
13

Hadoopのdefintiveガイドは言う -Hadoop Namenodeフェールオーバープロセスはどのように機能しますか?

各名前ノードは、その ジョブが失敗のためにその名前ノードを監視するためにある(単純 ハートビートメカニズムを使用して)軽量フェイルオーバ・コントローラ・プロセスを実行し、フェールオーバーをトリガーします名前ノード が失敗します。

どのようにネームノードが独自の障害を検出するために何かを実行できますか?

誰がハートビートを誰に送信しますか?

このプロセスはどこで実行されますか?

名前ノードの障害を検出する方法は?

移行を通知するのは誰ですか?

答えて

27

Apache docs

からZKFailoverController(ZKFC)も監視し、名前ノードの状態を管理のZooKeeperクライアント新しいコンポーネントです。 名前ノードを実行するマシンの各々はまたZKFCを実行し、ZKFCは責任があること:

ヘルスモニタリングからZKFCピングそのローカル名前ノードと定期的にヘルスチェックコマンド。 NameNodeが正常な状態で適時に応答する限り、ZKFCはノードを正常とみなします。ノードがクラッシュ、フリーズ、または不健全な状態になった場合、ヘルス・モニターはそれを不健全なものとしてマークします。

ZooKeeperのセッション管理 - ローカル名前ノードが健全であるとき、ZKFCはZooKeeperの中に開いているセッションを保持しています。ローカルのNameNodeがアクティブな場合は、特殊な "ロック"のzノードも保持されます。このロックはZooKeeperのサポート「ephemeral」ノードを使用します。セッションが終了すると、ロック・ノードは自動的に削除されます。

のZooKeeperベースの選挙 - ローカル名前ノードは健康で、かつZKFCは、他のノードが現在ロックのznodeを保持していないことを認識し、それ自体がロックを取得しようとする場合。成功した場合は、 "が選挙で勝った"となり、ローカルNameNodeがアクティブになるようにフェールオーバーを実行する必要があります。

自動名前ノードのフェイルオーバー・プロセス:

http://www.slideshare.net/cloudera/hdfs-update-lipcon-federal-big-data-apache-hadoop-forum

enter image description here

から

スライド16 HDFS-2185 JIRAの問題の一部であり、このApache PDFを見てくださいHadoop:

典型的なHAクラスタでは、2つの別々のマシンが名前ノードとして構成されています。どの時点でも、名前ノードの1つがアクティブ状態にあり、もう1つがスタンバイ状態にあります。 Active NameNodeはクラスタ内のすべてのクライアント操作を担当し、スタンバイは単にスレーブとして動作し、必要に応じて高速フェールオーバーを提供するのに十分な状態を維持します。スタンバイ名前ノードは、両方のノードがJournalNodes(JNS)と呼ばれる別のデーモンのグループと通信し、アクティブな名前ノードと同期その状態を維持するためには

アクティブノードによってネームスペースの変更が実行された場合、その変更のレコードが永続的にこれらのJNのログに記録されます。スタンバイノードは、これらの編集をJNから読み取り、それ自身の名前空間に適用します。

フェールオーバーが発生した場合、スタンバイはJounalNodeからのすべての編集内容を確実に読み取ってから、アクティブ状態に昇格させます。これにより、フェールオーバーが発生する前に名前空間の状態が完全に同期されます。

ネームノードのうちの1つだけがアクティブであることがHAクラスタにとって重要です。 ZooKeeperは、スプリットブレインのシナリオを回避して、名前ノードの状態がフェールオーバーによって発散しないようにするために使用されています。 http://www.slideshare.net/cloudera/hdfs-futures-world2012-widescreen

enter image description here

:から

スライド8要約する

名前ノードはデーモン&フェイルオーバ・コントローラはデーモンあります。名前ノードデーモンに障害が発生すると、フェールオーバーコントローラデーモンが検出して修正処置を行います。マシン全体がクラッシュしても、ZooKeeperサーバがそれを検出してロックが切れ、他のスタンバイ名ノードがアクティブ名ノードとして選択されます。

+0

Awsome!ありがとう。私は本のテキストが適切ではないと思う、それはconvayしたかったと思う各namenode **(マシン)**は、軽いフェイルオーバーコントローラプロセスを実行し、そのジョブはそのnamenode **(デーモン)**を監視することである**失敗のために – K246

+0

より一般的な質問への質問:Hadoop Nameノードのフェールオーバープロセスの仕組みは? –