Programiranje

Pregled: HBase je zelo razširljiv - in zelo zapleten

Apache HBase se opisuje kot "baza podatkov Hadoop", kar je lahko nekoliko zmedeno, saj se Hadoop običajno nanaša na priljubljeni okvir obdelave MapReduce. Toda Hadoop je resnično krovno ime za celoten ekosistem tehnologij, nekatere pa HBase uporablja za ustvarjanje porazdeljene, v stolpce usmerjene baze podatkov, zgrajene na enakih načelih kot Googlov Bigtable. HBase ne uporablja Hadoopovih možnosti MapReduce neposredno, čeprav se HBase lahko integrira s Hadoopom kot vir ali cilj opravil MapReduce.

Značilnosti HBase so izjemna razširljivost, visoka zanesljivost in prilagodljivost sheme, ki jo dobite iz stolpčno usmerjene baze podatkov. Čeprav je treba tabele in družine stolpcev določiti vnaprej, lahko nove stolpce dodajate sproti. HBase ponuja tudi močno doslednost na ravni vrstic, vgrajeno različico in "koprocesorje", ki zagotavljajo enakovredne sprožilce in shranjene postopke.

[Prav tako na: Obračun velikih podatkov: Cassandra proti HBase | Katero čudno bazo podatkov naj uporabim? | Bossie Awards 2013: Najboljša odprtokodna orodja za velike podatke | NoSQL showdown: MongoDB vs. Couchbase | Vsak dan v dnevniškem dnevniku preberite povzetek ključnih zgodb. ]

HBase je zasnovan za podporo poizvedb o množičnih naborih podatkov in je optimiziran za branje. Za pisanje skuša HBase ohranjati doslednost. Za razliko od "sčasoma skladne" Cassandre HBase ne ponuja različnih nastavitev ravni skladnosti (za potrditev pisanja, potem ko ga je eno vozlišče napisalo ali ga je kvorum vozlišč zapisal). Tako je cena močne doslednosti HBase ta, da je pisanje lahko počasnejše.

HDFS - distribuirani datotečni sistem Hadoop - je osnova ekosistema Hadoop in je datotečni sistem na vrhu, kjer prebiva HBase. HDFS je zasnovan tako, da deluje na osnovni strojni opremi in dopušča okvare vozlišč članov, najbolje za sisteme paketne obdelave, ki imajo raje pretočni dostop do velikih naborov podatkov. Zdi se, da je zaradi tega neprimeren za naključni dostop, ki bi ga pričakovali v sistemih baz podatkov, kot je HBase. Toda HBase sprejema ukrepe za nadomestitev sicer neskladnega vedenja HDFS.

Zookeeper, druga tehnologija Hadoop (čeprav je sedanje različice motorja Hadoop MapReduce ne uporabljajo več), je razdeljena komunikacijska in koordinacijska storitev. Zookeeper vzdržuje sinhronizirano podatkovno strukturo v pomnilniku, do katere lahko dostopa več odjemalcev. Podatkovna struktura je organizirana kot datotečni sistem, čeprav so sestavni deli strukture (znodi) lahko vsebniki podatkov in elementi v hierarhičnem drevesu. Predstavljajte si datotečni sistem, katerega datoteke so lahko tudi imeniki.

HBase uporablja Zookeeper za usklajevanje dejavnosti grozdov in spremljanje zdravja vozlišč članov. Ko zaženete gručo HBase, morate vzporedno zagnati tudi Zookeeper. HBase bo privzeto zagnal in upravljal Zookeeper, čeprav lahko HBase konfigurirate tako, da uporablja ločeno upravljano nastavitev Zookeeper. Strežniške procese Zookeeper lahko celo zaženete na isti strojni opremi kot drugi procesi HBase, vendar to ni priporočljivo, zlasti za grozd HBase z velikim obsegom.

Kako deluje HBase

Natančneje, vrstica je zbirka parov ključ / vrednost, pri čemer je ključ identifikator stolpca, vrednost pa vsebina celice, ki obstaja na presečišču določene vrstice in stolpca. Ker pa je HBase stolpčno usmerjena zbirka podatkov, ne potrebujeta dve vrstici v tabeli enakih stolpcev. Da bi to še bolj zapletlo, so podatki različni v HBase. Dejanske koordinate vrednosti (celice) so nabor {ključ vrstice, ključ stolpca, časovni žig}. Poleg tega je mogoče stolpce razvrstiti v družine stolpcev, kar daje oblikovalcu zbirke podatkov nadaljnji nadzor nad značilnostmi dostopa, saj bodo vsi stolpci znotraj družine stolpcev shranjeni v neposredni bližini.

