HBase'i kasutamise teooria ja praktika

Tere pĂ€evast Minu nimi on Danil Lipovoy, meie Sbertechi meeskond hakkas kasutama HBase'i operatiivandmete salvestusruumina. Selle Ă”ppimise kĂ€igus on kogunenud kogemusi, mida tahtsin sĂŒstematiseerida ja kirjeldada (loodame, et see on paljudele kasulik). KĂ”ik allpool olevad katsed viidi lĂ€bi HBase'i versioonidega 1.2.0-cdh5.14.2 ja 2.0.0-cdh6.0.0-beta1.

  1. Üldarhitektuur
  2. Andmete kirjutamine HBASE-sse
  3. Andmete lugemine HBASE-st
  4. Andmete vahemÀllu salvestamine
  5. Pakettandmete töötlemine MultiGet/MultiPut
  6. Tabelite piirkondadeks jagamise strateegia (jagamine)
  7. Veataluvus, tihendamine ja andmete lokaliseerimine
  8. Seaded ja jÔudlus
  9. Stressi testimine
  10. JĂ€reldused

1. Üldarhitektuur

HBase'i kasutamise teooria ja praktika
Varumeister kuulab ZooKeeperi sĂ”lmel aktiivse sĂŒdamelööke ja vĂ”tab kadumise korral ĂŒle masteri funktsioonid.

2. Kirjutage andmed HBASE-sse

KĂ”igepealt vaatame lihtsaimat juhtumit – vĂ”tmevÀÀrtuse objekti kirjutamist tabelisse put(rowkey) abil. Klient peab esmalt vĂ€lja selgitama, kus asub juurpiirkonna server (RRS), mis salvestab hbase:meta tabeli. Ta saab selle teabe ZooKeeperilt. PĂ€rast seda pÀÀseb see juurde RRS-ile ja loeb hbase:meta tabelit, millest eraldab teabe selle kohta, milline RegionServer (RS) vastutab huvipakkuvas tabelis antud reaklahvi andmete salvestamise eest. Edaspidiseks kasutamiseks salvestab metatabeli klient vahemĂ€llu ja seetĂ”ttu lĂ€hevad jĂ€rgmised kĂ”ned kiiremini otse RS-i.

JĂ€rgmisena kirjutab RS pĂ€rast pĂ€ringu saamist selle esmalt WriteAheadLog-i (WAL), mis on vajalik krahhi korral taastamiseks. SeejĂ€rel salvestab andmed MemStore'i. See on mĂ€lus olev puhver, mis sisaldab antud piirkonna jaoks sorteeritud vĂ”tmete komplekti. Tabeli saab jagada piirkondadeks (sektsioonideks), millest igaĂŒks sisaldab lahutatud vĂ”tmete komplekti. See vĂ”imaldab suurema jĂ”udluse saavutamiseks paigutada piirkondi erinevatesse serveritesse. Vaatamata selle vĂ€ite ilmsusele nĂ€eme hiljem, et see ei tööta kĂ”igil juhtudel.

Peale kande MemStore'i sisestamist tagastatakse kliendile vastus, et kirje salvestamine Ônnestus. Kuid tegelikkuses salvestatakse see ainult puhvris ja jÔuab kettale alles pÀrast teatud aja möödumist vÔi kui see on tÀidetud uute andmetega.

HBase'i kasutamise teooria ja praktika
Toimingu “Kustuta” sooritamisel andmeid fĂŒĂŒsiliselt ei kustutata. Need mĂ€rgitakse lihtsalt kustutatuks ja hĂ€vitamine ise toimub peamise kompaktfunktsiooni kutsumise hetkel, mida on ĂŒksikasjalikumalt kirjeldatud lĂ”igus 7.

HFile-vormingus failid kogutakse HDFS-i ja aeg-ajalt kÀivitatakse vÀike kompaktne protsess, mis lihtsalt liidab vÀikesed failid suuremateks ilma midagi kustutamata. Aja jooksul muutub see probleemiks, mis ilmneb ainult andmete lugemisel (selle juurde tuleme veidi hiljem tagasi).

