Apache ZooKeeperは、分散調整用のクライアント/サーバーシステムであり、ファイルシステムと同様のインターフェイスを公開します。各ノード( znode と呼ばれます) )データと子のセットが含まれる場合があります。各znodeには名前があり、ファイルシステムのようなパス(たとえば、/ root-znode / sub-znode / my-znode)を使用して識別できます。
Apache HBaseでは、ZooKeeperはマスターとRegionServerの間で状態を調整、通信、共有します。 HBaseには、一時的なデータ(つまり、調整と状態通信)にのみZooKeeperを使用するという設計ポリシーがあります。したがって、HBaseのZooKeeperデータが削除された場合、一時的な操作のみが影響を受けます。データは引き続きHBaseとの間で読み書きできます。
このブログ投稿では、HBaseznodeの使用法について簡単に説明します。ここで参照するために使用されるHBaseのバージョンは0.94(CDH4.2およびCDH4.3内に出荷)ですが、ほとんどのznodeは以前のバージョンに存在し、将来のバージョンにも存在する可能性があります。
HBaseルートznodeパスは、hbase-site.xmlを使用して構成可能であり、デフォルトでは、場所は「/hbase」です。以下で参照されているすべてのznodeには、デフォルトの/ hbaseの場所を使用してプレフィックスが付けられ、特定のznodeの名前を変更できる構成プロパティがデフォルトのznode名の横に表示され、太字で強調表示されます。
ZooKeeperは、ZooKeeperの状態を探索できるインタラクティブなシェルを提供します— hbase zkcli
を使用して実行します ls
を介してznodeをウォークスルーします 、一般的なファイルシステムのように。 get
を使用して、znodeコンテンツに関する情報を取得することもできます。 コマンド。
$ hbase zkcli [zk: localhost:2181(CONNECTED) 0] ls / [hbase, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /hbase [splitlog, online-snapshot, unassigned, root-region-server, rs, backup-masters, draining, table, master, shutdown, hbaseid] [zk: localhost:2181(CONNECTED) 2] get /hbase/root-region-server 3008@u1310localhost,60020,1382107614265 dataLength = 44 numChildren = 0 ...
操作
最も頻繁に表示されるznodeは、リージョンの割り当て、ログ分割、マスターフェイルオーバーなどの操作を調整したり、ROOTテーブルの場所、オンラインのRegionServerのリスト、割り当てられていないリージョンのリストなどのクラスターの状態を追跡したりするものです。 。
/ hbase (zookeeper.znode.parent) | HBaseによって作成/使用されるすべてのznodeを含むルートznode |
/ hbase / hbaseid (zookeeper.znode.clusterId) | クラスターを識別するUUIDを使用してマスターによって初期化されます。 IDは、HDFSのhdfs:/ |
/ hbase / root-region-server(zookeeper.znode.rootserver) | ROOTリージョンをホストしているサーバーの場所が含まれています。クライアントは、ROOTを担当するRegionServerを識別し、METAの場所を尋ねます。 (0.96では、ROOTテーブルがHBASE-3171の一部として削除され、このznodeは、METAをホストしているサーバーの場所を含む/ hbase / meta-region-server [zookeeper.znode.metaserver]に置き換えられました。) |
/ hbase / rs (zookeeper.znode.rs) | 起動時に、各RegionServerは、RegionServerの「オンライン」状態を記述することになっているサブznode(例:/hbase/rs/m1.host)を作成します。マスターはこのznodeを監視して、「オンライン」のRegionServerリストを取得し、割り当て/バランシング中にそれを使用します。 |
/ hbase/未割り当て (zookeeper.znode.unassigned) | 割り当てられていないリージョンごとにサブznodeが含まれます(例:/ hbase / unassigned / <リージョン名>)。このznodeは、割り当てマネージャーが割り当てる領域を検出するために使用されます。 (Assignment Managerの詳細については、これをお読みください。) |
/ hbase/マスター (zookeeper.znode.master) | 「アクティブな」マスターは、起動時にこのznodeに独自のアドレスを登録し、このznodeをどのサーバーがマスターであるかを識別するための信頼できる情報源にします。 |
/ hbase / backup-masters (zookeeper.znode.backup.masters) | 非アクティブな各マスターは、サブznode(hbase / backup-master / m1.host)を作成することにより、自身をバックアップマスターとして登録します。このznodeは主に、障害が発生した場合にマスターを置き換えるために使用できるマシンを追跡するために使用されます。 |
/ hbase/シャットダウン (zookeeper.znode.state) | クラスターの状態を説明します。「クラスターは稼働していますか?」起動時にマスターによって作成され、シャットダウン時にマスターによって削除されます。これはRegionServersによって監視されています。 |
/ hbase/ドレイン (zookeeper.znode.draining.rs) | serverName、port、startCode の形式でサブznodeを作成することにより、一度に複数のRegionServerを廃止するために使用されます (たとえば、/ hbase /draining / m1.host、60020,1338936306752)。これにより、リージョンが一時的にRegionServerに移動され、後で廃止されるリスクを冒すことなく、複数のRegionServerを廃止できます。 / hbase /drainingの詳細については、これをお読みください。 |
/ hbase/テーブル (zookeeper.znode.masterTableEnableDisable) | 割り当て中のテーブルの状態を追跡するためにマスターによって使用されます(たとえば、状態の無効化/有効化)。 |
/ hbase / splitlog (zookeeper.znode.splitlog) | 再生する保留中のログとその割り当てを追跡するために、ログスプリッターによって使用されます。 (ログ分割の詳細については、これをお読みください。) |
セキュリティ
アクセス制御リスト(ACL)とトークンプロバイダーコプロセッサーは、さらに2つのznodeを追加します。1つはテーブルACLへのアクセスを同期するためのもので、もう1つはクラスターノード間でトークン暗号化キーを同期するためのものです。
/ hbase / acl (zookeeper.znode.acl.parent) | acl znodeは、grant/revokeコマンドによって_acl_テーブルに加えられた変更を同期するために使用されます。各テーブルには、テーブルのACLを含むサブznode(/ hbase / acl / tableName)があります。 (アクセスコントローラーとZooKeeperの相互作用の詳細については、これをお読みください。) |
/ hbase / tokenauth (zookeeper.znode.tokenauth.parent) | トークンプロバイダーは通常、MapReduceジョブがHBaseクラスターにアクセスできるようにするために使用されます。ユーザーが新しいトークンを要求すると、情報はキー用に作成されたサブznode(/ hbase / tokenauth / keys / key-id)に保存されます。 |
複製
原則として、すべてのznodeは一時的なものです。つまり、「一時的な」状態を表しているため、ZooKeeperからすべてを削除しても、HBaseはそれらを再作成できるはずです。レプリケーションznodeは一時的な状態を記述しませんが、各マシンのレプリケーション状態を記述する、レプリケーション状態の信頼できる情報源となることを目的としています。 (レプリケーションの詳細については、これをお読みください。)
/ hbase/レプリケーション (zookeeper.znode.replication) | すべてのHBaseレプリケーション状態情報を含むルートznode |
/ hbase/レプリケーション/ピア (zookeeper.znode.replication.peers) | 各ピアには、ピアへの接続を可能にするZKアンサンブルのアドレスを含むサブznode(例:/ hbase / Replication / peers / |
/ hbase / replication / peers / | / hbase / Replication / peers znodeのミラーですが、ここでは各サブznode(/ hbase / Replication / peer-state / |
/ hbase/レプリケーション/状態 (zookeeper.znode.replication.state) | レプリケーションが有効かどうかを示します。レプリケーションは、hbase.replication構成をtrueに設定することで有効にするか、HBaseシェルでstart/stopコマンドを使用して有効/無効にすることができます。 (0.96では、このznodeが削除され、上記のピア状態のznodeが参照として使用されます。) |
/ hbase/レプリケーション/rs (zookeeper.znode.replication.rs) | メインクラスター(/ hbase / Replication / rs / |
オンラインスナップショット手順
オンラインスナップショットは、マスターがZooKeeperを使用して調整し、2フェーズコミットのようなトランザクションを使用してRegionServerと通信します。 (スナップショットの詳細については、こちらをお読みください。)
/ hbase / online-snapshot / acquired | 取得したznodeは、スナップショットトランザクションの最初のステップを表します。マスターはスナップショットのサブznodeを作成します(/ hbase / online-snapshot / acquired / |
/ hbase/オンラインスナップショット/到達 | 各RegionServerが取得したznodeに参加すると、マスターはスナップショット(/ hbase / online-snapshot /reached / |
/ hbase / online-snapshot / abort | マスター側またはRegionServer側で問題が発生した場合、スナップショットに対して中止znodeが作成され、スナップショットに問題が発生したことを全員に通知し、ジョブを中止します。 |
結論
ご覧のとおり、ZooKeeperはHBaseの基本的な部分です。リージョンの割り当て、マスターフェイルオーバー、レプリケーション、スナップショットなど、調整が必要なすべての操作は、ZooKeeper上に構築されています。 (アプリケーションでZooKeeperを使用する理由/方法について詳しくは、こちらをご覧ください。)
ほとんどのznodeはHBaseにのみ役立ちますが、RegionServerのリスト(/ hbase / rs)や未割り当て領域のリスト(/ hbase / unassigned)などの一部は、デバッグまたは監視の目的で使用される場合があります。または、/ hbase /drainingの場合のように、それらと対話して、クラスターで何をしているのかをHBaseに知らせることができます。
Matteo Bertozziは、Clouderaのソフトウェアエンジニアであり、HBaseプロジェクトのコミッターです。