Ohjelmointi

Katsaus: HBase on massiivisesti skaalautuva - ja erittäin monimutkainen

Apache HBase kuvaa itseään "Hadoop-tietokannaksi", mikä voi olla hieman hämmentävää, koska Hadoopin ymmärretään yleensä viittaavan suosittuun MapReduce-prosessointikehykseen. Mutta Hadoop on oikeastaan ​​kattava nimi koko tekniikan ekosysteemille, joista osaa HBase käyttää luomaan hajautetun, sarakekohtaisen tietokannan, joka on rakennettu samoille periaatteille kuin Googlen Bigtable. HBase ei käytä Hadoopin MapReduce-ominaisuuksia suoraan, vaikka HBase voi integroitua Hadoopin kanssa toimiakseen MapReduce-töiden lähteenä tai määränpäänä.

HBasen tunnusmerkit ovat äärimmäinen skaalautuvuus, korkea luotettavuus ja kaavion joustavuus, jonka saat sarakekohtaisesta tietokannasta. Vaikka taulukot ja sarakeperheet on määriteltävä etukäteen, voit lisätä uusia sarakkeita lennossa. HBase tarjoaa myös vahvan rivitason yhdenmukaisuuden, sisäänrakennetut versiot ja "rinnakkaisprosessorit", jotka tarjoavat laukaisijoiden ja tallennettujen menettelyjen vastaavuudet.

[Myös: Big data showdown: Cassandra vs. HBase | Mitä kummajaista tietokantaa minun pitäisi käyttää? | Bossie Awards 2013: parhaat avoimen lähdekoodin big data -työkalut | NoSQL-näyttely: MongoDB vs. Couchbase | Saat tiivistelmän tärkeimmistä tarinoista joka päivä Daily-uutiskirjeessä. ]

Suunniteltu tukemaan massiivisten tietojoukkojen kyselyitä, HBase on optimoitu lukutehoon. Kirjoituksia varten HBase pyrkii ylläpitämään johdonmukaisuutta. Toisin kuin "lopulta yhdenmukainen" Cassandra, HBase ei tarjoa erilaisia ​​sakeustasotasoja (kirjeen kuittaamiseksi sen jälkeen, kun yksi solmu on kirjoittanut sen tai solmujen koorumi on kirjoittanut sen). Siten HBasen vahvan sakeuden hinta on se, että kirjoitus voi olla hitaampaa.

HDFS - Hadoopin hajautettu tiedostojärjestelmä - on Hadoop-ekosysteemin perusta, ja se on tiedostojärjestelmä, jonka päällä HBase asuu. Suunniteltu toimimaan hyödykelaitteistoilla ja sietämään jäsenen solmujen epäonnistumisia, HDFS toimii parhaiten eräkäsittelyjärjestelmissä, jotka suosivat suoratoistettua pääsyä suurille tietojoukoille. Tämän vuoksi näyttää siltä, ​​että se ei sovellu HBase-kaltaisissa tietokantajärjestelmissä odotettavissa olevaan satunnaiskäyttöön. Mutta HBase ryhtyy toimiin kompensoidakseen HDFS: n muuten epäyhtenäisen käyttäytymisen.

Zookeeper, toinen Hadoop-tekniikka (vaikka sitä ei enää käytetä Hadoop MapReduce -moottorin nykyisissä versioissa), on hajautettu viestintä- ja koordinointipalvelu. Zookeeper ylläpitää synkronoitua, muistissa olevaa tietorakennetta, jota useat asiakkaat voivat käyttää. Tietorakenne on järjestetty tiedostojärjestelmän tavoin, vaikka rakenteen komponentit (znodit) voivat olla datasäiliöitä sekä hierarkkisen puun elementtejä. Kuvittele tiedostojärjestelmää, jonka tiedostot voivat olla myös hakemistoja.

HBase käyttää Zookeeperia koordinoimaan klusteritoimintoja ja seuraamaan jäsenen solmujen kuntoa. Kun suoritat HBase-klusteria, sinun on suoritettava myös Zookeeper rinnakkain. HBase suorittaa ja hallitsee Zookeeperia oletusarvoisesti, vaikka voit määrittää HBasen käyttämään erikseen hallittua Zookeeper-asetusta. Voit jopa suorittaa Zookeeper-palvelinprosessit samalla laitteistolla kuin muut HBase-prosessit, mutta sitä ei suositella, etenkään suurten volyymien HBase-klusterille.

Kuinka HBase toimii

Tarkemmin sanottuna rivi on kokoelma avain / arvo-pareja, avain on sarakkeen tunniste ja arvo on solun sisältö, joka on tietyn rivin ja sarakkeen risteyksessä. Koska HBase on sarakekohtainen tietokanta, kahdella taulukon rivillä ei tarvitse olla samoja sarakkeita. Asiaa vaikeuttaa edelleen, että tiedot versioidaan HBasessa. Arvon (solun) todelliset koordinaatit ovat kaksinkertainen {rivin avain, sarake avain, aikaleima}. Lisäksi sarakkeet voidaan ryhmitellä sarakeperheiksi, mikä antaa tietokannan suunnittelijalle mahdollisuuden hallita pääsyominaisuuksia, koska kaikki sarakeperheen sarakkeet tallennetaan lähellä toisiaan.

HBasen kirjoitusoperaatio tallentaa tiedot ensin sitoutumislokiin ("eteenpäin kirjoitettava loki"), sitten sisäiseen muistirakenteeseen, jota kutsutaan MemStoreiksi. Kun MemStore täyttyy, se huuhdellaan levylle HFile-nimisenä kokonaisuutena. H-tiedostot tallennetaan tietolohkoina, hakemistoon liitettynä tiedoston loppuun. Toinen muistissa oleva hakemisto nopeuttaa tietojen etsimistä HFileistä.

H-tiedostot ovat muuttumattomia kirjoitettuaan. Jos avain poistetaan, HBase tallentaa erityisen "hautakivi" -merkin poiston muistoksi. Hautakivet poistetaan (samoin kuin poistetut tiedot), kun HF-tiedostoja tiivistetään säännöllisesti.

HBase yrittää tyydyttää lukutoiminnot ensin MemStore-palvelun kautta. Muussa tapauksessa HBase tarkistaa vielä yhden muistin sisäisen rakenteen, BlockStore-muistin, joka on luettu välimuisti, joka on suunniteltu toimittamaan usein luettuja tietoja muistista eikä levypohjaisista HF-tiedostoista.

HBase rikkoo rivit alueittain, jotka määritetään rivinäppäinten alueella. Jokaista HBase-klusterin aluetta hallinnoi RegionServer-prosessi. Tyypillisesti HBase-solmua kohden on yksi RegionServer-prosessi. Tietomäärän kasvaessa HBase jakaa alueet ja siirtää niihin liittyvät tiedot klusterin eri solmuihin tasapainottamista varten.

HBasen klusteriarkkitehtuuri ei ole täysin symmetrinen. Esimerkiksi jokaisella klusterilla on oltava yksi aktiivinen pääsolmu. Useita solmuja voidaan (ja pitäisi) nimetä pääsolmuiksi, mutta kun klusteri käynnistyy, ehdokasmestarit koordinoivat niin, että vain yksi on toimiva päällikkö. Päällikön vastuulla on seurata aluepalvelimia, käsitellä aluepalvelinten vikasietoja ja koordinoida aluejakaumia.

Jos pääsolmu kaatuu, klusteri voi silti toimia vakaassa tilassa - hallita luku- ja kirjoituspyyntöjä - mutta ei voi suorittaa mitään toimintoja, jotka vaativat isännän koordinointia (kuten tasapainottamista). Siksi on hyvä määrittää useita pääsolmuja; jos hallitseva päällikkö epäonnistuu, se korvataan nopeasti.

Voit ajaa HBasea alkuperäisen tiedostojärjestelmän yläpuolella kehitystarkoituksia varten, mutta käytössä oleva HBase-klusteri toimii HDFS: llä, mikä - kuten aiemmin mainittiin - näyttää olevan heikko leikkipaikka HBaselle. Suoratoistoon suuntautuneesta taustalla olevasta tiedostojärjestelmästä huolimatta HBase saavuttaa nopean satunnaisen I / O: n. Se saavuttaa tämän taian yhdistämällä kirjoituserät muistiin ja pysyvät tiedot levylle lokirakenteisten yhdistämispuiden avulla. Tämän seurauksena kaikki satunnaiset kirjoitukset suoritetaan muistissa, ja kun data huuhdellaan levylle, data ensin lajitellaan ja kirjoitetaan sitten peräkkäin mukana olevan hakemiston kanssa. Satunnaiset lukut yritetään ensin muistissa, kuten edellä mainittiin. Jos pyydettyjä tietoja ei ole muistissa, seuraava levyhaku on nopeaa, koska tiedot lajitellaan ja indeksoidaan.

Työskentely HBasen kanssa

Vaikka HBase ei tue tapahtumia, se ei myöskään ole lopulta johdonmukaista; pikemminkin HBase tukee vahvaa tasaisuutta ainakin yhden rivin tasolla. HBase ei tunne tietotyyppejä; kaikki tallennetaan tavuina. HBase määrittelee kuitenkin erityisen "laskurin" tietotyypin, joka tarjoaa atomin lisäysoperaation - hyödyllinen esimerkiksi verkkosivun näkymien laskemiseen. Voit lisätä mitä tahansa määrää laskureita yhdellä rivillä yhden puhelun kautta ilman, että sinun tarvitsee lukita riviä. Huomaa, että laskurit synkronoidaan kirjoitusoperaatioille (useita kirjoituksia suoritetaan aina tasaisesti), mutta ei välttämättä lukutoiminnoille.

HBase-kuori on itse asiassa muokattu, interaktiivinen Ruby-kuori, joka toimii JRubyssa, ja Ruby suorittaa Java VM: ssä. Kaikki mitä voit tehdä interaktiivisessa Ruby-kuoressa, jonka voit tehdä HBase-kuoressa, mikä tarkoittaa, että HBase-kuori voi olla tehokas komentosarjaympäristö.

Kuoren uusin versio tarjoaa eräänlaisen olio-käyttöliittymän HBase-taulukoiden käsittelyyn. Voit esimerkiksi määrittää taulukon JRuby-muuttujalle ja antaa sitten menetelmän taulukko-objektille käyttämällä standardipistemerkintää. Esimerkiksi, jos olet määrittänyt taulukon ja määrittänyt sen taulukkoon myTable muuttuja, voit kirjoittaa (laittaa) tietoja taulukkoon esimerkiksi:

myTable.put '', '', ''

Tämä kirjoittaisi arvon riviin sarakkeessa .

HBaselle on joitain kolmannen osapuolen hallinnan käyttöliittymiä, kuten hbase-explorer. HBase itse sisältää joitain sisäänrakennettuja verkkopohjaisia ​​valvontatyökaluja. HBase-pääsolmu palvelee verkkoliitäntää portissa 60010. Selaa sitä ja löydät tietoja pääsolmusta itsestään, mukaan lukien aloitusaika, nykyinen Zookeeper-portti, luettelo aluepalvelimista, alueiden keskimääräinen lukumäärä aluepalvelimia kohden , ja niin edelleen. Mukana on myös luettelo taulukoista. Napsauta taulukkoa ja sinulle näytetään tietoja, kuten aluepalvelimet, jotka isännöivät taulukon komponentteja. Tällä sivulla on myös säätimet pöydän tiivistämisen aloittamiseksi tai taulukon alueiden jakamiseksi.

Lisäksi jokainen aluepalvelinsolmu käyttää seurannan Web-käyttöliittymää portissa 60030. Täältä löydät paljon mittareita: esimerkiksi luku- ja kirjoitusviiveet eriteltyinä prosenttipisteiksi. Voit myös nähdä tietoja tämän aluepalvelimen hallinnoimista alueista ja voit luoda aktiivisten säikeiden kaatopaikan palvelimelle.