Lisaks ĂŒlalkirjeldatud laadimisprotsessile on olemas palju tĂ”husam protseduur, mis on vĂ”ib-olla selle andmebaasi tugevaim kĂŒlg - BulkLoad. See seisneb selles, et moodustame iseseisvalt HFiles ja paneme need kettale, mis vĂ”imaldab meil suurepĂ€raselt skaleerida ja saavutada vĂ€ga korralikud kiirused. Tegelikult pole siin piirang mitte HBase, vaid riistvara vĂ”imalused. Allpool on alglaadimistulemused klastri kohta, mis koosneb 16 RegionServerist ja 16 NodeManager YARNist (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 lĂ”ime), HBase'i versioon 1.2.0-cdh5.14.2.

HBase'i kasutamise teooria ja praktika

Siin nĂ€ete, et suurendades tabelis olevate partitsioonide (regioonide) ja ka Sparki tĂ€itjate arvu, saame allalaadimiskiiruse tĂ”usu. Samuti sĂ”ltub kiirus salvestuse helitugevusest. Suured plokid suurendavad MB/sek, vĂ€ikesed plokid sisestatud kirjete arvu ajaĂŒhiku kohta, kusjuures kĂ”ik muud asjad on vĂ”rdsed.

Samuti saate alustada laadimist korraga kahte tabelisse ja saada topeltkiirust. Allpool on nĂ€ha, et 10 KB plokkide kirjutamine kahte tabelisse korraga toimub kiirusega umbes 600 MB/sek igas (kokku 1275 MB/sek), mis ĂŒhtib ĂŒhte tabelisse kirjutamise kiirusega 623 MB/sek (vt. nr 11 ĂŒlal)

HBase'i kasutamise teooria ja praktika
Kuid teine ​​jooks 50 KB rekordiga nĂ€itab, et allalaadimiskiirus veidi kasvab, mis nĂ€itab, et see lĂ€heneb piirvÀÀrtustele. Samal ajal tuleb meeles pidada, et HBASE-le endale koormust praktiliselt ei teki, selleks on vaja vaid anda esmalt andmed hbase:meta-st ja pĂ€rast HFiles'i vooderdamist lĂ€htestada BlockCache'i andmed ja salvestada MemStore'i puhver kettale, kui see pole tĂŒhi.

3. Andmete lugemine HBASE-st

Kui eeldame, et kliendil on kogu info hbase:meta-st juba olemas (vt punkt 2), siis lÀheb pÀring otse RS-i, kus on salvestatud vajalik vÔti. Esiteks tehakse otsing MemCache'is. Olenemata sellest, kas seal on andmeid vÔi mitte, tehakse otsing ka BlockCache puhvris ja vajadusel HFilesis. Kui failist leiti andmeid, paigutatakse need BlockCache'i ja tagastatakse jÀrgmisel pÀringul kiiremini. HFile'is on otsimine suhteliselt kiire tÀnu Bloom filtri kasutamisele, st. olles lugenud vÀikese hulga andmeid, teeb see kohe kindlaks, kas see fail sisaldab vajalikku vÔtit ja kui ei, siis liigub edasi jÀrgmise juurde.

HBase'i kasutamise teooria ja praktika
PĂ€rast nendest kolmest allikast andmete saamist genereerib RS vastuse. EelkĂ”ige saab see ĂŒle kanda mitu objekti leitud versiooni korraga, kui klient taotles versioonimist.

4. Andmete vahemÀllu salvestamine

MemStore'i ja BlockCache'i puhvrid hĂ”ivavad kuni 80% eraldatud kuhjasisesest RS-mĂ€lust (ĂŒlejÀÀnud osa on reserveeritud RS-i teenindusĂŒlesannete jaoks). Kui tĂŒĂŒpiline kasutusreĆŸiim on selline, et protsessid kirjutavad ja loevad kohe samu andmeid, siis on mĂ”ttekas vĂ€hendada BlockCache'i ja suurendada MemStore'i, sest Kui kirjutamisandmed ei satu lugemiseks vahemĂ€llu, kasutatakse BlockCache'i harvemini. BlockCache puhver koosneb kahest osast: LruBlockCache (alati hunnikus) ja BucketCache (tavaliselt hunnikuvĂ€line vĂ”i SSD-l). BucketCache'i tuleks kasutada siis, kui lugemistaotlusi on palju ja need ei mahu LruBlockCache'i, mis viib prĂŒgikoguja aktiivsele tööle. Samal ajal ei tohiks lugemisvahemĂ€lu kasutamisest oodata radikaalset jĂ”udluse kasvu, kuid pöördume selle juurde tagasi lĂ”igus 8.

