{"id":55302,"date":"2020-01-17T00:00:00","date_gmt":"2020-01-16T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/teoriya-i-praktika-ispolzovaniya-hbase"},"modified":"2020-02-18T14:03:24","modified_gmt":"2020-02-18T11:03:24","slug":"teoriya-i-praktika-ispolzovaniya-hbase","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","title":{"rendered":"HBase'i teooria ja praktika","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere p\u00e4evast! Mina olen Danil Lipovoy, meie meeskond Sbertechi's on hakanud HBase'i kasutama operatiivandmete salvestamiseks. Selle uurimise k\u00e4igus on kogunenud kogemusi, mida soovisime s\u00fcsteematisteerida ja kirjeldada (loodame, et sellest on paljudele abi). K\u00f5ik allpool toodud eksperimendid viidi l\u00e4bi versioonidega HBase 1.2.0-cdh5.14.2 ja 2.0.0-cdh6.0.0-beta1. <\/p>\n<ol>\n<li>\u00dcldine arhitektuur <\/li>\n<li>Andmete salvestamine HBASE-s<\/li>\n<li>Andmete lugemine HBASE-st<\/li>\n<li>Andmete vahem\u00e4lu<\/li>\n<li>Andmete partii t\u00f6\u00f6tlemine MultiGet\/MultiPut<\/li>\n<li>Tabelite jagamise strateegia piirkondadeks (sharding)<\/li>\n<li>Veakindlus, kompakteerimine ja andmete kohalikkus<\/li>\n<li>Seaded ja j\u00f5udlus<\/li>\n<li>Koormuse testimine<\/li>\n<li>J\u00e4reldused<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. \u00dcldine arhitektuur<\/h2>\n<p>\n<img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/30800d8a48de4c52ff1650a4f1dec4c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVaru Master kuulab aktiivse s\u00f5lme ZooKeeper'is heartbeat'i ja kaotamise korral v\u00f5tab Master'i funktsioonid enda kanda. <\/p>\n<h2>2. Andmete salvestamine HBASE-s<\/h2>\n<p>\nAlustame k\u00f5ige lihtsama juhtumiga \u2013 v\u00f5tme-v\u00e4\u00e4rtuse objekti salvestamine tabelisse kasutades put(rowkey). Klient peab esmalt kindlaks tegema, kus asub juure piirkonna server (Root Region Server \u2014 RRS), mis salvestab tabelit hbase:meta. Selle teabe saab ta ZooKeeper'ist. Seej\u00e4rel p\u00f6\u00f6rdub ta RRS-i poole ja loeb tabelit hbase:meta, millest ta t\u00f5mbab v\u00e4lja teabe, milline RegionServer (RS) vastutab antud v\u00f5tme rowkey seotud andmete salvestamise eest huvipakkuvas tabelis. J\u00e4tkuva kasutamise eesm\u00e4rgil vahem\u00e4lu tabelit kliendile ja seega l\u00e4hevad edasised p\u00e4ringud kiiremini, otseselt RS-i.<\/p>\n<p>Seej\u00e4rel kirjutab RS, saades p\u00e4ringu, esmalt selle WriteAheadLog'i (WAL), mis on vajalik taastumiseks, kui midagi l\u00e4heb valesti. Seej\u00e4rel salvestab ta andmed MemStore'i. See on m\u00e4lu puhver, mis sisaldab antud piirkonna sorteeritud v\u00f5tmete kogumit. Tabel v\u00f5ib jagada piirkondadeks (partitsioonideks), millest iga\u00fcks sisaldab \u00fcksteisega mitte \u00fchtivat v\u00f5tmete kogumit. See v\u00f5imaldab piirkondi erinevates serverites paigutades saavutada k\u00f5rgemat j\u00f5udlust. Siiski, hoolimata selle v\u00e4ite ilmsusest, n\u00e4eme hiljem, et see ei toimi k\u00f5ikides olukordades.<\/p>\n<p>P\u00e4rast salvestuse paigutamist MemStore'i saab klient vastuse, et salvestus on edukalt tehtud. Samas hoitakse seda tegelikult ainult puhvers ja j\u00f5uab kettale alles p\u00e4rast teatud aja m\u00f6\u00f6dumist v\u00f5i selle t\u00e4itumisel uutega. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/10f4d5d600a20882690f5cc81322bc41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTehtava \"Delete\" k\u00e4igus ei toimu f\u00fc\u00fcsilist andmete kustutamist. Need m\u00e4rgitakse lihtsalt kui kustutatud ja tegelik h\u00e4vitamine toimub major compact funktsiooni k\u00e4ivitamise hetkel, millest on rohkem juttu punktis 7.<\/p>\n<p>HFile formaadis failid kogunevad HDFS-s ja aeg-ajalt k\u00e4ivitatakse minor compact protsess, mis lihtsalt liidab v\u00e4ikesed failid suuremateks, midagi kustutamata. Aja jooksul muutub see probleemiks, mis avaldub ainult andmete lugemisel (sellest r\u00e4\u00e4gime natuke hiljem). <\/p>\n<p>Lisaks \u00fclaltoodud andmete laadimise protsessile on olemas palju t\u00f5husam protseduur, mille keskmes on br\u00e4ndi k\u00f5ige tugevam k\u00fclg \u2013 BulkLoad. See seisneb selles, et me ise vormistame HFiles ja paneme need kettale, mis v\u00f5imaldab suurep\u00e4rast skaleerimist ning saavutada \u00fcsna korralikke kiirusnumbreid. Sisuliselt on piiranguks mitte HBase, vaid riistvara v\u00f5imalused. Allpool on toodud laadimistulemused klastrilt, mis koosneb 16 RegionServerist ja 16 NodeManager YARN-ist (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 niidid), HBase versioon 1.2.0-cdh5.14.2. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/4e4452b216eda3269a364ea97c49120f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiit on n\u00e4ha, et partitsioonide (regioonide) arvu ning Spark'i eksekutorite suurendamisega saame laadimiskiiruse suurenemise. Samuti s\u00f5ltub kiirus kirjutamise mahust. Suured plokid annavad t\u00f5usu MB\/sek m\u00f5\u00f5tmisel, v\u00e4iksemad aga sisse kirjutatud kirjade arvu ajas, kui k\u00f5ik muud tingimused on v\u00f5rdsed. <\/p>\n<p>Samuti saab k\u00e4ivitada laadimise kahes tabelis samaaegselt ning saavutada kiiruskahekordistumine. Allpool on n\u00e4htav, et 10 KB plokkide kirjutamine kahte tabelisse toimub kiirusel umbes 600 Mb\/sek igasse (kokku 1275 Mb\/sek), mis vastab \u00fchte tabelisse kirjutamise kiirusel 623 MB\/sek (vt punkt 11 \u00fclevale).<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/9f1b4fc0c80b797111494d400e9ce332.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuid teine k\u00e4ivitamine 50 KB kirjete kirjutamisega n\u00e4itab, et laadimiskiirus t\u00f5useb juba minimaalsetes m\u00e4\u00e4rades, mis viitab sellele, et l\u00e4hme piirv\u00e4\u00e4rtuste suunas. Pealegi tuleb arvestada, et HBASE-le endale ei tekkida praktiliselt mingit koormust; k\u00f5ik, mis sellest n\u00f5utakse, on esmalt andmete andmine hbase:meta-st ja seej\u00e4rel HFiles'i lisamisel BlockCache'i t\u00fchjendamine ning MemStore'i buffri salvestamine kettale, kui see pole t\u00fchi.<\/p>\n<h2>3. Andmete lugemine HBASE-st<\/h2>\n<p>\nKui eeldada, et kogu teave hbase:meta on juba kliendil olemas (vt p.2), siis l\u00e4heb p\u00e4ring kohe sellele RS-ile, kus vajalik v\u00f5ti asub. Esiteks toimub otsing MemCache'is. S\u00f5ltumata sellest, kas seal on andmeid v\u00f5i mitte, toimub otsing ka BlockCache'i puhveres ja vajadusel HFiles'is. Kui andmed leiti failist, salvestatakse need BlockCache'i ja j\u00e4rgmise p\u00e4ringu korral tagastatakse need kiiremini. Otsing HFiles'is toimub suhteliselt kiiresti, kasutades Bloomi filtrit, mis t\u00e4hendab, et lugedes v\u00e4ikest andmehulka, m\u00e4\u00e4rab ta kohe, kas see fail sisaldab vajalikku v\u00f5tit ja kui ei, siis liikuda j\u00e4rgmise juurde.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/a21b1b825a84cfd02507ec334e9452fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSaades andmed neist kolmest allikast, vormib RS vastuse. Eriti v\u00f5ib ta edastada mitu leitud objekti versiooni, kui klient k\u00fcsis versioonisust.<\/p>\n<h2>4. Andmete vahem\u00e4lu<\/h2>\n<p>\nMemStore'i ja BlockCache'i puhvrit\u00e4iendus moodustab kuni 80% eraldatud on-heap m\u00e4lu RS jaoks (\u00fclej\u00e4\u00e4nud on reserveeritud RS teenuste jaoks). Kui t\u00fc\u00fcpiline kasutusre\u017eiim on selline, et protsessid kirjutavad ja loevad kohe neid samu andmeid, siis on m\u00f5istlik v\u00e4hendada BlockCache'i ja suurendada MemStore'i, kuna kirjutades ei p\u00e4\u00e4se andmed lugemiseks puhvri, seega toimub BlockCache'i kasutamine harvem. BlockCache puhver koosneb kahest osast: LruBlockCache (alati on-heap) ja BucketCache (tavaliselt off-heap v\u00f5i SSD-l). BucketCache'i tuleks kasutada, kui on v\u00e4ga palju lugemisep\u00e4ringuid ja need ei mahu LruBlockCache'i, mis toob kaasa aktiivse Garbage Collectori t\u00f6\u00f6. Samas ei tasu oodata radikaalset j\u00f5udluse kasvu lugemisvahem\u00e4lu kasutamiselt, kuid sellest r\u00e4\u00e4gime veel p. 8.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/17d7791a998dd7da747cb7089dce1f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBlockCache on kogu RS-i kaupa, samas on iga tabeli jaoks oma MemStore (iga Column Family jaoks \u00fcks).<\/p>\n<p>Kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudera.com\/blog\/2012\/06\/hbase-write-path\/\">kirjeldatud<\/a><\/noindex> teoorias, kui andmed kirjutatakse vahem\u00e4llu, siis need ei j\u00f5ua sinna ja t\u00f5epoolest, sellised parameetrid CACHE_DATA_ON_WRITE tabeli jaoks ja \"Cache DATA on Write\" RS-i jaoks on seatud v\u00e4\u00e4rtusele false. Kuid praktikast, kui kirjutada andmed MemStore'i, seej\u00e4rel kustutada see kettale (puhastades selguse m\u00f5ttes), seej\u00e4rel eemaldada saadud fail, siis tehes get p\u00e4ringu saame andmed edukalt. Lisaks, isegi kui t\u00e4ielikult blokeerida BlockCache ja t\u00e4ita tabel uute andmetega, siis saavutades MemStore'i v\u00e4ljal\u00fclitamise kettale, kustutades need ja k\u00fcsides teises sessioonis, need ikka kuskilt saadakse. Seega HBase hoiab endas mitte ainult andmeid, vaid ka salap\u00e4raseid m\u00f5istatusi.<\/p>\n<pre><code class=\"bash\">hbase(main):001:0&gt; create 'ns:magic', 'cf'\nLoodud tabel ns:magic\nKestis 1.1533 sekundit\nhbase(main):002:0&gt; put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'\nKestis 0.2610 sekundit\nhbase(main):003:0&gt; flush 'ns:magic'\nKestis 0.6161 sekundit\nhdfs dfs -mv \/data\/hbase\/data\/ns\/magic\/* \/tmp\/trash\nhbase(main):002:0&gt; get 'ns:magic', 'key1'\n cf:c      timestamp=1534440690218, value=try_to_delete_me\n<\/code><\/pre>\n<p>\nParameeter \u201eCache DATA on Read\u201d on seadistatud vale. Kui teil on ideid, siis teretulnud arutama seda kommentaarides.<\/p>\n<h2>5. Andmete paketiline t\u00f6\u00f6tlemine MultiGet\/MultiPut<\/h2>\n<p>\n\u00dcksikute p\u00e4ringute (Get\/Put\/Delete) t\u00f6\u00f6tlemine on \u00fcsna kallis operatsioon, seet\u00f5ttu tuleks neid v\u00f5imalusel \u00fchendatud Listi v\u00f5i Listide alla koondada, mis toob kaasa m\u00e4rkimisv\u00e4\u00e4rse j\u00f5udluse kasvu. Eriti kehtib see kirjutamise operatsioonide jaoks, kuid lugemise puhul on j\u00e4rgmine peidetud karikas. Alloleval graafikul on n\u00e4idatud 50 000 m\u00e4rkme lugemise aega MemStores. Lugemine toimus \u00fches olles ja horisontaalsel teljel on n\u00e4idatud p\u00e4ringu v\u00f5tmete arv. Siit on n\u00e4ha, et kui v\u00f5tmete arv \u00fches p\u00e4ringus suureneb kuni tuhandeni, siis t\u00e4itmisaja kestus langeb, st kiirus suureneb. Kuid vaike- MSLABi re\u017eiimi aktiveerimisel hakkab p\u00e4rast seda piiri j\u00f5udluse j\u00e4rsult langema, kusjuures andmete maht kirje sisse m\u00f5jutab kestust. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/42d3a77d66770a7fed03f83fecdca470.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestid viidi l\u00e4bi virtuaalkeskkonnas, 8 tuuma, HBase versioon 2.0.0-cdh6.0.0-beta1.<\/p>\n<p>MSLAB re\u017eiim on loodud v\u00e4hendama heap'i fragmentatsiooni, mis tuleneb uue ja vana p\u00f5lvkonna andmete segunemisest. Probleemi lahendusena andmed MSLAB re\u017eiimi aktiveerimisel paigutatakse suhteliselt v\u00e4ikestesse rakkudesse (chunk) ja t\u00f6\u00f6deldakse portsjonitena. Tulemuseks on see, et kui k\u00fcsitud andmepaketi maht \u00fcletab reserveeritud suuruse, siis j\u00f5udlus langeb j\u00e4rsult. Teiselt poolt ei ole antud re\u017eiimi v\u00e4ljal\u00fclitamine soovitatav, kuna see v\u00f5ib p\u00f5hjustada peatuseid GC t\u00f5ttu intensiivse andmet\u00f6\u00f6tluse hetkedel. Hea lahendus on suurendada rakuga mahte, kui kirjutamist teostatakse put'i kaudu samal ajal lugemisega. Tuleb m\u00e4rkida, et see probleem ei esine, kui p\u00e4rast kirjutamist antakse k\u00e4sk flush, mis kirjutab MemStore'i kettale, v\u00f5i kui laadimist teostatakse BulkLoad abil. Allolevas tabelis on n\u00e4idatud, et p\u00e4ringud MemStore'ist suuremate (ja sama arvu) andmete puhul p\u00f5hjustavad aeglustumist. Kuid suurendades chunksize'i, toob oleme t\u00f6\u00f6tluse aega normaali juurde.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/0076215bd171257548f8a4c4d4229ba0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLisaks chunksize'i suurendamisele aitab andmete jagamine regioonide kaupa, st tabelite jagamine. See v\u00e4hendab igale regioonile j\u00f5udvate p\u00e4ringute arvu ning kui need on lahtris, siis j\u00e4\u00e4b vastus hea.<\/p>\n<h2>6. Tabelite jagamise strateegia regioonide vahel (jagamine)<\/h2>\n<p>\nKuna HBase on v\u00f5tme-v\u00e4\u00e4rtuse salvestus ja jaotamine toimub v\u00f5tme j\u00e4rgi, on v\u00e4ga oluline jagada andmed \u00fchtlaselt k\u00f5ikide regioonide vahel. N\u00e4iteks teeb kolme ossa jagamine, et andmed jagatakse kolme regiooniks:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/a811ae81e77b48dbf28ed86dbdc35739.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nM\u00f5nikord toob see kaasa j\u00e4rsu aeglustumise, kui hiljem laaditavad andmed on n\u00e4iteks long v\u00e4\u00e4rtustes, mis enamikul juhtudel algavad sama numbriga, n\u00e4iteks:<\/p>\n<p>1000001<br \/>\n1000002<br \/>\n\u2026<br \/>\n1100003<\/p>\n<p>Kuna v\u00f5tmed salvestatakse baitide massiivina, hakkavad k\u00f5ik nad samamoodi ja kuuluvad \u00fchte regioon #1, mis salvestab selle v\u00f5tme vahemiku. On mitmeid jagamise strateegiaid:<\/p>\n<p>HexStringSplit \u2013 Muunib v\u00f5tme stringiks, kasutades kuues\u00fcsteemi kodeeringut vahemikus \"00000000\" =&gt; \"FFFFFFFF\", t\u00e4iendades vasakule nullidega.<\/p>\n<p>UniformSplit \u2013 Muunib v\u00f5tme baitide massiiviks, kasutades kuues\u00fcsteemi kodeeringut vahemikus \"00\" =&gt; \"FF\", t\u00e4iendades paremale nullidega.<\/p>\n<p>Lisaks saab m\u00e4\u00e4rata igasuguseid vahemikke v\u00f5i v\u00f5tmete kogumeid jagamiseks ja seadistada automaatse jagamise. Siiski on \u00fcks lihtsamaid ja t\u00f5husamaid l\u00e4henemisviise UniformSplit ja hash'i kleepimise kasutamine, n\u00e4iteks vanema paari baitidest, kus v\u00f5tme jooksutatakse l\u00e4bi CRC32(rowkey) funktsiooni ja t\u00f5elise rowkey:<\/p>\n<p>hash + rowkey<\/p>\n<p>Siis jagatakse k\u00f5ik andmed \u00fchtlaselt regioonide vahel. Lugemise k\u00e4igus lihtsalt visatakse esimesed kaks baitit \u00e4ra ja j\u00e4\u00e4b algne v\u00f5ti. Samuti kontrollib RS regioonis andmete ja v\u00f5tmete arvu ning \u00fcletades piirangud jagab selle automaatselt osadeks. <\/p>\n<h2>7. T\u00f5rketaluvus ja andmete lokaalsus<\/h2>\n<p>\nKuna iga v\u00f5tme komplekti haldab ainult \u00fcks piirkond, on RS-i v\u00e4ljalangemise v\u00f5i v\u00e4ljalaskmise probleemide lahenduseks k\u00f5igi vajalike andmete salvestamine HDFS-i. Kui RS laguneb, tuvastab master selle ZooKeeperis s\u00fcdamepeatu kaudu. Siis m\u00e4\u00e4rab ta hooldatava piirkonna teisele RS-ile ja kuna HFiles on salvestatud jaotatud failis\u00fcsteemi, loeb uus omanik need v\u00e4lja ja j\u00e4tkab andmete teenindamist. Kuid kuna osa andmetest v\u00f5ib olla MemStores ja ei ole j\u00f5udnud HFilesse, kasutatakse operatsioonide ajaloo taastamiseks WAL-i, mis on samuti salvestatud HDFS-i. P\u00e4rast muudatuste pealekandmist suudab RS vastata p\u00e4ringutele, kuid \u00fcmberpaiknemine p\u00f5hjustab, et osa andmeid ja neid teenindavad protsessid paiknevad erinevates s\u00f5lmedes, st lokaalsus v\u00e4heneb. <\/p>\n<p>Probleemi lahenduseks on major compaction \u2013 see protseduur liigutab faile nendele s\u00f5lmedele, mis nende eest vastutavad (seal, kus nende piirkonnad asuvad), mist\u00f5ttu suureneb selle protseduuri k\u00e4igus oluliselt v\u00f5rgu- ja kettakoormus. Siiski kiireneb hiljem juurdep\u00e4\u00e4s andmetele. Lisaks viib major_compaction k\u00f5ik HFiles kokku \u00fcheks failiks piirkonna piiresse ning puhastab andmed vastavalt tabeli seadistustele. N\u00e4iteks saab m\u00e4\u00e4rata objekti versioonide arvu, mida tuleb s\u00e4ilitada, v\u00f5i eluaega, p\u00e4rast mille m\u00f6\u00f6dumist objekt f\u00fc\u00fcsiliselt kustutatakse.<\/p>\n<p>See protseduur v\u00f5ib avaldada v\u00e4ga positiivset m\u00f5ju HBase t\u00f6\u00f6le. Alloleval pildil on n\u00e4htav, kuidas j\u00f5udlus on degradeerunud aktiivse andmete kirjutamise t\u00f5ttu. N\u00e4ha on, kuidas \u00fchte tabelisse kirjutas 40 voogu ja 40 voogu luges andmeid samaaegselt. Kirjutamisvood vormivad \u00fcha rohkem ja rohkem HFiles, mida teised vood v\u00e4lja loevad. Tulemuseks on, et \u00fcha rohkem andmeid tuleb m\u00e4lust eemaldada ja l\u00f5puks hakkab t\u00f6\u00f6tama GC, mis praktiliselt halvab kogu t\u00f6\u00f6. Major compactioni k\u00e4ivitamine viis tekkinud ummikute puhastamiseni ja j\u00f5udluse taastamiseni.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/6c93b2c10c197663785d3de0bb185481.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTest viidi l\u00e4bi 3 DataNode'i ja 4 RS-i (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 l\u00f5ime). HBase versioon 1.2.0-cdh5.14.2<\/p>\n<p>Tuleb m\u00e4rkida, et major compactioni k\u00e4ivitamine toimus \u201eelavas\u201c tabelis, kuhu kirjutati ja loeti andmeid aktiivselt. Internetis kohtas v\u00e4idet, et see v\u00f5ib tuua kaasa eba\u00f5ige vastuse andmete lugemisel. Kontrollimiseks k\u00e4ivitati protsess, mis genereeris uusi andmeid ja kirjutas need tabelisse, millele j\u00e4rgnes kohene lugemine ja kontrollimine, kas saadud v\u00e4\u00e4rtus vastab sellele, mis oli kirjutatud. Selle protsessi k\u00e4igus k\u00e4ivitati umbes 200 korda major compaction ja \u00fchtegi viga ei registreeritud. V\u00f5ib-olla probleem avaldub harva ja ainult k\u00f5rge koormuse ajal, seega on ohutum siiski planeeritult peatada kirjutamis- ja lugemisprotsessid ning teostada puhastus, v\u00e4ltides selliseid GC kukkumisi.<\/p>\n<p>Samuti ei m\u00f5juta major compaction MemStore'i olekut, selle kettale kirjutamiseks ja kompaktimiseks tuleb kasutada flush'i (connection.getAdmin().flush(TableName.valueOf(tblName))).<\/p>\n<h2>8. Seaded ja j\u00f5udlus<\/h2>\n<p>\nNagu juba mainitud, saavutab HBase k\u00f5ige suurema edusammuga seal, kus tal ei ole vaja midagi teha, BulkLoad'i teostamisel. Siiski kehtib see enamikus s\u00fcsteemides ja inimeste jaoks. Kuid see t\u00f6\u00f6riist sobib pigem suurte andmepakettide massiliseks paigutamiseks, samas kui kui protsess n\u00f5uab paljude samaaegsete lugemis- ja kirjutamis\u00fclesannete t\u00e4itmist, kasutatakse \u00fclaltoodud Get ja Put k\u00e4ske. Optimaalsete parameetrite m\u00e4\u00e4ramiseks viidi l\u00e4bi katseid erinevate tabelite parameetrite ja seadistuste kombinatsioonidega:<\/p>\n<ul>\n<li>K\u00e4ivitati 10 voogu korraga 3 korda j\u00e4rjest (nimetame seda voogude blokkiks). <\/li>\n<li>Kogu voogude blokeeri t\u00f6\u00f6aeg keskmistati ja see oli blokeerimise t\u00f6\u00f6 tulem.<\/li>\n<li>K\u00f5ik vood t\u00f6\u00f6tasid sama tabeliga. <\/li>\n<li>Iga voogude bloki k\u00e4ivitamise eel viidi l\u00e4bi major compaction.<\/li>\n<li>Iga blokk sooritas ainult \u00fchte j\u00e4rgmistest toimingutest: <\/li>\n<\/ul>\n<p>\n \u2014 Put<br \/>\n \u2014 Get<br \/>\n \u2014 Get+Put<\/p>\n<ul>\n<li>Iga blokk sooritas 50 000 kordust oma toimingul.<\/li>\n<li>Kirje suurus blokis on 100 baiti, 1000 baiti v\u00f5i 10000 baiti (juhuslik).<\/li>\n<li>Blokke k\u00e4ivitati erineva soovitud v\u00f5tmete arvuga (kas \u00fcks v\u00f5ti v\u00f5i 10).<\/li>\n<li>Blokke k\u00e4ivitati erinevate tabelite seadistustega. Muudetud parameetrid:<\/li>\n<\/ul>\n<p>\n \u2014 BlockCache = sisse l\u00fclitatud v\u00f5i v\u00e4lja l\u00fclitatud<br \/>\n \u2014 BlockSize = 65 KB v\u00f5i 16 KB<br \/>\n \u2014 Partitsioonide arv = 1, 5 v\u00f5i 30<br \/>\n \u2014 MSLAB = sisse l\u00fclitatud v\u00f5i v\u00e4lja l\u00fclitatud<\/p>\n<p>Nii n\u00e4eb blokk v\u00e4lja:<\/p>\n<p>a. MSLAB re\u017eiim l\u00fclitati sisse\/v\u00e4lja.<br \/>\nb. Loodi tabel, millele kehtestati j\u00e4rgmised parameetrid: BlockCache = true\/none, BlockSize = 65\/16 Kb, Partition = 1\/5\/30. <br \/>\nc. Seati juurde GZ kokkusurumine.<br \/>\nd. K\u00e4ivitati 10 l\u00f5ime, mis teostasid 1\/10 put\/get\/get+put operatsiooni selle tabeliga, kus kirjed olid suurustega 100\/1000\/10000 baiti, teostades j\u00e4rjestikuselt 50 000 p\u00e4ringut (v\u00f5tmed on juhuslikud).<br \/>\ne. Punkt d kordus kolm korda.<br \/>\nf. K\u00f5igi l\u00f5imede t\u00f6\u00f6aeg keskmistati. <\/p>\n<p>K\u00e4sitleti k\u00f5iki v\u00f5imalikke kombinatsioone. Eeldatavalt, kui kirje suurus suureneb, siis kiirus langeb v\u00f5i et vahem\u00e4lu keelamine viib aeglustumiseni. Siiski oli eesm\u00e4rk m\u00f5ista iga parameetri m\u00f5ju ulatust ja t\u00e4htsust, seet\u00f5ttu edastati kogutud andmed lineaarse regressiooni funktsiooni sisendiks, mis v\u00f5imaldab hinnata usaldusv\u00e4\u00e4rsust t-statistika abil. Allpool on toodud tulemused Put operatsioone teostavate plokkide t\u00f6\u00f6 kohta. T\u00e4ielik kombinatsioonide arv 2*2*3*2*3 = 144 varianti + 72, kuna m\u00f5ned olid teostatud kaks korda. Seega kokku 216 k\u00e4ivitust:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/7a13c7a9b3ff1859976800f5d45cd51b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTestimine viidi l\u00e4bi mini-klastril, mis koosnes 3 DataNode'ist ja 4 RS'ist (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 l\u00f5ime). HBase versioon 1.2.0-cdh5.14.2.<\/p>\n<p>K\u00f5ige k\u00f5rgem sisestamise kiirus 3.7 sekundi jooksul saavutati MSLAB re\u017eiimi v\u00e4ljal\u00fclitamisel, \u00fches osaga tabelis, koos lubatud BlockCache'iga, BlockSize = 16, kirjed 100 baiti 10 t\u00fckki pakis.<br \/>\nK\u00f5ige madalam sisestamise kiirus 82.8 sekundi jooksul saavutati MSLAB re\u017eiimi sissel\u00fclitamisel, \u00fches osaga tabelis, koos lubatud BlockCache'iga, BlockSize = 16, kirjed 10000 baiti 1 t\u00fckiga.<\/p>\n<p>N\u00fc\u00fcd vaatame mudelit. N\u00e4eme, et mudeli kvaliteet R2 j\u00e4rgi on hea, kuid on t\u00e4iesti selge, et siit ekstrapoleerimine on vastun\u00e4idustatud. S\u00fcsteemi reaalsed k\u00e4itumised parameetrite muutmisel ei ole lineaarsed, see mudel on vajalik mitte prognoosimiseks, vaid m\u00f5istmiseks, mis juhtus antud parameetrite piires. N\u00e4iteks n\u00e4eme siin, et Stuudi kriitiumi j\u00e4rgi ei oma Put operatsiooni puhul BlockSize ja BlockCache parameetrid t\u00e4htsust (mis on \u00fcldiselt \u00fcsna eeldatav):<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/2fb65d1809d53f2b47f4f8829a9efc65.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuid see, et arvu suurenemine osade arvus v\u00e4hendab j\u00f5udlust, on pisut ootamatu (oleme juba n\u00e4inud positiivset m\u00f5ju osade arvu suurenemisel BulkLoad'i puhul), kuigi see on seletatav. Esiteks, t\u00f6\u00f6tlemiseks tuleb vormistada p\u00e4ringud 30 piirkonda asemel \u00fche suhtes, ning andmemaht ei ole piisavalt suur, et see kasu tooks. Teiseks m\u00e4\u00e4rab kogu t\u00f6\u00f6aeg k\u00f5ige aeglasem RS, ning kuna DataNode'ide arv on v\u00e4iksem RS-ide arvust, siis osa piirkondadest ei oma null-lokaalsust. Ja vaatame viit liidrit:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/8ad7e832879156eaa96e630458405cdc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00fc\u00fcd hindame Get plokkide t\u00e4itmise tulemusi:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/8a5dd45422c74e8815011d7e9b805ccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOsade arv on kaotanud oma t\u00e4htsuse, mis v\u00f5ib seletuda sellega, et andmed on h\u00e4sti vahem\u00e4lus ja lugemise vahem\u00e4lu on k\u00f5ige olulisem (statistiliselt) parameeter. Loomulikult on p\u00e4ringus s\u00f5numite arvu suurendamine samuti p\u00e4ris kasulik j\u00f5udlusele. Parimad tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/9d237f9fdbeaf5412daec2fc2fa24b01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa l\u00f5puks vaatame plokki, mis tegi k\u00f5igepealt get ja seej\u00e4rel put:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/75137207a4a69acccad036882794094b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSiin on k\u00f5ik parameetrid olulised. Ja liidrite tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/c166933d81e86f36958e3af58297f876.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>9. Koormuse testimine<\/h2>\n<p>\nJa l\u00f5puks k\u00e4ivitame enam-v\u00e4hem korraliku koormuse, kuid alati on huvitavam, kui on, millega v\u00f5rrelda. DataStaxi veebisaidil - Cassandra peamise arendaja juures on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.datastax.com\/wp-content\/themes\/datastax-2014-08\/files\/NoSQL_Benchmarks_EndPoint.pdf\">tulemused<\/a><\/noindex> NoSQL hoiustamise NT rida, sealhulgas HBase versioon 0.98.6-1. Laadimist tehti 40 l\u00f5ime kaudu, andmemaht oli 100 baiti, SSD kettad. Testimise tulemused operatsioonide Read-Modify-Write n\u00e4itasid selliseid tulemusi.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/521e9dff60f462e6dabebc1234e028be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Kuidas ma aru sain, lugemine toimus 100 kirje kaupa ja 16 HBase nodi puhul n\u00e4itas DataStaxi test tootlikkust 10 tuhat operatsiooni sekundis. <\/p>\n<p>Hea, et meie klastris on samuti 16 s\u00f5lme, kuid mitte just \"hea\" on see, et igas on 64 tuuma (voogu), samas kui DataStaxi testis oli vaid 4. Teiselt poolt on neil SSD terad, meil aga HDD ja uuem HBase versioon ning CPU kasutamine koormuse ajal suurenes praktiliselt mitte oluliselt (visuaalselt 5\u201310 protsenti). Kuid proovime siiski selle konfiguratsiooniga alustada. Tabelid on vaikeseaded, lugemine toimub v\u00f5tmevahemikus 0\u201350 miljonit juhuslikult (st iga kord sisuliselt uus). Tabelis on 50 miljonit kirjet, jagatud 64 partitsiooniks. V\u00f5tmed on crc32 j\u00e4rgi hashitud. Tabelid on vaikeseadetes, MSLAB on sisse l\u00fclitatud. K\u00e4ivitame 40 voogu, iga voog loeb 100 juhusliku v\u00f5tme komplekti ja kirjutab kohe 100 genereeritud bitti tagasi nende v\u00f5tmete alla. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/776490f01121cc434135f733311b7722.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Stend: 16 DataNode'i ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 voogu). HBase versioon 1.2.0-cdh5.14.2.<\/p>\n<p>Keskmine tulemus on l\u00e4hemal 40 000 tehingule sekundis, mis on oluliselt parem kui DataStaxi testis. Kuid eksperimendi eesm\u00e4rgil on m\u00f5istlik t\u00e4iendada m\u00f5ningaid tingimusi. \u00dcksikutel juhtudel on v\u00e4het\u00f5en\u00e4oline, et kogu t\u00f6\u00f6 k\u00e4ib ainult \u00fche tabeliga ja ainult unikaalsete v\u00f5tmetega. Oletame, et on olemas mingi \"kuum\" v\u00f5tme komplekt, mis genereerib peamise koormuse. Seet\u00f5ttu proovime luua koormust suuremate kirjetega (10 KB), samuti pakkidena 100, 4 erinevas tabelis ja piirates n\u00f5utavate v\u00f5tmete vahemiku 50 tuhandele. Alloleval graafikul on n\u00e4idatud 40 voolu k\u00e4ivitamine, iga voog loeb 100 v\u00f5tme komplekti ja kirjutab juurde juhuslikud 10 KB nende v\u00f5tmete alla. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/30d29f1b98663e3c07cb2be20e93876a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStend: 16 DataNode'i ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 voogu). HBase versioon 1.2.0-cdh5.14.2.<\/p>\n<p>Koormuse k\u00e4igus k\u00e4ivitati mitu korda major compaction, nagu eespool n\u00e4idatud, ilma selle protseduurita v\u00e4heneb t\u00f5husus aja jooksul, kuid selle teostamise ajal tekib ka t\u00e4iendav koormus. Langused on p\u00f5hjustatud erinevatest teguritest. M\u00f5nikord l\u00f5petasid vood t\u00f6\u00f6 ja kuni nende taask\u00e4ivitamiseni tekkis paus, m\u00f5nikord aitasid kolmandate osapoolte rakendused koormust tekitada klastris.<\/p>\n<p>Lugemine ja kohe kirjutamine on HBase'i jaoks \u00fcks keerulisemaid t\u00f6\u00f6stsenaariume. Kui teha ainult v\u00e4ikeseid put-p\u00e4ringuid, n\u00e4iteks 100 bait, kombineerides need partii kaupa 10-50 tuhat, v\u00f5ib saavutada sadu tuhandeid toiminguid sekundis, ja sarnane olukord kehtib ka ainult lugemise p\u00e4ringute puhul. Tuleb m\u00e4rkida, et tulemused on radikaalselt paremad v\u00f5rreldes DataStaxiga, peamiselt t\u00e4nu 50 tuhande kaupa blokeeritud p\u00e4ringutele.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/412bda50a55093224169f048ea2f863a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStend: 16 DataNode'i ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 voogu). HBase versioon 1.2.0-cdh5.14.2.<\/p>\n<h2>10. J\u00e4reldused<\/h2>\n<p>\nSee s\u00fcsteem on piisavalt paindlikult seadistatav, kuid paljude parameetrite m\u00f5ju j\u00e4\u00e4b endiselt teadmata. Osa neist on testitud, kuid ei kuulunud l\u00f5plikku testide kogumisse. N\u00e4iteks eelnevad eksperimendid n\u00e4itasid, et parameeter DATA_BLOCK_ENCODING, mis kodeerib teavet, kasutades naaberloomuste v\u00e4\u00e4rtusi, on oluliselt v\u00e4hem m\u00e4rkimisv\u00e4\u00e4rne, mis on arusaadav juhuslike andmete jaoks. Suure hulga korduvate objektide kasutamisel v\u00f5ib v\u00f5it olla m\u00e4rkimisv\u00e4\u00e4rne. \u00dcldiselt v\u00f5ib \u00f6elda, et HBase j\u00e4tab mulje t\u00f5sisest ja l\u00e4bim\u00f5eldud andmebaasist, mis v\u00f5ib suurtel andmeblokiga t\u00f6\u00f6tledes olla piisavalt t\u00f5hus. Eriti juhul, kui on v\u00f5imalik lugemise ja kirjutamise protsessid ajaliselt lahutada.<\/p>\n<p>Kui midagi tundub teie arvates ebapiisavalt k\u00e4sitletud, olen valmis r\u00e4\u00e4kima l\u00e4hemalt. Soovitame jagada oma kogemusi v\u00f5i arutada, kui millegagi ei n\u00f5ustu.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sberbank\/blog\/420425\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u043b \u041b\u0438\u043f\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0442\u0435\u0445\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HBase \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0445\u043e\u0434\u0435 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0441\u044f \u043e\u043f\u044b\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c (\u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e). \u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0441 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 HBase 1.2.0-cdh5.14.2 \u0438 2.0.0-cdh6.0.0-beta1. \u041e\u0431\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 HBASE \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 HBASE [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55302","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u043b \u041b\u0438\u043f\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0442\u0435\u0445\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HBase \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f HBase | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u043b \u041b\u0438\u043f\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0442\u0435\u0445\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HBase \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-16T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:24+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 HBase'i teooria ja praktika | ProHoster","description":"Tere p\u00e4evast! Minu nimi on Danil Lipov\u00f5i, meie meeskond Sbertechis on hakanud HBase'i kasutama operatiivandmete ladustamiseks.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f HBase | ProHoster","og:description":"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0430\u043d\u0438\u043b \u041b\u0438\u043f\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0442\u0435\u0445\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HBase \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-16T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:24+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55302","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:46:28","updated":"2022-09-28 08:11:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=55302"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55302\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}