Operacija zapisovanja v HBase najprej zapiše podatke v dnevnik odobritve ("dnevnik nadaljnjega pisanja"), nato v notranjo pomnilniško strukturo, imenovano MemStore. Ko se MemStore napolni, se splakne na disk kot entiteta, imenovana HFile. Datoteke H se shranijo kot zaporedje podatkovnih blokov, na koncu datoteke pa je dodan indeks. Še en indeks, ki se hrani v pomnilniku, pospešuje iskanje podatkov v datotekah HFiles.

Datoteke HFi so nespremenljive, ko so napisane. Če ključ izbrišete, HBase zabeleži posebno oznako "nagrobni kamen" v spomin na brisanje. Nagrobni kamni se odstranijo (tako kot tudi izbrisani podatki), kadar se datoteke HFi občasno stisnejo.

HBase poskuša najprej zadovoljiti bralne operacije prek MemStore. Če tega ne uspe, HBase preveri še eno strukturo v pomnilniku, BlockStore, ki je bralni predpomnilnik, namenjen pošiljanju pogosto branih podatkov iz pomnilnika in ne iz diskovnih datotek HFiles.

HBase loči vrstice po regijah, ki jih določa nabor tipk vrstic. Vsako regijo v gruči HBase upravlja postopek RegionServer. Običajno obstaja en postopek RegionServer na vozlišče HBase. Ko količina podatkov narašča, HBase razdeli regije in preseli povezane podatke na različna vozlišča v gruči za namene uravnoteženja.

Arhitektura grozdov HBase ni povsem simetrična. Na primer, vsaka gruča mora imeti eno samo aktivno glavno vozlišče. Več vozlišč je mogoče (in bi jih bilo treba) določiti kot glavna vozlišča, toda ko se grozd zažene, se glavni kandidati koordinirajo, tako da je le eden delujoči mojster. Odgovornost poveljnika je, da spremlja regijske strežnike, obravnava preusmeritve regijskih strežnikov in usklajuje delitve regij.

Če se glavno vozlišče zruši, lahko grozd še vedno deluje v stanju dinamičnega ravnovesja - upravlja zahteve za branje in pisanje - vendar ne more izvesti nobene operacije, ki zahteva koordinacijo glavne enote (na primer ponovno uravnoteženje). Zato je dobro določiti več glavnih vozlišč; če in kdaj vladajoči mojster ne bo uspel, bo hitro zamenjan.

HBase lahko zaženete na vrhu izvornega datotečnega sistema za razvojne namene, vendar razporejena grozd HBase deluje na HDFS, kar se - kot smo že omenili - zdi slabo igrišče za HBase. Kljub pretočno usmerjenemu osnovnemu datotečnemu sistemu HBase doseže hiter naključni V / I. To čarovnijo doseže s kombinacijo združevanja zapisov v pomnilnik in trajnih podatkov na disk z uporabo drevesno strukturiranih dreves. Posledično se vsa naključna pisanja izvajajo v pomnilnik in ko se podatki splaknejo na disk, se podatki najprej razvrstijo in nato zaporedno zapišejo s pripadajočim indeksom. Naključno branje najprej poskusimo v pomnilniku, kot je omenjeno zgoraj. Če zahtevanih podatkov ni v pomnilniku, je nadaljnje iskanje po disku hitro, ker so podatki razvrščeni in indeksirani.

Delo s HBase

Čeprav HBase ne podpira transakcij, niti ni sčasoma dosleden; namesto tega HBase podpira močno konsistenco, vsaj na ravni ene vrstice. HBase nima občutka za vrste podatkov; vse je shranjeno kot niz bajtov. Vendar pa HBase definira poseben podatkovni tip "števec", ki predvideva operacijo atomskega prirastka - na primer za štetje pogledov spletne strani. Z enim klicem lahko povečate poljubno število števcev znotraj ene vrstice, ne da bi morali vrstico zakleniti. Upoštevajte, da bodo števci sinhronizirani za operacije pisanja (več zapisov bo vedno izvajalo dosledne korake), ne pa nujno za operacije branja.

Lupina HBase je pravzaprav spremenjena, interaktivna lupina Ruby, ki se izvaja v JRubyju, Ruby pa se izvaja v Java VM. Vse, kar lahko naredite v interaktivni lupini Ruby, lahko storite v lupini HBase, kar pomeni, da je lupina HBase lahko močno skriptno okolje.

Najnovejša različica lupine ponuja nekakšen objektno usmerjen vmesnik za upravljanje tabel HBase. Spremenljivki JRuby lahko na primer dodelite tabelo, nato pa za objekt tabele izdate metodo s standardnim zapisom pik. Če ste na primer definirali tabelo in jo dodelili datoteki myTable spremenljivko, lahko v tabelo vpišete (vstavite) podatke z nečim podobnim:

myTable.put '', '', ''

To bi zapisalo vrednost v vrsto v stolpcu .

Obstaja nekaj neodvisnih GUI za upravljanje HBase, na primer hbase-explorer. HBase sam vključuje nekaj vgrajenih spletnih orodij za spremljanje. Glavno vozlišče HBase služi spletnemu vmesniku na vratih 60010. Pobrskajte po njem in našli boste informacije o samem glavnem vozlišču, vključno z začetnim časom, trenutnimi vrati Zookeeper, seznamom regijskih strežnikov, povprečnim številom regij na regijske strežnike , in tako naprej. Na voljo je tudi seznam tabel. Kliknite tabelo in prikažejo se vam informacije, kot so regijski strežniki, ki gostijo komponente tabele. Na tej strani so tudi kontrolniki za sprožitev stiskanja na tabeli ali razdelitev regij tabele.

Poleg tega vsako vozlišče regijskega strežnika izvaja nadzorni spletni vmesnik na vratih 60030. Tu boste našli veliko meritev: zakasnitve branja in pisanja, na primer razčlenjene na različne percentile. Ogledate si lahko tudi informacije o regijah, ki jih upravlja ta regijski strežnik, in ustvarite smetišče aktivnih niti na strežniku.

Referenčni vodnik HBase vključuje navodila za začetek in pogosta vprašanja. To je dokument v živo, zato boste k vsakem vnosu našli pripombe uporabniške skupnosti. Spletno mesto HBase ponuja tudi povezave do API-ja HBase Java, pa tudi do videoposnetkov in virov informacij HBase zunaj spletnega mesta. Več informacij najdete v wikiju HBase. Dokumentacija HBase je sicer dobra, vendar ni povsem enaka dokumentaciji, ki sem jo videl na drugih spletnih mestih z izdelki, kot sta Cassandra in MongoDB. Kljub temu je po internetu veliko gradiva, skupnost HBase pa je dovolj velika in aktivna, da vsa vprašanja o HBase ne bodo dolgo ostala brez odgovora.

Eden bolj zanimivih nedavnih dodatkov HBase je podpora za "koprocesorje" - uporabniško kodo, ki se izvaja kot del procesov HBase RegionServer in Master. Obstajata približno dve vrsti soprocesorjev: opazovalci in končne točke. Opazovalec je uporabniško napisan razred Java, ki definira metode, ki jih je treba priklicati, ko pride do določenih dogodkov HBase. Zamislite si opazovalca kot nasprotnika HBase sprožilcu RDBMS. En opazovalec, imenovan RegionObserver, lahko poveže določene točke v toku nadzora postopkov manipulacije podatkov, kot je dobili, dal, in izbriši.

Koprocesor končne točke HBase deluje podobno kot shranjeni postopek. Ko je naložen, ga lahko na primer prikliče opazovalec in s tem dovoli dinamično dodajanje novih funkcij v HBase. Obstajajo različni načini za nalaganje koprocesorjev v skupino HBase, tudi prek lupine HBase.

Konfiguriranje velike skupine HBase je lahko težavno. Skupina HBase vključuje glavna vozlišča, procese RegionServer, procese HDFS in celotno gručo Zookeeper, ki teče ena ob drugi. Jasno je, da je odpravljanje napak lahko zapleteno, saj je treba preučiti številne gibljive dele.

HBase je v veliki meri usmerjena na razvijalce. Njegov spletni referenčni vodnik je močno povezan z dokumenti HBase Java API. Če želite razumeti vlogo, ki jo ima določena enota HBase - recimo Filter -, bodite pripravljeni, da jo za popolno razlago izročite dokumentaciji Java API za razred Filter.

Glede na to, da je dostop po vrsticah in da so vrstice indeksirane s ključi vrstic, sledi, da je skrbno načrtovanje strukture ključa vrstic ključnega pomena za dobro delovanje. Ironično je, da so programerji v dobrih starih časih baz podatkov ISAM (Indexed Sequential Access Method) to dobro vedeli: dostop do zbirke podatkov je vse o komponentah - in urejanju teh komponent - v indeksih sestavljenih ključev.

HBase uporablja zbirko preizkušenih tehnologij iz sveta Hadoop, zato je vredno razmisliti pri gradnji velike, razširljive, zelo dostopne, porazdeljene baze podatkov, zlasti za tiste aplikacije, kjer je pomembna doslednost.

Apache HBase 0.94 na prvi pogled

 
Prednosti
  • Vgrajena različica
  • Močna doslednost na ravni zapisa
  • Ponuja sprožilce in shranjene postopke, podobne RDBMS, prek koprocesorjev
  • Zasnovan na preizkušenih Hadoop tehnologijah
  • Skupnost aktivnega razvoja
Slabosti
  • Manjka prijazen poizvedbeni jezik, podoben SQL
  • Veliko gibljivih delov
  • Namestitev zunaj razvojne gruče z enim vozliščem je lahko težavna
PlatformeZahteva različico Java SE 6; lahko zaženete v sistemu Windows z uporabo Cygwin
StroškiBrezplačna odprtokodna različica pod licenco Apache različice 2.0

Copyright sl.verticalshadows.com 2024

$config[zx-auto] not found$config[zx-overlay] not found