HBase'i kasutamise teooria ja praktika

Tere! Minu nimi on Danil Lipovoy, meie meeskond Sbertechiis on hakanud kasutama HBase'i operatiivsete andmete salvestamiseks. Selle uurimise kĂ€igus on kogunenud teadmisi, mille tahtsime sĂŒsteematiseerida ja kirja panna (loodame, et see on paljudele kasulik). Allpool esitatud eksperimentid viidi lĂ€bi HBase'i versioonidega 1.2.0-cdh5.14.2 ja 2.0.0-cdh6.0.0-beta1.

  1. Üldine arhitektuur
  2. Andmete kirjutamine HBASE'sse
  3. Andmete lugemine HBASE'st
  4. Andmete vahemÀlu
  5. Partii töötlemine MultiGet/MultiPut
  6. Tabelite vÀljajagamise strateegia (splitting)
  7. TalitlushÀired, tihendamine ja andmete kohalikkus
  8. Seaded ja jÔudlus
  9. Koormustestimine
  10. JĂ€reldused

1. Üldine arhitektuur

HBase'i kasutamise teooria ja praktika
Reserv Master jÀlgib aktiivse sÔlme ZooKeeperi heartbeat'i ja kaotuse korral vÔtab meisterfunktsioonid enda kanda.

2. Andmete kirjutamine HBASE'sse

Alustame kĂ”ige lihtsamast juhtumist – vĂ”tme-vÀÀrtuse objekti kirjutamine mingisse tabelisse funktsiooniga put(rowkey). Klient peab kĂ”igepealt vĂ€lja selgitama, kus asub juureregionaalserver (Root Region Server – RRS), mis salvestab tabeli hbase:meta. Selle teabe saab ta ZooKeeperilt. SeejĂ€rel pöördub ta RRS-i poole ja loeb tabeli hbase:meta, millest ta tuvastab, milline RegionServer (RS) vastutab antud rowkey vĂ”tme andmete salvestamise eest huvipakkuvas tabelis. Edasi, et meta-tabelit kasutada, vahemĂ€lestab klient selle ja seega jĂ€rgnevate pĂ€ringute vastuvĂ”tt toimub kiiremini, otse RS-iga.

SeejĂ€rel kirjutab RS, saades pĂ€ringu, kĂ”igepealt selle WriteAheadLog'i (WAL), mis on vajalik taastamiseks, kui sĂŒsteem peaks kokku kukkuma. SeejĂ€rel salvestab andmed MemStore'i. See on mĂ€lu vahemĂ€lu, mis sisaldab antud regiooni jĂ€rjestatud vĂ”tmete kogumit. Tabel vĂ”ib olla jagatud regioonideks (partitsioonideks), millest igaĂŒks sisaldab omavahel mitteĂŒhtivaid vĂ”tmete komplekte. See vĂ”imaldab regioonide jagamist erinevatele serveritele, et saavutada paremat jĂ”udlust. Kuid hoolimata selle vĂ€ite ilmsetest eeliseid, nĂ€eme hiljem, et see ei toimi kĂ”igis olukordades.

PÀrast salvestuse paigutamist MemStore'i naaseb kliendile vastus, et salvestus on edukalt tehtud. Sellegipoolest salvestatakse see tÔeliselt ainult vahemÀllu ja jÔuab ketta peale alles pÀrast teatud ajavahemiku möödumist vÔi uute andmete tÀitmise korral.

HBase'i kasutamise teooria ja praktika
Kustutamisoperatsiooni (Delete) sooritamisel ei toimu andmete fĂŒĂŒsilist kustutamist. Need lihtsalt mĂ€rgitakse kustutatuks, samas kui tegelik hĂ€vitamine toimub major compact'i funktsiooni kĂ€ivitamisel, millest lĂ€hemalt rÀÀgitakse punktis 7.

