Apache ZooKeeper is een client/server-systeem voor gedistribueerde coördinatie dat een interface blootlegt die lijkt op een bestandssysteem, waarbij elk knooppunt (een znode genoemd) ) kan gegevens en een reeks kinderen bevatten. Elke znode heeft een naam en kan worden geïdentificeerd met behulp van een bestandssysteem-achtig pad (bijvoorbeeld /root-znode/sub-znode/my-znode).
In Apache HBase coördineert, communiceert en deelt ZooKeeper de status tussen de Masters en RegionServers. HBase heeft een ontwerpbeleid waarbij ZooKeeper alleen wordt gebruikt voor tijdelijke gegevens (dat wil zeggen voor coördinatie en staatscommunicatie). Dus als de ZooKeeper-gegevens van de HBase worden verwijderd, worden alleen de tijdelijke bewerkingen beïnvloed:gegevens kunnen blijven worden geschreven en gelezen naar/van HBase.
In deze blogpost krijgt u een korte rondleiding door het gebruik van HBase znodes. De versie van HBase die hier ter referentie wordt gebruikt, is 0.94 (verzonden in CDH 4.2 en CDH 4.3), maar de meeste znodes zijn aanwezig in eerdere versies en zullen dat waarschijnlijk ook zijn in toekomstige versies.
Het HBase root znode-pad is configureerbaar met hbase-site.xml, en standaard is de locatie "/hbase". Alle znodes waarnaar hieronder wordt verwezen, worden voorafgegaan door de standaard /hbase-locatie, en de configuratie-eigenschap waarmee u de specifieke znode kunt hernoemen, wordt weergegeven naast de standaard znode-naam en vetgedrukt gemarkeerd.
ZooKeeper biedt een interactieve shell waarmee je de ZooKeeper-status kunt verkennen — voer het uit met behulp van hbase zkcli
en loop door de znode via ls
, zoals in een typisch bestandssysteem. Je kunt ook wat informatie krijgen over de znode-inhoud door de get
. te gebruiken commando.
$ 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 ...
Bewerkingen
De znodes die u het vaakst zult zien, zijn degenen die bewerkingen coördineren zoals regiotoewijzing, logboeksplitsing en masterfailover, of die de clusterstatus bijhouden, zoals de ROOT-tabellocatie, lijst met online RegionServers en lijst met niet-toegewezen regio's .
/hbase (dierenverzorger.znode.parent) | De root-znode die alle znodes zal bevatten die zijn gemaakt/gebruikt door HBase |
/hbase/hbaseid (zookeeper.znode.clusterId) | Geïnitialiseerd door de Master met de UUID die het cluster identificeert. De ID wordt ook opgeslagen op HDFS in hdfs:/ |
/hbase/root-region-server (zookeeper.znode.rootserver) | Bevat de locatie van de server die de ROOT-regio host. De client vraagt om de RegionServer die verantwoordelijk is voor ROOT te identificeren en om de META-locaties te vragen. (In 0.96 werd de ROOT-tabel verwijderd als onderdeel van HBASE-3171, en deze znode is vervangen door /hbase/meta-region-server [zookeeper.znode.metaserver] die de locatie bevat van de server die META host.) |
/hbase/rs (dierenverzorger.znode.rs) | Bij het opstarten zal elke RegionServer een sub-znode maken (bijv. /hbase/rs/m1.host) die de "online" status van de RegionServer moet beschrijven. De master bewaakt deze znode om de "online" RegionServer-lijst te krijgen en deze te gebruiken tijdens het toewijzen/balanceren. |
/hbase/niet toegewezen (zookeeper.znode.unassigned) | Bevat een sub-znode voor elke niet-toegewezen regio (bijv. /hbase/unassigned/ |
/hbase/master (dierenverzorger.znode.master) | De "actieve" master zal zijn eigen adres in deze znode registreren bij het opstarten, waardoor deze znode de bron van waarheid is om te identificeren welke server de master is. |
/hbase/back-up-masters (zookeeper.znode.backup.masters) | Elke inactieve Master zal zichzelf registreren als back-up Master door een sub-znode aan te maken (hbase/backup-master/m1.host). Deze znode wordt voornamelijk gebruikt om bij te houden welke machines beschikbaar zijn om de Master te vervangen in geval van storing. |
/hbase/afsluiten (dierenverzorger.znode.state) | Beschrijft de clusterstatus, "Is de cluster up?" Het wordt aangemaakt door de Master bij het opstarten en verwijderd door de Master bij het afsluiten. Het wordt bekeken door de RegionServers. |
/hbase/afvoer (dierenverzorger.znode.draining.rs) | Wordt gebruikt om meer dan één RegionServer tegelijk uit bedrijf te nemen door sub-znodes te maken met de vorm serverName,port,startCode (bijvoorbeeld /hbase/draining/m1.host,60020,1338936306752). Hierdoor kunt u meerdere RegionServers buiten gebruik stellen zonder het risico te lopen dat regio's tijdelijk worden verplaatst naar een RegionServer die later buiten gebruik wordt gesteld. Lees dit voor meer informatie over /hbase/draining. |
/hbase/tabel (zookeeper.znode.masterTableEnableDisable) | Gebruikt door de master om de tabelstatus bij te houden tijdens toewijzingen (bijvoorbeeld statussen in-/uitschakelen). |
/hbase/splitlog (zookeeper.znode.splitlog) | Gebruikt door de logboeksplitser om het in behandeling zijnde logboek te volgen om opnieuw af te spelen en de toewijzing ervan. (Lees dit voor meer informatie over het splitsen van logs). |
Beveiliging
De Access Control List (ACL) en de Token Provider-coprocessors voegen nog twee znodes toe:één om de toegang tot tabel-ACL's te synchroniseren en de andere om de token-encryptiesleutels over de clusternodes te synchroniseren.
/hbase/acl (dierenverzorger.znode.acl.parent) | De acl znode wordt gebruikt voor het synchroniseren van de wijzigingen die in de _acl_-tabel zijn aangebracht door de opdrachten voor verlenen/intrekken. Elke tabel heeft een sub-znode (/hbase/acl/tableName) die de ACL's van de tabel bevat. (Lees dit voor meer informatie over de toegangscontroller en de ZooKeeper-interactie.) |
/hbase/tokenauth (dierenverzorger.znode.tokenauth.parent) | De tokenprovider wordt meestal gebruikt om een MapReduce-taak toegang te geven tot het HBase-cluster. Wanneer een gebruiker om een nieuwe token vraagt, wordt de informatie opgeslagen in een sub-znode die voor de sleutel is gemaakt (/hbase/tokenauth/keys/key-id). |
Replicatie
Als algemene regel zijn alle znodes kortstondig, wat betekent dat ze een "tijdelijke" toestand beschrijven - dus zelfs als je alles uit ZooKeeper verwijdert, zou HBase ze moeten kunnen recreëren. Hoewel de replicatie-znodes geen tijdelijke status beschrijven, zijn ze bedoeld als bron van waarheid voor de replicatiestatus, waarbij de replicatiestatus van elke machine wordt beschreven. (Lees dit voor meer informatie over replicatie).
/hbase/replicatie (zookeeper.znode.replicatie) | Root-znode die alle HBase-replicatiestatusinformatie bevat |
/hbase/replicatie/peers (zookeeper.znode.replication.peers) | Elke peer heeft een sub-znode (bijv. /hbase/replication/peers/ |
/hbase/replicatie/peers/ | Spiegel van de /hbase/replication/peers znode, maar hier zal elke sub-znode (/hbase/replication/peer-state/ |
/hbase/replicatie/status (zookeeper.znode.replication.state) | Geeft aan of replicatie is ingeschakeld. Replicatie kan worden ingeschakeld door de hbase.replication-configuratie in te stellen op true, of kan worden in-/uitgeschakeld met behulp van de start/stop-opdracht in de HBase-shell. (In 0.96 is deze znode verwijderd en wordt de peer-state znode hierboven als referentie gebruikt.) |
/hbase/replicatie/rs (zookeeper.znode.replication.rs) | Bevat de lijst met RegionServers in het hoofdcluster (/hbase/replication/rs/ |
Online snapshotprocedures
Online snapshots worden gecoördineerd door de Master die ZooKeeper gebruikt om te communiceren met de RegionServers met behulp van een transactie die lijkt op twee fasen. (Lees dit voor meer details over snapshots.)
/hbase/online-snapshot/acquired | De verworven znode beschrijft de eerste stap van een snapshot-transactie. De Master maakt een sub-znode voor de snapshot (/hbase/online-snapshot/acquired/ |
/hbase/online-snapshot/bereikt | Zodra elke RegionServer zich bij de verworven znode heeft gevoegd, maakt de Master de bereikte znode voor de snapshot (/hbase/online-snapshot/reached/ |
/hbase/online-snapshot/abort | Als er iets mislukt aan de Master-kant of de RegionServer-kant, wordt de abort-znode gemaakt voor de snapshot om iedereen te vertellen dat er iets mis is gegaan met de snapshot en om de taak af te breken. |
Conclusie
Zoals u kunt zien, is ZooKeeper een fundamenteel onderdeel van HBase. Alle bewerkingen die coördinatie vereisen, zoals toewijzing van regio's, Master-Failover, replicatie en snapshots, zijn gebouwd op ZooKeeper. (U kunt hier meer te weten komen over waarom/hoe u ZooKeeper in uw toepassingen zou gebruiken.)
Hoewel de meeste znodes alleen nuttig zijn voor HBase, kunnen sommige - zoals de lijst met RegionServers (/hbase/rs) of de lijst met niet-toegewezen regio's (/hbase/unassigned) - worden gebruikt voor foutopsporing of bewakingsdoeleinden. Of, zoals in het geval met /hbase/draining, kunt u met hen communiceren om HBase te laten weten wat u met het cluster doet.
Matteo Bertozzi is een Software Engineer bij Cloudera en een Committer op het HBase-project.