Pregled: HBase je masivno skalabilan - i izuzetno je složen

Apache HBase sebe opisuje kao "Hadoop bazu podataka", što može biti pomalo zbunjujuće, jer se Hadoop obično odnosi na popularni okvir obrade MapReduce. No, Hadoop je stvarno krovno ime za čitav ekosustav tehnologija, od kojih neke HBase koristi za stvaranje distribuirane baze podataka orijentirane na stupce izgrađene na istim principima kao i Googleov Bigtable. HBase ne koristi izravno Hadoopove mogućnosti MapReduce, iako se HBase može integrirati s Hadoopom kako bi poslužio kao izvor ili odredište MapReduce poslova.

Značajke HBase su ekstremna skalabilnost, visoka pouzdanost i fleksibilnost sheme koju dobivate iz baze podataka orijentirane na stupce. Iako se tablice i obitelji stupaca moraju definirati unaprijed, nove stupce možete dodavati u hodu. HBase također nudi snažnu dosljednost na razini reda, ugrađenu verziju i "koprocesore" koji pružaju ekvivalente okidača i pohranjenih postupaka.

[Također na: Obračun s velikim podacima: Cassandra vs. HBase | Koju čudnu bazu podataka trebam koristiti? | Nagrade Bossie 2013: Najbolji alati za velike podatke otvorenog koda | NoSQL obračun: MongoDB vs. Couchbase | Dobijte sažetak ključnih priča svaki dan u biltenu Daily. ]

Dizajniran za podršku upitima masivnih skupova podataka, HBase je optimiziran za izvedbu čitanja. Za pisanje, HBase nastoji zadržati dosljednost. Za razliku od "eventualno dosljedne" Cassandre, HBase ne nudi različite postavke razine dosljednosti (za potvrdu upisa nakon što ga je napisao jedan čvor ili ga napisao kvorum čvorova). Dakle, cijena jake konzistentnosti HBase jest ta što pisanje može biti sporije.

HDFS - Hadoop distribuirani datotečni sustav - temelj je Hadoop ekosustava, a to je datotečni sustav na vrhu kojeg boravi HBase. Dizajniran za rad na robnom hardveru i toleriranje kvarova na čvorovima članova, HDFS najbolje funkcionira za sustave skupne obrade koji preferiraju strujni pristup velikim skupovima podataka. Čini se da je to neprikladno za slučajni pristup kakav bi se očekivao u sustavima baza podataka poput HBase. Ali HBase poduzima korake kako bi nadoknadio HDFS-ovo inače neskladno ponašanje.

Zookeeper, još jedna Hadoop tehnologija (iako se više ne koristi u trenutnim verzijama Hadoop MapReduce motora), distribuirana je usluga komunikacije i koordinacije. Zookeeper održava sinkroniziranu strukturu podataka u memoriji kojoj može pristupiti više klijenata. Struktura podataka organizirana je poput datotečnog sustava, iako komponente strukture (znodi) mogu biti spremnici podataka, kao i elementi u hijerarhijskom stablu. Zamislite datotečni sustav čije datoteke mogu biti i direktoriji.

HBase koristi Zookeeper da koordinira aktivnosti klastera i nadgleda zdravlje čvorova članova. Kada pokrenete HBase klaster, paralelno morate pokrenuti i Zookeeper. HBase će prema zadanim postavkama pokretati Zookeeper i upravljati njime, iako možete konfigurirati HBase da koristi zasebno upravljano postavljanje Zookeeper-a. Možete čak i pokretati procese poslužitelja Zookeeper na istom hardveru kao i drugi HBase procesi, ali to se ne preporučuje, posebno za klaster HBase velikog volumena.

Kako HBase djeluje

Točnije, redak je zbirka parova ključ / vrijednost, ključ je identifikator stupca, a vrijednost sadržaj ćelije koja postoji na sjecištu određenog retka i stupca. Međutim, budući da je HBase baza podataka orijentirana na stupce, ne trebaju dva reda u tablici imati iste stupce. Da bi se stvari dodatno zakomplicirale, podaci su verzirani u HBase. Stvarne koordinate vrijednosti (ćelije) su korpe {row key, column key, timestamp}. Uz to, stupci se mogu grupirati u obitelji stupaca, što daje dizajneru baze podataka daljnju kontrolu nad karakteristikama pristupa, jer će se svi stupci unutar obitelji stupaca pohranjivati ​​u neposrednoj blizini.

Operacija pisanja u HBaseu prvo zapisuje podatke u zapisnik urezivanja ("zapisnik za napredovanje upisa"), a zatim u internu memorijsku strukturu koja se naziva MemStore. Kada se MemStore napuni, ispire se na disk kao entitet koji se naziva HFile. HFiles se pohranjuju kao niz blokova podataka, s indeksom dodanim na kraju datoteke. Drugi indeks, koji se čuva u memoriji, ubrzava pretraživanje podataka u HFilesu.