HFile formaadis failid kogunevad HDFS-is ja aeg-ajalt kÀivitatakse minor compact'i protsess, mis lihtsalt liidab vÀiksed failid suuremateks, midagi kustutamata. Aja jooksul muutub see probleemiks, mis avaldub andmete lugemisel (kust me rÀÀgime hiljem).

Peale eespool kirjeldatud laadimisprotsessi on olemas palju tĂ”husam protseduur, milles seisneb tĂ”eliselt selle andmebaasi ĂŒks tugevamaid kĂŒlgi – BulkLoad. See seisneb selles, et me ise valmistame HFiles'd ja paigutame need kettale, mis vĂ”imaldab suurepĂ€rast skaleerimist ja saavutada ĂŒsna hĂ€id kiirus. Sisuliselt on piiranguks mitte HBase, vaid riistvara vĂ”imalused. Allpool on toodud laadimistulemused klastris, mis koosneb 16 RegionServerist ja 16 NodeManager YARNist (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 niiti), HBase'i versioon 1.2.0-cdh5.14.2.

HBase'i kasutamise teooria ja praktika

Siit on nÀha, et suurendades tabeli partitsioonide (regioonide) arvu, samuti Spark'i executoreid, saame laadimiskiirusel lisanduse. Samuti sÔltub kiirus kirjutamise mahust. Suured plokid annavad tÔusu MB/sekundis, vÀiksed aga lisatud kirjete arvu ajas, kui kÔik muud tingimused on vÔrdsed.

Samuti on vĂ”imalik laadimist kĂ€ivitada kahes tabelis samaaegselt ja saavutada kiirus kahekordistumine. Allpool on nĂ€ha, et 10 KB plokkide kirjutamine kahes tabelis toimub kiirusel umbes 600 MB/sek igaĂŒhe kohta (kokku 1275 MB/sek), mis vastab ĂŒhe tabeli kirjutamise kiirusel 623 MB/sek (vt punkt 11 ĂŒlal).

HBase'i kasutamise teooria ja praktika
Siiski nĂ€itab teine kĂ€ivitus 50 KB kirjetega, et laadimiskiirus kasvab enam-vĂ€hem mitteolemasolevalt, mis viitab piirvÀÀrtuste lĂ€henemisele. Samas tuleb arvestada, et HBASEle ei tekitata peaaegu mingeid koormusi, kĂ”ik, mida temalt nĂ”utakse, on kĂ”igepealt andmete edastamine hbase:meta-st, ja pĂ€rast HFiles'i paigaldamist andmete BlockCache'i tĂŒhjendamine ning MemStore'i vahemĂ€lu salvestamine kettale, kui see pole tĂŒhi.

3. Andmete lugemine HBASE'st

Kui arvata, et kogu teave hbase:meta on klient juba olemas (vt p.2), siis saadetakse pÀring kohe sellele RS-ile, kus vajalik vÔti asub. Esmalt otsitakse MemCache'is. SÔltumata sellest, kas seal on andmeid vÔi mitte, otsitakse ka BlockCache'i puhvris ja vajadusel HFailes. Kui andmed leitakse failist, paigutatakse need BlockCache'i ja jÀrgmise pÀringu korral tagastatakse need kiiremini. Otsing HFailes toimub suhteliselt kiiresti, kasutades Bloom'i filtrit, mis tÀhendab, et vÀikese andmemahtude lugemise korral mÀÀrab see kohe, kas fail sisaldab vajalikku vÔtit; kui ei, siis minnakse jÀrgmise juurde.

HBase'i kasutamise teooria ja praktika
Saades andmed neist kolmest allikast, koostab RS vastuse. Konkreetsemalt vÔib ta vajadusel edastada mitu leitud objekti versiooni, kui klient on nÔudnud versioonide ajalugu.

4. Andmete vahemÀlu