HBase'i kasutamise teooria ja praktika
Kogu RS-i jaoks on ĂŒks BlockCache ja iga tabeli jaoks on ĂŒks MemStore (ĂŒks iga veeru perekonna jaoks).

Kui kirjeldatud teoreetiliselt ei lĂ€he kirjutamisel andmed vahemĂ€llu ja tĂ”epoolest, sellised parameetrid CACHE_DATA_ON_WRITE tabeli jaoks ja “Cache DATA on Write” RS jaoks on seatud vÀÀraks. Praktikas on aga nii, et kui me kirjutame andmed MemStore'i, siis loputame need kettale (seega tĂŒhjendame), seejĂ€rel kustutame saadud faili, siis hangimispĂ€ringu tĂ€ites saame andmed edukalt kĂ€tte. Veelgi enam, isegi kui keelate BlockCache'i tĂ€ielikult ja tĂ€idate tabeli uute andmetega, seejĂ€rel lĂ€htestate MemStore'i kettale, kustutate need ja taotlete neid teisest seansist, hangitakse need ikkagi kuskilt alla. Nii et HBase ei salvesta mitte ainult andmeid, vaid ka salapĂ€raseid saladusi.

hbase(main):001:0> create 'ns:magic', 'cf'
Created table ns:magic
Took 1.1533 seconds
hbase(main):002:0> put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'
Took 0.2610 seconds
hbase(main):003:0> flush 'ns:magic'
Took 0.6161 seconds
hdfs dfs -mv /data/hbase/data/ns/magic/* /tmp/trash
hbase(main):002:0> get 'ns:magic', 'key1'
 cf:c      timestamp=1534440690218, value=try_to_delete_me

Parameeter "Cache DATA on Read" on seatud vÀÀrtusele VÀÀr. Kui teil on ideid, vÔite neid kommentaarides arutada.

5. Pakettandmete töötlemine MultiGet/MultiPut

Üksikute pĂ€ringute töötlemine (Get/Put/Delete) on ĂŒsna kulukas toiming, nii et vĂ”imalusel tuleks need kombineerida Listiks vĂ”i Loendiks, mis vĂ”imaldab jĂ”udlust oluliselt suurendada. See kehtib eriti kirjutamisoperatsiooni kohta, kuid lugemisel on jĂ€rgmine lĂ”ks. Allolev graafik nĂ€itab MemStore'ist 50 000 kirje lugemiseks kuluvat aega. Lugemine viidi lĂ€bi ĂŒhes lĂ”imes ja horisontaaltelg nĂ€itab pĂ€ringus olevate klahvide arvu. Siin on nĂ€ha, et ĂŒhes pĂ€ringus tuhande vĂ”tmeni suurendades langeb tĂ€itmise aeg, s.t. kiirus suureneb. Kui aga MSLAB-reĆŸiim on vaikimisi lubatud, algab pĂ€rast seda lĂ€ve jĂ”udluse radikaalne langus ja mida suurem on kirje andmemaht, seda pikem on tööaeg.

HBase'i kasutamise teooria ja praktika

Testid viidi lÀbi virtuaalmasinas, 8 tuumaga, versioon HBase 2.0.0-cdh6.0.0-beta1.

MSLAB-reĆŸiim on loodud hunniku killustatuse vĂ€hendamiseks, mis tekib uue ja vana pĂ”lvkonna andmete segunemise tĂ”ttu. Kui MSLAB on lubatud, paigutatakse andmed lahendusena suhteliselt vĂ€ikestesse lahtritesse (tĂŒkkidena) ja töödeldakse tĂŒkkidena. Selle tulemusena, kui nĂ”utud andmepaketi maht ĂŒletab eraldatud suuruse, langeb jĂ”udlus jĂ€rsult. Teisest kĂŒljest ei ole selle reĆŸiimi vĂ€ljalĂŒlitamine samuti soovitatav, kuna see pĂ”hjustab intensiivse andmetöötluse hetkedel GC tĂ”ttu seisakuid. Hea lahendus on lahtri mahu suurendamine aktiivse kirjutamise kaudu put-i kaudu lugemisega samal ajal. VÀÀrib mĂ€rkimist, et probleem ei ilmne, kui kĂ€ivitate pĂ€rast salvestamist loputuskĂ€su, mis lĂ€htestab MemStore'i kettale, vĂ”i kui laadite BulkLoadi abil. Allolev tabel nĂ€itab, et MemStore'i pĂ€ringud suuremate (ja sama hulga) andmete kohta pĂ”hjustavad aeglustumist. Suurendades tĂŒkkide suurust, taastame töötlemisaja normaalseks.

HBase'i kasutamise teooria ja praktika
Lisaks tĂŒkkide suuruse suurendamisele aitab andmete jagamine piirkondade kaupa, s.t. laua poolitamine. Selle tulemusel tuleb igasse piirkonda vĂ€hem pĂ€ringuid ja kui need lahtrisse mahuvad, jÀÀb vastus heaks.

6. Tabelite piirkondadeks jagamise strateegia (jagamine)

Kuna HBase on vĂ”tmevÀÀrtuste salvestusruum ja jaotamine toimub vĂ”tme alusel, on ÀÀrmiselt oluline jagada andmed ĂŒhtlaselt kĂ”igi piirkondade vahel. NĂ€iteks sellise tabeli kolmeks osaks jagamisel jagatakse andmed kolme piirkonda:

HBase'i kasutamise teooria ja praktika
Juhtub, et see viib jÀrsu aeglustumiseni, kui hiljem laaditud andmed nÀevad vÀlja nÀiteks pikad vÀÀrtused, millest enamik algab sama numbriga, nÀiteks:

1000001
1000002
...
1100003

Kuna vÔtmed on salvestatud baidimassiivina, algavad need kÔik samamoodi ja kuuluvad samasse piirkonda nr 1, kus see vÔtmevahemik on salvestatud. Jaotusstrateegiaid on mitu:

HexStringSplit – muudab vĂ”tme kuueteistkĂŒmnendsĂŒsteemis kodeeritud stringiks vahemikus "00000000" => "FFFFFFFF" ja lisab vasakule nullid.

UniformSplit – muudab vĂ”tme baitimassiiviks kuueteistkĂŒmnendkoodiga vahemikus "00" => "FF" ja tĂ€idis paremal nullidega.

Lisaks saate jagamiseks mÀÀrata mis tahes vahemiku vĂ”i vĂ”tmete komplekti ja konfigureerida automaatset poolitamist. Üks lihtsamaid ja tĂ”husamaid lĂ€henemisviise on aga UniformSplit ja rĂ€sikonkatenatsiooni kasutamine, nĂ€iteks kĂ”ige olulisem baitide paar vĂ”tme kĂ€ivitamisel funktsiooni CRC32 (rowkey) kaudu ja reaklahv ise:

rÀsi + reaklahv

SeejĂ€rel jaotatakse kĂ”ik andmed piirkondade vahel ĂŒhtlaselt. Lugemisel visatakse esimesed kaks baiti lihtsalt Ă€ra ja alles jÀÀb algne vĂ”ti. RS kontrollib ka andmemahtu ja vĂ”tmeid piirkonnas ning limiitide ĂŒletamise korral jagab selle automaatselt osadeks.

7. Vea taluvus ja andmete lokaalsus

Kuna iga vĂ”tmekomplekti eest vastutab ainult ĂŒks piirkond, on RS-i krahhi vĂ”i dekomisjoneerimisega seotud probleemide lahenduseks kĂ”igi vajalike andmete salvestamine HDFS-i. Kui RS langeb, tuvastab kapten selle ZooKeeperi sĂ”lme sĂŒdamelöökide puudumise tĂ”ttu. SeejĂ€rel mÀÀrab see teenindatava piirkonna teisele RS-ile ja kuna HFiles on salvestatud hajutatud failisĂŒsteemi, loeb uus omanik neid ja jĂ€tkab andmete teenindamist. Kuna aga osa andmetest vĂ”ib olla MemStore'is ja neil ei olnud aega HFilesi siseneda, kasutatakse toimingute ajaloo taastamiseks WAL-i, mis on samuti salvestatud HDFS-i. PĂ€rast muudatuste rakendamist on RS vĂ”imeline pĂ€ringutele vastama, kuid kolimine viib selleni, et osa andmeid ja neid teenindavaid protsesse satuvad erinevatesse sĂ”lmedesse, s.t. paikkond vĂ€heneb.

Probleemi lahendus on suur tihendamine - see protseduur liigutab failid nende eest vastutavatesse sĂ”lmedesse (kus asuvad nende piirkonnad), mille tulemusena suureneb selle protseduuri kĂ€igus vĂ”rgu ja ketaste koormus jĂ€rsult. Tulevikus aga kiireneb ligipÀÀs andmetele mĂ€rgatavalt. Lisaks ĂŒhendab major_compaction kĂ”ik HF-failid ĂŒhes piirkonnas ja puhastab ka andmed olenevalt tabeli sĂ€tetest. NĂ€iteks saate mÀÀrata objekti versioonide arvu, mida tuleb sĂ€ilitada, vĂ”i eluea, mille jĂ€rel objekt fĂŒĂŒsiliselt kustutatakse.

Sellel protseduuril vĂ”ib olla vĂ€ga positiivne mĂ”ju HBase'i tööle. Alloleval pildil on nĂ€ha, kuidas aktiivse andmesalvestuse tulemusel jĂ”udlus halvenes. Siin nĂ€ete, kuidas 40 lĂ”ime kirjutasid ĂŒhte tabelisse ja 40 lĂ”ime lugesid samaaegselt andmeid. LĂ”imede kirjutamine genereerib ĂŒha rohkem H-faile, mida loevad teised lĂ”imed. Selle tulemusena tuleb ĂŒha rohkem andmeid mĂ€lust eemaldada ja lĂ”puks hakkab tööle GC, mis praktiliselt halvab kogu töö. Suure tihendamise kĂ€ivitamine tĂ”i kaasa tekkinud prahi koristamise ja tootlikkuse taastamise.

HBase'i kasutamise teooria ja praktika
Test viidi lÀbi 3 DataNode ja 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 keermega). HBase'i versioon 1.2.0-cdh5.14.2

VÀÀrib mĂ€rkimist, et suurem tihendamine kĂ€ivitati "reaalajas" tabelis, kuhu andmeid aktiivselt kirjutati ja loeti. Internetis oli vĂ€ide, et see vĂ”ib andmete lugemisel pĂ”hjustada vale vastuse. Kontrollimiseks kĂ€ivitati protsess, mis genereeris uued andmed ja kirjutas need tabelisse. PĂ€rast mida lugesin ja kontrollisin kohe, kas saadud vÀÀrtus kattub kirjapanduga. Selle protsessi kĂ€igus viidi suuremat tihendamist lĂ€bi umbes 200 korda ja ĂŒhtegi riket ei registreeritud. VĂ”ib-olla ilmneb probleem harva ja ainult suure koormuse korral, mistĂ”ttu on kindlam peatada kirjutamis- ja lugemisprotsessid plaanipĂ€raselt ning teostada puhastus, et vĂ€ltida GC-i tĂŒhjenemist.

Samuti ei mÔjuta suur tihendamine MemStore'i olekut; selle kettale loputamiseks ja tihendamiseks peate kasutama flush (connection.getAdmin().flush(TableName.valueOf(tblName))).

8. Seaded ja jÔudlus

Nagu juba mainitud, nĂ€itab HBase oma suurimat edu BulkLoadi kĂ€ivitamisel seal, kus tal pole vaja midagi teha. See kehtib aga enamiku sĂŒsteemide ja inimeste kohta. See tööriist sobib aga pigem andmete hulgi salvestamiseks suurtes plokkides, samas kui protsess nĂ”uab mitut konkureerivat lugemis- ja kirjutamistaotlust, kasutatakse ĂŒlalkirjeldatud kĂ€ske Get ja Put. Optimaalsete parameetrite mÀÀramiseks kĂ€ivitati tabeli parameetrite ja sĂ€tete erinevate kombinatsioonidega:

  • 10 lĂ”ime kĂ€ivitati korraga 3 korda jĂ€rjest (nimetagem seda lĂ”imede plokiks).
  • Ploki kĂ”igi lĂ”imede tööaeg keskmistati ja see oli ploki töö lĂ”pptulemus.
  • KĂ”ik lĂ”imed töötasid sama tabeliga.
  • Enne iga keermeploki kĂ€ivitamist tehti suurem tihendus.
  • Iga plokk sooritas ainult ĂŒhe jĂ€rgmistest toimingutest:

— Pane
— Hangi
— Hangi+Pane

  • Iga plokk sooritas oma operatsiooni 50 000 iteratsiooni.
  • Kirje ploki suurus on 100 baiti, 1000 baiti vĂ”i 10000 XNUMX baiti (juhuslik).
  • Plokid kĂ€ivitati erineva arvu nĂ”utud vĂ”tmetega (kas ĂŒks vĂ”ti vĂ”i 10).
  • Plokid jooksid erinevate tabeliseadete all. Muudetud parameetrid:

— BlockCache = sisse vĂ”i vĂ€lja lĂŒlitatud
— BlockSize = 65 KB vĂ”i 16 KB
— vaheseinad = 1, 5 vĂ”i 30
— MSLAB = lubatud vĂ”i keelatud

Nii et plokk nÀeb vÀlja selline:

a. MSLAB-reĆŸiim lĂŒlitati sisse/vĂ€lja.
b. Loodi tabel, mille jaoks mÀÀrati jÀrgmised parameetrid: BlockCache = true/none, BlockSize = 65/16 Kb, Partition = 1/5/30.
c. Kompressioon mÀÀrati GZ-le.
d. 10 lÔime kÀivitati samaaegselt, tehes sellesse tabelisse 1/10/100 baiti kirjetega 1000/10000 put/get/get+put toiminguid, sooritades jÀrjest 50 000 pÀringut (juhuslikud vÔtmed).
e. Punkti d korrati kolm korda.
f. KÔikide keermete tööaeg keskmistati.

Testiti kÔiki vÔimalikke kombinatsioone. On ennustatav, et rekordi suuruse kasvades kiirus vÀheneb vÔi vahemÀllu salvestamise keelamine pÔhjustab aeglustumist. EesmÀrk oli aga mÔista iga parameetri mÔju mÀÀra ja olulisust, mistÔttu kogutud andmed sisestati lineaarse regressioonifunktsiooni sisendisse, mis vÔimaldab hinnata olulisust t-statistika abil. Allpool on Put-operatsioone sooritavate plokkide tulemused. TÀielik kombinatsioonide komplekt 2*2*3*2*3 = 144 valikut + 72 tk. mÔnda tehti kaks korda. Seega on kokku 216 jooksu:

HBase'i kasutamise teooria ja praktika
Testimine viidi lÀbi miniklastris, mis koosnes 3 DataNode'ist ja 4 RS-st (CPU Xeon E5-2680 v4 @ 2.40 GHz * 64 lÔime). HBase'i versioon 1.2.0-cdh5.14.2.

Suurim sisestamise kiirus, 3.7 sekundit, saavutati vĂ€ljalĂŒlitatud MSLAB-reĆŸiimiga, ĂŒhe partitsiooniga tabelis, kui BlockCache oli lubatud, BlockSize = 16, kirjed 100 baiti, 10 tĂŒkki paki kohta.
Madalaim sisestamiskiirus 82.8 sekundit saadi MSLAB-reĆŸiimi lubamisel, ĂŒhe partitsiooniga tabelis, kus BlockCache oli lubatud, BlockSize = 16, kirjed 10000 1 baiti, igaĂŒks XNUMX.

Vaatame nĂŒĂŒd mudelit. NĂ€eme R2-l pĂ”hineva mudeli head kvaliteeti, kuid on tĂ€iesti selge, et ekstrapoleerimine on siin vastunĂ€idustatud. SĂŒsteemi tegelik kĂ€itumine parameetrite muutumisel ei ole lineaarne, seda mudelit pole vaja ennustamiseks, vaid selleks, et mĂ”ista, mis antud parameetrite piires juhtus. NĂ€iteks nĂ€eme siin Studenti kriteeriumist, et parameetrid BlockSize ja BlockCache ei oma Put-operatsiooni puhul tĂ€htsust (mis on ĂŒldiselt ĂŒsna etteaimatav):

HBase'i kasutamise teooria ja praktika
Kuid tĂ”siasi, et partitsioonide arvu suurendamine toob kaasa jĂ”udluse vĂ€henemise, on mĂ”nevĂ”rra ootamatu (oleme juba nĂ€inud BulkLoadiga partitsioonide arvu suurendamise positiivset mĂ”ju), kuigi arusaadav. Esiteks tuleb töötlemiseks genereerida pĂ€ringud ĂŒhe piirkonna asemel 30 piirkonnale ja andmemaht ei ole nii suur, et sellest kasu oleks. Teiseks mÀÀrab kogu tööaja kĂ”ige aeglasem RS ja kuna DataNode'ide arv on vĂ€iksem kui RS-ide arv, on mĂ”nel piirkonnal null asukoht. Noh, vaatame viit parimat:

HBase'i kasutamise teooria ja praktika
NĂŒĂŒd hindame Get blocki kĂ€ivitamise tulemusi:

HBase'i kasutamise teooria ja praktika
Sektsioonide arv on kaotanud tÀhtsuse, mis on ilmselt seletatav asjaoluga, et andmed on hÀsti vahemÀllu salvestatud ja lugemisvahemÀlu on (statistiliselt) kÔige olulisem parameeter. Loomulikult on pÀringu sÔnumite arvu suurendamine ka jÔudluse jaoks vÀga kasulik. Parimad hinded:

HBase'i kasutamise teooria ja praktika
Noh, lÔpuks vaatame ploki mudelit, mis esmakordselt sooritas hankimise ja seejÀrel pani:

HBase'i kasutamise teooria ja praktika
KÔik parameetrid on siin olulised. Ja juhtide tulemused:

HBase'i kasutamise teooria ja praktika

9. Koormustestimine

Noh, lÔpuks kÀivitame enam-vÀhem korraliku koormuse, kuid alati on huvitavam, kui teil on, millega vÔrrelda. Cassandra vÔtmearendaja DataStaxi veebisaidil on olemas jÀreldused NT mitmest NoSQL-i salvestusruumist, sealhulgas HBase'i versioon 0.98.6-1. Laadimine toimus 40 lÔime, andmemahuga 100 baiti, SSD-ketaste abil. Loe-Muuda-Kirjuta operatsioonide testimise tulemus nÀitas jÀrgmisi tulemusi.

HBase'i kasutamise teooria ja praktika
Minu arusaamist mööda viidi lugemine lÀbi 100 kirje plokkides ja 16 HBase sÔlme puhul nÀitas DataStaxi test jÔudlust 10 tuhat toimingut sekundis.

Õnneks on ka meie klastris 16 sĂ”lme, kuid pole kuigi "Ă”nnelik", et igaĂŒhel on 64 sĂŒdamikku (lĂ”ime), samas kui DataStaxi testis on neid ainult 4. Teisalt on neil SSD-draivid, meil aga HDD-d. vĂ”i rohkem HBase'i uus versioon ja protsessori kasutamine koormuse ajal praktiliselt ei suurenenud (visuaalselt 5-10 protsenti). Proovime siiski seda konfiguratsiooni kasutama hakata. Tabeli vaikeseaded, lugemine toimub vĂ”tmevahemikus 0 kuni 50 miljonit juhuslikult (st sisuliselt iga kord uus). Tabel sisaldab 50 miljonit kirjet, mis on jagatud 64 sektsiooniks. VĂ”tmed rĂ€sitakse kasutades crc32. Tabeli sĂ€tted on vaikimisi, MSLAB on lubatud. KĂ€ivitades 40 lĂ”ime, loeb iga lĂ”ime 100 juhusliku vĂ”tme komplekti ja kirjutab loodud 100 baiti kohe nendesse vĂ”tmetesse tagasi.

HBase'i kasutamise teooria ja praktika
Alus: 16 DataNode ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40 GHz * 64 keerme). HBase'i versioon 1.2.0-cdh5.14.2.

Keskmine tulemus on lĂ€hemal 40 tuhandele toimingule sekundis, mis on oluliselt parem kui DataStaxi testis. Kuid katselistel eesmĂ€rkidel saate tingimusi veidi muuta. On ĂŒsna ebatĂ”enĂ€oline, et kogu töö tehakse ainult ĂŒhel laual ja ka ainult unikaalsete vĂ”tmetega. Oletame, et on olemas teatud "kuum" vĂ”tmete komplekt, mis genereerib pĂ”hikoormuse. SeetĂ”ttu proovime luua koormus suuremate kirjetega (10 KB), ka 100 partiidena, 4 erinevas tabelis ja piirates taotletavate vĂ”tmete vahemikku 50 tuhandeni.. Allolev graafik nĂ€itab 40 lĂ”ime kĂ€ivitamist, iga lĂ”ime loeb 100 klahvi komplekti ja kirjutab neile klahvidele kohe juhuslikult 10 KB tagasi.

HBase'i kasutamise teooria ja praktika
Alus: 16 DataNode ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40 GHz * 64 keerme). HBase'i versioon 1.2.0-cdh5.14.2.

Koormamise ajal kĂ€ivitati mitu korda suurem tihendus, nagu ĂŒlal nĂ€idatud, ilma selle protseduurita halveneb jĂ”udlus jĂ€rk-jĂ€rgult, kuid tĂ€itmise ajal tekib ka lisakoormus. MaksehĂ€ireid pĂ”hjustavad erinevad pĂ”hjused. MĂ”nikord lĂ”petasid lĂ”imed töötamise ja nende taaskĂ€ivitamisel tekkis paus, mĂ”nikord tekitasid kolmanda osapoole rakendused klastri koormuse.

Lugemine ja kohe kirjutamine on HBase'i jaoks ĂŒks raskemaid tööstsenaariume. Kui teete ainult vĂ€ikseid, nĂ€iteks 100 baidiseid, 10-baidiseid mĂŒĂŒgipĂ€ringuid, kombineerides need 50-50 tuhande tĂŒkkideks, vĂ”ite saada sadu tuhandeid toiminguid sekundis ja kirjutuskaitstud pĂ€ringutega on olukord sarnane. VÀÀrib mĂ€rkimist, et tulemused on radikaalselt paremad kui DataStaxi tulemused, eelkĂ”ige tĂ€nu taotlustele XNUMX tuhande suurustes plokkides.

HBase'i kasutamise teooria ja praktika
Alus: 16 DataNode ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40 GHz * 64 keerme). HBase'i versioon 1.2.0-cdh5.14.2.

10. JĂ€reldused

See sĂŒsteem on ĂŒsna paindlikult konfigureeritud, kuid paljude parameetrite mĂ”ju on endiselt teadmata. MĂ”nda neist testiti, kuid neid ei lisatud saadud testikomplekti. NĂ€iteks nĂ€itasid esialgsed katsed ebaolulist tĂ€htsust sellisel parameetril nagu DATA_BLOCK_ENCODING, mis kodeerib teavet naaberrakkude vÀÀrtuste abil, mis on arusaadav juhuslikult genereeritud andmete puhul. Kui kasutate palju dubleerivaid objekte, vĂ”ib kasu olla mĂ€rkimisvÀÀrne. Üldiselt vĂ”ib öelda, et HBase jĂ€tab mulje ĂŒsna tĂ”sisest ja lĂ€bimĂ”eldud andmebaasist, mis vĂ”ib suurte andmeplokkidega toimingute tegemisel olla ĂŒsna produktiivne. Eriti kui lugemis- ja kirjutamisprotsesse on vĂ”imalik ajas eraldada.

Kui teie arvates on midagi, mida pole piisavalt avalikustatud, olen valmis teile ĂŒksikasjalikumalt rÀÀkima. Kutsume teid jagama oma kogemusi vĂ”i arutama, kui te millegagi ei nĂ”ustu.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster