Apache ZooKeeper er et klient/server-system til distribueret koordinering, der afslører en grænseflade, der ligner et filsystem, hvor hver node (kaldet en znode ) kan indeholde data og et sæt børn. Hver znode har et navn og kan identificeres ved hjælp af en filsystemlignende sti (f.eks. /root-znode/sub-znode/my-znode).
I Apache HBase koordinerer, kommunikerer og deler ZooKeeper tilstand mellem Masters og RegionServers. HBase har en designpolitik om kun at bruge ZooKeeper til forbigående data (det vil sige til koordinering og tilstandskommunikation). Så hvis HBases ZooKeeper-data fjernes, er det kun de forbigående operationer, der påvirkes – data kan fortsætte med at blive skrevet og læst til/fra HBase.
I dette blogindlæg får du en kort rundtur i brugen af HBase znodes. Den version af HBase, der bruges til reference her, er 0,94 (leveret i CDH 4.2 og CDH 4.3), men de fleste af znoderne er til stede i tidligere versioner og vil sandsynligvis også være det i fremtidige versioner.
HBase root znode-stien kan konfigureres ved hjælp af hbase-site.xml, og som standard er placeringen "/hbase". Alle znoderne, der henvises til nedenfor, vil få præfiks ved at bruge standard /hbase-placeringen, og konfigurationsegenskaben, der lader dig omdøbe den bestemte znode, vil blive vist ved siden af standard znodenavnet og fremhævet med fed skrift.
ZooKeeper giver en interaktiv skal, der giver dig mulighed for at udforske ZooKeeper-tilstanden - kør den ved at bruge hbase zkcli
og gå gennem znoden via ls
, som i et typisk filsystem. Du kan også få nogle oplysninger om znode-indholdet ved at bruge get
kommando.
$ 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 ...
Betjening
De znoder, som du oftest vil se, er dem, der koordinerer operationer som Region Assignment, Log Splitting og Master Failover, eller holder styr på klyngetilstanden, såsom ROOT-tabellens placering, liste over online-regionsservere og liste over ikke-tildelte regioner .
/hbase (zookeeper.znode.parent) | Rod-znoden, der vil indeholde alle de znoder, der er oprettet/brugt af HBase |
/hbase/hbaseid (zookeeper.znode.clusterId) | Initialiseret af masteren med det UUID, der identificerer klyngen. ID'et gemmes også på HDFS i hdfs:/ |
/hbase/root-region-server (zookeeper.znode.rootserver) | Indeholder placeringen af serveren, der hoster ROOT-regionen. Det anmodes af klienten om at identificere den RegionServer, der er ansvarlig for ROOT og bede om META-placeringerne. (I 0.96 blev ROOT-tabellen fjernet som en del af HBASE-3171, og denne znode er erstattet af /hbase/meta-region-server [zookeeper.znode.metaserver], der indeholder placeringen af serverens hosting META.) |
/hbase/rs (zookeeper.znode.rs) | Ved opstart vil hver RegionServer oprette en sub-znode (f.eks. /hbase/rs/m1.host), der skal beskrive "online" tilstanden for RegionServeren. Masteren overvåger denne znode for at få "online" RegionServer-listen og bruge den under tildeling/balancering. |
/hbase/ikke tildelt (zookeeper.znode.unassigned) | Indeholder en under-znode for hver ikke-tildelt region (f.eks. /hbase/unassigned/ |
/hbase/master (zookeeper.znode.master) | Den "aktive" master vil registrere sin egen adresse i denne znode ved opstart, hvilket gør denne znode til sandhedens kilde til at identificere, hvilken server der er Master. |
/hbase/backup-masters (zookeeper.znode.backup.masters) | Hver inaktive Master vil registrere sig selv som backup Master ved at oprette en sub-znode (hbase/backup-master/m1.host). Denne znode bruges hovedsageligt til at spore, hvilke maskiner der er tilgængelige til at erstatte Master i tilfælde af fejl. |
/hbase/lukning (zookeeper.znode.state) | Beskriver klyngetilstanden, "Er klyngen oppe?" Den oprettes af masteren ved opstart og slettes af masteren ved nedlukning. Det overvåges af RegionServers. |
/hbase/dræning (zookeeper.znode.draining.rs) | Bruges til at dekommissionere mere end én RegionServer ad gangen ved at oprette sub-znodes med formen serverName,port,startCode (f.eks. /hbase/draining/m1.host,60020,1338936306752). Dette giver dig mulighed for at nedlægge flere RegionServere uden at have risikoen for, at regioner midlertidigt flyttes til en RegionServer, der vil blive nedlagt senere. Læs dette for at lære mere om /hbase/draining. |
/hbase/tabel (zookeeper.znode.masterTableEnableDisable) | Bruges af masteren til at spore tabeltilstanden under tildelinger (f.eks. deaktivering/aktivering af tilstande). |
/hbase/splitlog (zookeeper.znode.splitlog) | Bruges af logopdeleren til at spore den ventende log, der skal afspilles, og dens tildeling. (Læs dette for at lære mere om logopdeling). |
Sikkerhed
Adgangskontrollisten (ACL) og Token Provider-coprocessorerne tilføjer yderligere to znoder:en til at synkronisere adgang til tabel-ACL'er og den anden til at synkronisere token-krypteringsnøglerne på tværs af klyngen noder.
/hbase/acl (zookeeper.znode.acl.parent) | acl znode bruges til at synkronisere ændringerne foretaget i _acl_-tabellen af grant/revoke-kommandoerne. Hver tabel vil have en under-znode (/hbase/acl/tabelnavn), der indeholder tabellens ACL'er. (Læs dette for mere information om adgangscontrolleren og ZooKeeper-interaktionen.) |
/hbase/tokenauth (zookeeper.znode.tokenauth.parent) | Token-udbyderen bruges normalt til at give et MapReduce-job adgang til HBase-klyngen. Når en bruger beder om et nyt token, vil oplysningerne blive gemt i en under-znode oprettet for nøglen (/hbase/tokenauth/keys/key-id). |
Replikering
Som hovedregel er alle znoder flygtige, hvilket betyder, at de beskriver en "midlertidig" tilstand - så selvom du fjerner alt fra ZooKeeper, burde HBase være i stand til at genskabe dem. Selvom replikeringsznoderne ikke beskriver en midlertidig tilstand, er det meningen, at de skal være kilden til sandheden for replikationstilstanden, der beskriver replikationstilstanden for hver maskine. (Læs dette for at lære mere om replikering).
/hbase/replikering (zookeeper.znode.replication) | Rodznode, der indeholder alle oplysninger om HBase-replikeringstilstand |
/hbase/replikering/peers (zookeeper.znode.replication.peers) | Hver peer vil have en sub-znode (f.eks. /hbase/replication/peers/ |
/hbase/replikering/peers/ | Spejling af /hbase/replication/peers znode, men her vil hver sub-znode (/hbase/replication/peer-state/ |
/hbase/replikering/tilstand (zookeeper.znode.replication.state) | Angiver om replikering er aktiveret. Replikering kan aktiveres ved at indstille hbase.replication-konfigurationen til sand, eller den kan aktiveres/deaktiveres ved at bruge start/stop-kommandoen i HBase-skallen. (I 0.96 blev denne znode fjernet, og peer-state znode ovenfor bruges som reference.) |
/hbase/replikering/rs (zookeeper.znode.replication.rs) | Indeholder listen over RegionServers i hovedklyngen (/hbase/replikation/rs/ |
Online Snapshot-procedurer
Online snapshots koordineres af Master ved hjælp af ZooKeeper til at kommunikere med RegionServerne ved hjælp af en to-fase-commit-lignende transaktion. (Læs dette for flere detaljer om snapshots.)
/hbase/online-snapshot/acquired | Den erhvervede znode beskriver det første trin i en øjebliksbilledetransaktion. Masteren vil oprette en under-znode til snapshottet (/hbase/online-snapshot/acquired/ |
/hbase/online-snapshot/nået | Når hver RegionServer har tilsluttet sig den erhvervede znode, vil Masteren oprette den nåede znode for snapshottet (/hbase/online-snapshot/reached/ |
/hbase/online-snapshot/abort | Hvis noget fejler på Master-siden eller RegionServer-siden, vil abort-znoden blive oprettet for snapshottet, der fortæller alle, at noget gik galt med snapshottet og at afbryde jobbet. |
Konklusion
Som du kan se, er ZooKeeper en grundlæggende del af HBase. Alle operationer, der kræver koordinering, såsom Regionstildeling, Master-Failover, replikering og snapshots, er bygget på ZooKeeper. (Du kan lære mere om hvorfor/hvordan du ville bruge ZooKeeper i dine applikationer her.)
Selvom de fleste znoder kun er nyttige for HBase, kan nogle - såsom listen over RegionServers (/hbase/rs) eller listen over ikke-tildelte regioner (/hbase/unassigned) - bruges til fejlfinding eller overvågningsformål. Eller, som i tilfældet med /hbase/draining, kan du interagere med dem for at fortælle HBase, hvad du laver med klyngen.
Matteo Bertozzi er softwareingeniør hos Cloudera og committer på HBase-projektet.