MemStore ja BlockCache puhvrite maht vĂ”ib ulatuda kuni 80% RS-i mÀÀratud on-heap mĂ€lust (ĂŒlejÀÀnud on reserveeritud RS-i teenindavateks ĂŒlesanneteks). Kui tĂŒĂŒpiline kasutusreĆŸiim on selline, et protsessid kirjutavad ja kohe loevad neid andmeid, siis on mĂ”ttekas vĂ€hendada BlockCache'i ja suurendada MemStore'i, kuna kirjutamisel ei satu andmed lugemiseks puhvri, mistĂ”ttu BlockCache'i kasutamine toimub harvem. BlockCache'i puhver koosneb kahest osast: LruBlockCache (alati on-heap) ja BucketCache (enamasti off-heap vĂ”i SSD-l). BucketCache'i kasutamine on otstarbekas, kui lugemisepĂ€ringute arv on vĂ€ga suur ja need ei mahu LruBlockCache'i, mis toob kaasa aktiivse Garbage Collector'i töö. Siiski ei maksa oodata kiirusetĂ”usu lugemisekahe kasutamisel, kuid selle juurde naaseme veel p. 8.

HBase'i kasutamise teooria ja praktika
BlockCache on ĂŒks kogu RS-i kohta, MemStore on iga tabeli jaoks oma (iga Column Family kohta ĂŒks).

Kuidas detailsemalt Teoorias, andmeid kirjutades ei satu need puhvri, ja tĂ”epoolest on selle tabeli ja RS-i jaoks parameetrid CACHE_DATA_ON_WRITE seadistatud valele. Kuid praktikas, kui kirjutada andmed MemStore'i, siis seejĂ€rel see kettale tĂŒhjendada (sellega puhastades), pĂ€rast seda fail kustutada, saame get pĂ€ringuga edukalt andmed. Ja isegi kui tĂ€ielikult BlockCache keelata ja tabel uute andmetega tĂ€ita, ning saavutada MemStore'i kirjutamine kettale, need kustutada ja teises sessioonis kĂŒsida, tĂ”mmatakse need ikkagi kuskilt vĂ€lja. Nii et HBase hoiab endas mitte ainult andmeid, vaid ka salapĂ€raseid mĂ”istatusi.

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 seadistatud valele. Kui teil on ideid, on oodatud arutamiseks kommentaarides.

5. Andmete grupi töötlemine MultiGet/MultiPut

Ainulaadsete pĂ€ringute (Get/Put/Delete) töötlemine on ĂŒsna kulukas operatsioon, seetĂ”ttu tuleks neid vĂ”imaluse korral ĂŒhendada Listi vĂ”i Listiga, mis vĂ”imaldab saavutada mĂ€rkimisvÀÀrset jĂ”udluse tĂ”usu. Eriti puudutab see kirjutamisoperatsiooni, kuid lugemisel on jĂ€rgmine peidul kĂ”rvaline probleem. Alloleval graafikul on nĂ€idatud 50 000 kirje lugemise aega MemStore'ist. Lugemine toimus ĂŒhes lĂ”imes ning horisontaalsel teljel on nĂ€idatud pĂ€ringu vĂ”tmete arvu. Siit on nĂ€ha, et kui vĂ”tmete arv ĂŒhe pĂ€ringu korral suureneb tuhandeni, siis tĂ€itmisaja vĂ€henemine toimub, s.t. kiirus suureneb. Kuid kui vaikimisi MSLAB-reĆŸiim on sisse lĂŒlitatud, algab pĂ€rast seda piiri Ă€kiline jĂ”udluse langemine, ja see tuleneb sellest, et mis rohkem andmeid salvestatakse, seda pikem on töötlemisaeg.

HBase'i kasutamise teooria ja praktika

Testid viidi lÀbi virtuaalses masinas, 8 tuuma, HBase versioon 2.0.0-cdh6.0.0-beta1.