HFilovi su nepromjenjivi nakon pisanja. Ako se ključ izbriše, HBase bilježi posebnu oznaku "nadgrobni spomenik" u znak sjećanja na brisanje. Nadgrobni spomenici uklanjaju se (kao i izbrisani podaci) kad se HFilovi povremeno sabijaju.

HBase pokušava najprije zadovoljiti operacije čitanja putem MemStorea. Ako to ne uspije, HBase provjerava još jednu strukturu u memoriji, BlockStore, koja je predmemorija za čitanje dizajnirana za isporuku često pročitanih podataka iz memorije, a ne iz HFiles-a temeljenih na disku.

HBase dijeli redove po regijama, koje su definirane nizom ključeva retka. Svakom regijom u HBase klasteru upravlja RegionServer proces. Tipično postoji jedan RegionServer postupak po HBase čvoru. Kako količina podataka raste, HBase dijeli regije i migrira povezane podatke na različite čvorove u klasteru u svrhu uravnoteženja.

Arhitektura klastera HBase nije u potpunosti simetrična. Na primjer, svaki klaster mora imati jedan, aktivni glavni čvor. Više čvorova može se (i trebalo bi) odrediti kao glavne čvorove, ali kad se klaster pokrene, glavni kandidati koordiniraju se tako da je samo jedan vršitelj dužnosti. Odgovornost je gospodara nadgledati regionalne poslužitelje, rukovati preusmjeravanjem regionalnih poslužitelja i koordinirati podjele regija.

Ako se glavni čvor sruši, klaster i dalje može raditi u ustaljenom načinu rada - upravljajući zahtjevima za čitanje i pisanje - ali ne može izvršiti nijednu operaciju koja zahtijeva koordinaciju glavnog računala (kao što je ponovno uravnoteženje). Zbog toga je dobra ideja odrediti više glavnih čvorova; ako i kada vladajući gospodar ne uspije, brzo će se zamijeniti.

Možete pokrenuti HBase na vrhu izvornog datotečnog sustava u razvojne svrhe, ali postavljeni klaster HBase radi na HDFS-u, što se - kao što je ranije spomenuto - čini kao loše igralište za HBase. Unatoč osnovnom datotečnom sustavu usmjerenom na streaming, HBase postiže brzi slučajni I / O. Ovu čaroliju postiže kombinacijom skupnog upisivanja u memoriju i trajnih podataka na disk pomoću stabala stapanja strukturiranih u dnevnik. Kao rezultat toga, sva se slučajna upisivanja izvode u memoriju, a kada se podaci ispiru na disk, podaci se prvo sortiraju, a zatim zapisuju uzastopno s pripadajućim indeksom. Nasumično čitanje prvo se pokušava započeti u memoriji, kao što je gore spomenuto. Ako traženi podaci nisu u memoriji, naknadno pretraživanje diska je brzo jer se podaci sortiraju i indeksiraju.

Rad s HBaseom

Iako HBase ne podržava transakcije, niti je na kraju dosljedan; umjesto toga, HBase podržava snažnu konzistenciju, barem na razini jednog reda. HBase nema osjećaj za tipove podataka; sve je pohranjeno kao niz bajtova. Međutim, HBase definira poseban tip podataka "brojač", koji osigurava operaciju atomskog povećanja - korisnu za brojanje pregleda web stranice, na primjer. Možete povećati bilo koji broj brojača unutar jednog retka jednim pozivom i bez zaključavanja retka. Imajte na umu da će se brojači sinkronizirati za operacije pisanja (višestruko upisivanje uvijek će izvršavati dosljedne korake), ali ne nužno i za operacije čitanja.

HBase ljuska zapravo je modificirana, interaktivna Ruby ljuska koja radi u JRubyju, a Ruby se izvršava u Java VM-u. Sve što možete učiniti u interaktivnoj Ruby ljusci možete i u HBase ljusci, što znači da HBase ljuska može biti moćno okruženje za skriptiranje.

Najnovija verzija ljuske pruža svojevrsno objektno orijentirano sučelje za manipulaciju tablicama HBase. Možete, na primjer, tablici dodijeliti varijablu JRuby, a zatim izdati metodu na objektu tablice pomoću standardnih točaka. Na primjer, ako ste definirali tablicu i dodijelili je myTablevarijabli, podatke biste mogli zapisati (staviti) u tablicu s nečim poput:

            myTable.put '', '', ''

To bi vrijednost zapisalo u redak u stupcu .