HBase-käyttöopas sisältää aloitusoppaan ja usein kysytyt kysymykset. Se on elävä asiakirja, joten jokaisen merkinnän liitteenä on käyttäjäyhteisön kommentteja. HBase-verkkosivusto tarjoaa myös linkkejä HBase Java -sovellusliittymään sekä videoihin ja HBase-tietojen lähteisiin. Lisätietoja löytyy HBase-wikistä. Vaikka HBase-dokumentaatio onkin hyvä, se ei ole aivan samanlainen kuin muilla tietokantatuotesivustoilla, kuten Cassandrassa ja MongoDB: ssä, nähty dokumentaatio. Internetissä on kuitenkin runsaasti materiaalia, ja HBase-yhteisö on riittävän suuri ja aktiivinen, jotta HBase-kysymykset eivät jää vastaamatta pitkään.

Yksi HBasen mielenkiintoisimmista viimeaikaisista lisäyksistä on tuki "prosessoreille" - käyttäjäkoodille, joka suoritetaan osana HBase RegionServer- ja Master-prosesseja. Yhteisprosessoreita on suunnilleen kahta tyyppiä: tarkkailijat ja päätepisteet. Tarkkailija on käyttäjän kirjoittama Java-luokka, joka määrittelee menetelmät, joita käytetään, kun tietyt HBase-tapahtumat tapahtuvat. Ajattele tarkkailijaa HBase-vastineena RDBMS-liipaisimelle. Yksi tarkkailija, nimeltään RegionObserver, voi kiinnittää tiettyjä kohtia datankäsittelytoimintojen, kuten saada, laittaaja poistaa.

HBase-päätepisteen apuprosessori toimii samalla tavalla kuin tallennettu menettely. Ladattuna se voidaan kutsua esimerkiksi tarkkailijalta, mikä mahdollistaa uusien ominaisuuksien lisäämisen HBaseen dynaamisesti. On olemassa useita tapoja ladata rinnakkaisprosessorit HBase-klusteriin, myös HBase-kuoren kautta.

Suuren HBase-klusterin määrittäminen voi olla vaikeaa. HBase-klusteri sisältää pääsolmut, RegionServer-prosessit, HDFS-prosessit ja kokonaisen Zookeeper-klusterin, joka kulkee vierekkäin. Ongelman vianmääritys voi olla monimutkainen tehtävä, koska on tutkittava useita liikkuvia osia.

HBase on hyvin kehityskeskeinen tietokanta. Sen online-opas on linkitetty vahvasti HBasen Java API -asiakirjoihin. Jos haluat ymmärtää tietyn HBase-entiteetin - esimerkiksi suodattimen - roolin, ole valmis siirtymään Java API: n suodatinluokan dokumentaatioon täydellisen selityksen saamiseksi.

Koska pääsy tapahtuu rivikohtaisesti ja rivit on indeksoitu rivinäppäimillä, seuraa, että rivinäppäinrakenteen huolellinen suunnittelu on erittäin tärkeää hyvän suorituskyvyn kannalta. Ironista kyllä, ohjelmoijat ISAM (Indexed Sequential Access Method) -tietokantojen vanhanaikaisina aikoina tiesivät tämän hyvin: Tietokantojen käyttö koski komponentteja - ja näiden komponenttien järjestystä - yhdistelmäavainindekseissä.

HBase käyttää joukkoa taistelutestattuja tekniikoita Hadoop-maailmasta, ja se on syytä ottaa huomioon rakentaessasi laajaa, skaalautuvaa, erittäin saatavilla olevaa jaettua tietokantaa etenkin sovelluksiin, joissa vahva johdonmukaisuus on tärkeää.

Apache HBase 0.94 yhdellä silmäyksellä

 
Plussat
  • Sisäänrakennettu versiointi
  • Vahva tasaisuus ennätystasolla
  • Tarjoaa RDBMS: n kaltaiset laukaisimet ja tallennetut menettelyt yhteisprosessorien kautta
  • Rakennettu hyväksi havaittuihin ja todellisiin Hadoop-tekniikoihin
  • Aktiivinen kehitysyhteisö
Haittoja
  • Puuttuu ystävällinen, SQL-tyyppinen kyselykieli
  • Paljon liikkuvia osia
  • Asennus yhden solmun kehitysklusterin ulkopuolelle voi olla vaikeaa
AlustatEdellyttää Java SE -versiota 6; voidaan suorittaa Windowsissa Cygwinillä
KustannusIlmainen, avoimen lähdekoodin Apache License -versio 2.0

Copyright fi.verticalshadows.com 2022