MSLAB reĆŸiim on mĂ”eldud heap-i fragmenteeringute vĂ€hendamiseks, mis tekivad uute ja vanade andmete segunemise tĂ”ttu. Lahenduseks, kui MSLAB on sisse lĂŒlitatud, paigutatakse andmed suhteliselt vĂ€ikestesse rakkudesse (chunk) ja töödeldakse partii kaupa. Selle tulemusena, kui nĂ”utud andmepaketi maht ĂŒletab mÀÀratud suuruse, siis jĂ”udlus langeb jĂ€rsult. Teiselt poolt ei ole soovitatav selle reĆŸiimi vĂ€ljalĂŒlitamine, kuna see toob kaasa peatuste tekkimise GC tĂ”ttu andmeid intensiivselt töödeldes. Heaks lahenduseks on rakendusmahu suurendamine, kui samal ajal toimub kirjutamine put-i kaudu koos lugemisega. Tasub mĂ€rkida, et probleemi ei teki, kui pĂ€rast kirjutamist tĂ€ita flush kĂ€sk, mis tĂŒhjendab MemStore kettale, vĂ”i kui laetakse andmeid BulkLoad'i kaudu. Allolevas tabelis on nĂ€idatud, et pĂ€ringud suuremate andmete MemStore'ist (ja sama koguse) toovad kaasa aeglustumise. Kuid suurendades chunksize'i, saame töötlemise aega normaliseerida.

HBase'i kasutamise teooria ja praktika
Lisaks chunksize'i suurendamisele aitab andmete jagamine piirkondade kaupa, st tabelite jagamine. See toob kaasa, et iga piirkonna jaoks tuleb vÀhem pÀringuid ja kui need mahtusid rakku, jÀÀb vastus heaks.

6. Tabelite jagamise strateegia piirkondade kaupa (splittimine)

Kuna HBase on key-value salvestus ja partitsioneerimine toimub vĂ”tme jĂ€rgi, on ÀÀrmiselt oluline andmeid ĂŒhtlaselt kĂ”igi piirkondade vahel jagada. NĂ€iteks sellise tabeli partitsioneerimine kolme osaks toob kaasa, et andmed jagatakse kolme piirkonna vahel:

HBase'i kasutamise teooria ja praktika
MÔnikord pÔhjustab see jÀrske aeglustumisi, kui edaspidi laaditavad andmed on nÀiteks long vÀÀrtustes, mis enamasti algavad sama numbriga, nÀiteks:

1000001
1000002


1100003

Kuna vĂ”tmed salvestatakse baitide massiivina, siis kĂ”ik nad alustavad ĂŒhtmoodi ja kuuluvad ĂŒhte piirkonda #1, mis hoiab seda vĂ”tme vahemikku. On mitu jagamise strateegiat:

HexStringSplit – Muudab vĂ”tmeks kĂŒmnendsĂŒsteemis koodi vahemikus "00000000" => "FFFFFFFF" ja tĂ€idab vasakult nullidega.

UniformSplit – Muudab vĂ”tmeks baitide massiivi, mis on kĂŒmnendsĂŒsteemis kood vahemikus "00" => "FF" ja tĂ€idab parelt nullidega.

Samuti saab mÀÀrata mis tahes vahemiku vĂ”i vĂ”tmete kogumi jagamiseks ja seadistada autotööstust. Siiski on ĂŒks lihtsamaid ja tĂ”husamaid lĂ€henemisviise UniformSplit ja hash'i ĂŒhendamise kasutamine, nĂ€iteks esimesed kaks baiti vĂ”tme töötlemisel funktsiooni CRC32(rowkey) kaudu ja tegelik rowkey:

hash + rowkey

Siis jaotatakse kĂ”ik andmed ĂŒhtlaselt piirkondade vahel. Lugemisel visatakse esimesed kaks baiti lihtsalt kĂ”rvale ja jĂ€etakse alles algne vĂ”ti. Samuti kontrollib RS andmete ja vĂ”tmete arvu piirkonnas ja kui limiidid ĂŒletatakse, jagab selle automaatselt osadeks.

7. Vigade taluvus ja andmete kohalolek