Postoje neki GUI-ji treće strane za upravljanje HBase-om, poput hbase-explorer. HBase sam uključuje neke ugrađene alate za nadzor temeljene na Internetu. Glavni čvor HBase poslužuje web sučelje na portu 60010. Pregledajte ga i pronaći ćete informacije o samom glavnom čvoru, uključujući vrijeme početka, trenutni port Zookeeper, popis regionalnih poslužitelja, prosječni broj regija po regionalnim poslužiteljima , i tako dalje. Također je naveden popis tablica. Kliknite tablicu i prikazat će vam se podaci poput regionalnih poslužitelja na kojima se nalaze komponente tablice. Ova stranica također nudi kontrole za pokretanje zbijanja na tablici ili dijeljenje regija tablice.

Uz to, svaki čvor poslužitelja regije izvodi web sučelje za praćenje na priključku 60030. Ovdje ćete pronaći puno mjernih podataka: latencije čitanja i pisanja, na primjer, podijeljene u različite percentile. Također možete vidjeti informacije o regijama kojima upravlja ovaj regionalni poslužitelj i možete generirati odlagalište aktivnih niti na poslužitelju.

Referentni vodič za HBase uključuje vodič za početak rada i često postavljana pitanja. To je dokument uživo, pa ćete uz svaki unos pronaći komentare korisničke zajednice. Web stranica HBase također nudi poveznice na API HBase Java, kao i na videozapise i izvore informacija o HBase izvan web mjesta. Više informacija možete naći u wiki HBase. Iako je dobra, HBase dokumentacija nije ravnopravna s dokumentacijom koju sam vidio na drugim web lokacijama s proizvodima baza podataka, poput Cassandre i MongoDB. Unatoč tome, na internetu postoji mnoštvo materijala, a HBase zajednica je dovoljno velika i aktivna da bilo koja HBase pitanja neće dugo ostati bez odgovora.

Jedan od najzanimljivijih dodataka HBasea je podrška za "koprocesore" - korisnički kod koji se izvršava kao dio HBase RegionServer i Master procesa. Postoje otprilike dvije vrste koprocesora: promatrači i krajnje točke. Promatrač je Java klasa koju je napisao korisnik koja definira metode na koje se poziva kada se dogode određeni događaji HBase. Zamislite promatrača kao HBase pandana okidaču RDBMS. Jedan promatrač, pod nazivom RegionObserver, možete spojiti određene točke u protoku kontrolu korištenja podataka operacije kao što su get, puti delete.

Koprocesor krajnje točke HBase radi slično kao pohranjeni postupak. Kada se učita, na primjer, može ga se pozvati od promatrača i time dopušta dinamičko dodavanje novih značajki u HBase. Postoje različiti načini za učitavanje koprocesora u skupinu HBase, uključujući putem HBase ljuske.

Konfiguriranje velikog klastera HBase može biti teško. Klaster HBase uključuje glavne čvorove, RegionServer procese, HDFS procese i cijelu Zookeeper klasteru koja se izvodi jedna uz drugu. Jasno je da rješavanje problema može biti složen pothvat, jer postoje brojni pokretni dijelovi koji se trebaju ispitati.

HBase je u velikoj mjeri usmjerena na programere. Njegov mrežni referentni vodič čvrsto je povezan s HBase-ovim Java API dokumentima. Ako želite razumjeti ulogu koju igra određeni entitet HBase - recimo, Filter - budite spremni predati ga u Java API dokumentaciju klase Filter za cjelovito objašnjenje.

S obzirom da je pristup prema retku i da se redovi indeksiraju ključevima retka, proizlazi da je pažljiv dizajn strukture ključa retka presudan za dobru izvedbu. Ironično je što su programeri u dobra stara vremena ISAM-ovih baza podataka (Indexed Sequential Access Method) to dobro znali: pristup bazama podataka sastojao se od komponenata - i uređenja tih komponenata - u indeksima složenih ključeva.

HBase zapošljava kolekciju tehnologija testiranih u bitkama iz svijeta Hadoop, a to vrijedi razmotriti prilikom izrade velike, skalabilne, visoko dostupne, distribuirane baze podataka, posebno za one programe u kojima je važna dosljednost.

Apache HBase 0.94 na prvi pogled

 
Pros
  • Ugrađena inačica verzija
  • Snažna dosljednost na razini zapisa
  • Pruža okidače nalik RDBMS-u i pohranjene procedure putem koprocesora
  • Izgrađen na provjerenim Hadoop tehnologijama
  • Zajednica aktivnog razvoja
Protiv
  • Nedostaje prijateljski jezik upita sličan SQL-u
  • Mnogo pokretnih dijelova
  • Postavljanje izvan razvojnog klastera s jednim čvorom može biti teško
Platforme Zahtijeva Javu SE verzije 6; može se pokrenuti na sustavu Windows koristeći Cygwin
Trošak Besplatan, otvoreni izvor pod licencom Apache, verzija 2.0