Kuna iga vĂ”tme seeria eest vastutab ainult ĂŒks piirkond, on RS-i vĂ”i selle vĂ€ljalĂŒlitamisega seotud probleemide lahenduseks kĂ”ik vajalikud andmed hoida HDFS-is. RS-i rikke korral avastab master selle ZooKeeperis sĂŒdametuksis oleva sĂ”lme kaudu. Siis mÀÀrab ta hallatava piirkonna teisele RS-ile ja kuna HFiles salvestatakse jaotatud failisĂŒsteemi, loeb uus peremees need vĂ€lja ja jĂ€tkab andmete teenindamist. Kuid kuna osa andmeid vĂ”ib olla MemStore'is ja pole veel HFilesisse jĂ”udnud, kasutatakse toimingute ajaloos WAL-i, mis samuti hoitakse HDFS-is. PĂ€rast muudatuste elluviimist suudab RS pĂ€ringutele vastata, kuid liikumine viib selleni, et osa andmeid ja nende teenindamise protsessid asuvad erinevates sĂ”lmedes, st lokaliteed vĂ€hendatakse.

Probleemi lahenduseks on major compaction – see protseduur viib failid nende sĂ”lmedesse, mis nende eest vastutavad (seal, kus nende piirkonnad asuvad), mille tulemusena suureneb selle protseduuri ajal jĂ€rsult koormus vĂ”rku ja kettale. Kuid edaspidi kiireneb juurdepÀÀs andmetele oluliselt. Lisaks teostab major_compaction kĂ”igi HFiles'ide ĂŒhendamist ĂŒheks failiks piirkonna raames ja puhastab andmeid tabeli seadistuste jĂ€rgi. NĂ€iteks vĂ”ib mÀÀrata objekti versioonide arvu, mida tuleb sĂ€ilitada, vĂ”i selle eluiga, pĂ€rast mille möödumist objekt fĂŒĂŒsiliselt eemaldatakse.

See protseduur vĂ”ib positiivselt mĂ”jutada HBase'i toimimist. Allolev pilt nĂ€itab, kuidas jĂ”udlus halvenes aktiivsete andmete kirjutamise tĂ”ttu. NĂ€ha on, kuidas ĂŒhte tabelisse kirjutas 40 haru ja 40 haru luges andmeid samal ajal. Kirjutavad harud genereerisid ĂŒha rohkem HFiles'e, mida lugesid teised harud. tulemuseks on see, et jĂ€rjest rohkem andmeid on vajalik mĂ€lust eemaldada ja lĂ”puks hakkab tööle GC, mis praktiliselt halvab kogu töö. Major compactioni kĂ€ivitamine viis kogunenud segaduse puhastamiseni ja jĂ”udluse taastamiseni.

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

On oluline mĂ€rkida, et major compaction viidi lĂ€bi "elava" tabeli peal, kuhu kirjutati ja loeti aktiivselt andmeid. VĂ”rgus esines vĂ€iteid, et see vĂ”ib pĂ”hjustada vale vastust andmete lugemise ajal. Kontrollimiseks kĂ€ivitati protsess, mis genereeris uusi andmeid ja kirjutas need tabelisse. SeejĂ€rel loeti kohe ja vĂ”rreldi, kas saadud vÀÀrtus kattus salvestatuga. Selle protsessi kĂ€igus kĂ€ivitati umbes 200 korda major compaction ja mitte ĂŒhtegi riket ei registreeritud. Probleem vĂ”ib ilmneda harva ja ainult kĂ”rgete koormuste korral, seega on siiski turvalisem plaane teha, peatades kirjutamise ja lugemise protsessid ning teostada puhastust, vĂ€ltides nii GC languseid.

Samuti ei mÔjuta major compaction MemStore'i seisukorda, et selle andmeid kettale kirjutada ja kompaktida, tuleb kasutada flush (connection.getAdmin().flush(TableName.valueOf(tblName))).

8. Seaded ja jÔudlus

Nagu juba mainitud, on HBase kĂ”ige edukam seal, kus tal pole vaja midagi teha, BulkLoad'i teostamisel. Kuid see kehtib enamiku sĂŒsteemide ja inimeste kohta. Siiski sobib see tööriist pigem andmete massiliseks salvestamiseks suurtel blokkidel, samas kui, kui protsess nĂ”uab paljude konkurentsivĂ”imeliste lugemise ja kirjutamise pĂ€ringute tĂ€itmist, kasutatakse ĂŒlalnimetatud Get ja Put kĂ€ske. Optimaalsete parameetrite mÀÀramiseks viidi lĂ€bi katseid erinevate tabeli parameetrite ja seadistuste kombinatsioonide korral:

  • KĂ€ivitati 10 lĂ”ime korraga 3 korda jĂ€rjest (nimetame seda lĂ”imeblokiks).
  • KĂ”igi lĂ”imede töötamise aeg plokis keskmistati ja see oli ploki lĂ”ppkokkuvĂ”te.
  • KĂ”ik lĂ”imed töötasid ĂŒhe ja sama tabeliga.
  • Iga lĂ”imeploki kĂ€ivituse eel viidi lĂ€bi major compaction.
  • Iga plokk teostas ainult ĂŒhte jĂ€rgmistest tegevustest:

— Put
— Get
— Get+Put

  • Iga plokk teostas 50 000 kordust oma tegevuses.
  • Bloki kirje suurus on 100 baiti, 1000 baiti vĂ”i 10000 baiti (random).
  • Plokid kĂ€ivitati erineva arvuga kĂŒsitavaid vĂ”tmeid (kas ĂŒks vĂ”ti vĂ”i 10).
  • Plokid kĂ€ivitati erinevate tabeli seadistustega. Muudeti parameetreid:

— BlockCache = sisse vĂ”i vĂ€lja
— BlockSize = 65 Kb vĂ”i 16 Kb
— Partitsioonid = 1, 5 vĂ”i 30
— MSLAB = sisse vĂ”i vĂ€lja

Nii et plokk nÀeb vÀlja jÀrgmine:

a. Kujundati MSLAB reĆŸiimi sisse/vĂ€lja.
b. Loodi tabel, millele seadistati jÀrgmised parameetrid: BlockCache = true/none, BlockSize = 65/16 Kb, Partitsioonid = 1/5/30.
c. Seati GZ tihendamine.
d. KÀivitati 10 lÔime korraga, tehes 1/10 operatsioonidest put/get/get+put sellele tabelile 100/1000/10000 baiti, teostades jÀrjest 50 000 pÀringut (vÔtmed on juhuslikud).
e. Punkt d kordus kolm korda.
f. KÔigi lÔimede töötamise aeg keskmistati.

Kontrolliti kĂ”iki vĂ”imalikke kombinatsioone. Õige on, et kui kirje suurus suureneb, siis kiirus langeb vĂ”i et kui vahemĂ€lu keelatakse, toob see aeglustumist. Siiski oli eesmĂ€rk mĂ”ista iga parameetri mĂ”ju ulatust ja tĂ€htsust, seetĂ”ttu esitati kogutud andmed lineaarse regressiooni funktsiooni sisendiks, mis vĂ”imaldab hinnata usaldusvÀÀrsust t-statistika abil. Allpool on esitatud tulemused, mis on seotud Put operatsioone teostavate plokkidega. TĂ€ielik kombinatsioonide kogum 2*2*3*2*3 = 144 varianti + 72, kuna mĂ”ned viidi ellu kaks korda. Seega kokku 216 kĂ€ivitust:

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

KĂ”rgeim sisestuskiirus 3.7 sec saavutati MSLAB reĆŸiimi vĂ€lja lĂŒlitamisel, tabelis, millel oli ĂŒks partitsioon, sisse lĂŒlitatud BlockCache, BlockSize = 16, 100 baidi kirjeid, 10 tĂŒkki pakis.
Madalaim sisestuskiirus 82.8 sec saavutati MSLAB reĆŸiimi sisse lĂŒlitamisel, tabelis, millel oli ĂŒks partitsioon, sisse lĂŒlitatud BlockCache, BlockSize = 16, 10000 baidi kirjeid, 1 tĂŒkk.

NĂŒĂŒd vaatame mudelit. NĂ€eme head mudeli kvaliteeti R2 kaudu, kuid tĂ€iesti selge on, et ekstrapoleerimine on siin sobimatu. Reaalne sĂŒsteemi kĂ€itumine parameetrite muutumisel ei ole lineaarne, see mudel on vajalik mitte ennustamiseks, vaid mĂ”istmiseks, mis on juhtunud antud parameetrite jooksul. NĂ€iteks nĂ€eme siin StĂŒdiendi kriteeriumi jĂ€rgi, et Put operatsiooni osas ei oma parameetrid BlockSize ja BlockCache (mis on ĂŒldiselt ĂŒsna ennustatav):

HBase'i kasutamise teooria ja praktika
Kuid on ĂŒllatav, et partitsioonide arvu suurenemine toob kaasa jĂ”udluse languse (oleme juba nĂ€inud positiivset mĂ”ju partitsioonide arvu suurendamisel BulkLoad'i puhul), kuigi see on arusaadav. Esiteks peab töötlemiseks vormistama pĂ€ringud 30 piirkonna suhtes, mitte ĂŒhe, samas kui andmemaht ei ole piisavalt suur, et see eeliseid tooks. Teiseks, tööaja mÀÀrab aeglasem RS, ja kuna DataNode'ide arv on vĂ€hem kui RS'i arv, on osa piirkondadest nullkohalikud. Vaatame nĂŒĂŒd paremaid tulemusi:

HBase'i kasutamise teooria ja praktika
NĂŒĂŒd hinnakem Get blokkide tĂ€itmise tulemusi:

HBase'i kasutamise teooria ja praktika
Partitsioonide arv on kaotanud oma tÀhtsuse, mis on tÔenÀoliselt seletatav asjaoluga, et andmed vahemÀlus, ja lugemisvahemÀlu on kÔige olulisem (statistiliselt) parameeter. Loomulikult on pÀringutes sÔnumite arvu suurendamine samuti vÀga kasulik jÔudluse jaoks. Parimad tulemused:

HBase'i kasutamise teooria ja praktika
Ja lÔpuks vaatame plokki, mis tÀitis kÔigepealt get'i ja seejÀrel put'i:

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

HBase'i kasutamise teooria ja praktika

9. Koormustestimine

Ja lĂ”puks kĂ€ivitame ĂŒsna korraliku koormuse, kuid alati on huvitav, kui on millega vĂ”rrelda. DataStaxi veebisaidil - Cassandra peamise arendaja juures on tulemused NoSQL hoiustamisrida, sealhulgas HBase versioon 0.98.6-1. Laadimine toimus 40 voogu, andmemaht 100 baiti, SSD kettad. Testimise tulemus Read-Modify-Write operatsioonide jaoks nĂ€itas selliseid tulemusi.

HBase'i kasutamise teooria ja praktika
Nii palju kui ma aru sain, viidi lugemine lÀbi 100 kirje kaupa ja 16 node HBase testis DataStax nÀitas 10 000 operatsiooni sekundis.

Oleneb, et meie klastris on samuti 16 node, kuid mitte just "Ă”nnestunud", et igas on 64 sĂŒdamikku (voogu), samas kui DataStaxi testis oli vaid 4. Teisest kĂŒljest on neil SSD kettad, samas kui meil on HDD ja uuem HBase versioon, ning CPU koormus katsetamise ajal ei suurenenud pea ĂŒldse (visuaalselt 5-10 protsenti). Sellegipoolest proovime selle konfiguratsiooniga kĂ€ivitada. Tabelite seadistused on vaikeseaded, lugemine toimub vĂ”ti vahemikus 0 kuni 50 miljonit juhuslikult (st tegelikult iga kord uus). Tabelis on 50 miljonit kirjet, jagatud 64 partitsiooniks. VĂ”tmed on krĂŒptitud crc32 alusel. Tabelite seadistused on vaikeseaded, MSLAB on sisse lĂŒlitatud. KĂ€ivitame 40 voogu, iga voog loeb komplekti 100 juhuslikku vĂ”tit ja kohe kirjutab genereeritud 100 baiti nende vĂ”tmete kaudu tagasi.

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

Keskmine tulemus on lĂ€hemal 40 000 operatsioonile sekundis, mis on oluliselt parem kui DataStaxi testis. Siiski, katse eesmĂ€rgil on mĂ”nevĂ”rra vĂ”imalik tingimusi muuta. On ĂŒsna ebatĂ”enĂ€oline, et kogu töö toimub ainult ĂŒhe tabeliga ja ainult ainulaadsete vĂ”tmetega. Oletame, et on olemas mingi 'kuum' vĂ”ti komplekt, mis genereerib peamise koormuse. SeetĂ”ttu proovime luua koormuse suuremate rekorditega (10 KB), samuti komplektidena 100, neljas eri tabelis ja piirates nĂ”utava vĂ”tme vahemiku 50 000. Alloleval graafikul on nĂ€idatud 40 voolu kĂ€ivitamine, iga voog loeb komplekti 100 vĂ”tit ja kohe kirjutab juhuslikud 10 KB nende vĂ”tmete kaudu tagasi.

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

Koormuse ajal kÀivitati mitu korda major compaction, nagu eelnevalt nÀidatud, et ilma selle protseduurita tootlikkus jÀrk-jÀrgult halveneb, kuid selle teostamise ajal tekib samuti tÀiendav koormus. Langused on pÔhjustatud erinevatest pÔhjustest. MÔnikord lÔpetavad vood töö ja nende taaskÀivitamise ajal tekib paus, mÔnikord loovad kolmandate osapoolte rakendused koormuse klastrile.

Lugemine ja kohe kirjutamine - on ĂŒks raskemaid stsenaariume HBase tööks. Kui teha ainult vĂ€ikeste suurustega put pĂ€ringuid, nĂ€iteks 100 baiti, ĂŒhendades need 10-50 tuhat tĂŒkki komplekti, saab tuua sadu tuhandeid operatsioone sekundis, ja sama kehtib ka ainult lugemisjĂ€rgsete pĂ€ringute kohta. Tuleb mĂ€rkida, et tulemused on radikaalselt paremad kui need, mis saadi DataStaxiga, ennekĂ”ike 50 000 tĂŒki komplekti pĂ€ringute tĂ”ttu.

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

10. JĂ€reldused

See sĂŒsteem on piisavalt paindlikult kohandatav, kuid paljude parameetrite mĂ”ju jÀÀb endiselt teadmata. Osa neist on testitud, kuid ei kuulu lĂ”ppkogumi testidesse. NĂ€iteks eelnevad eksperimendid nĂ€itasid, et DATA_BLOCK_ENCODING parameetritel, mis kodeerivad teavet naaberates lahtrites olevate vÀÀrtuste abil, on vĂ€ike tĂ€htsus, mis on mĂ”istetav juhuslikult genereeritud andmete jaoks. Suure hulga korduvate objektide kasutamisel vĂ”ib kasu olla mĂ€rkimisvÀÀrne. Üldiselt vĂ”ib öelda, et HBase jĂ€tab mulje tĂ”sise ja lĂ€bimĂ”eldud andmebaasina, mis suurte andmeblokiga toimingute puhul vĂ”ib olla piisavalt efektiivne. Eriti kui on vĂ”imalik lugemis- ja kirjutamisprotsessid ajaliselt lahku viia.

Kui midagi on teie arvates ebapiisavalt kajastatud, olen valmis rÀÀkima lÀhemalt. Pakume oma kogemuste jagamist vÔi arutame, kui te millegagi ei nÔustu.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster