{"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 kasutamise teooria ja praktika","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere! Minu nimi on Danil Lipovoy, meie meeskond Sbertechiis on hakanud kasutama HBase'i operatiivsete andmete salvestamiseks. Selle uurimise k\u00e4igus on kogunenud teadmisi, mille tahtsime s\u00fcsteematiseerida ja kirja panna (loodame, et see on paljudele kasulik). Allpool esitatud eksperimentid viidi l\u00e4bi HBase'i versioonidega 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 kirjutamine HBASE'sse<\/li>\n<li>Andmete lugemine HBASE'st<\/li>\n<li>Andmete vahem\u00e4lu<\/li>\n<li>Partii t\u00f6\u00f6tlemine MultiGet\/MultiPut<\/li>\n<li>Tabelite v\u00e4ljajagamise strateegia (splitting)<\/li>\n<li>Talitlush\u00e4ired, tihendamine ja andmete kohalikkus<\/li>\n<li>Seaded ja j\u00f5udlus<\/li>\n<li>Koormustestimine<\/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 kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/30800d8a48de4c52ff1650a4f1dec4c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nReserv Master j\u00e4lgib aktiivse s\u00f5lme ZooKeeperi heartbeat'i ja kaotuse korral v\u00f5tab meisterfunktsioonid enda kanda. <\/p>\n<h2>2. Andmete kirjutamine HBASE'sse<\/h2>\n<p>\nAlustame k\u00f5ige lihtsamast juhtumist \u2013 v\u00f5tme-v\u00e4\u00e4rtuse objekti kirjutamine mingisse tabelisse funktsiooniga put(rowkey). Klient peab k\u00f5igepealt v\u00e4lja selgitama, kus asub juureregionaalserver (Root Region Server \u2013 RRS), mis salvestab tabeli hbase:meta. Selle teabe saab ta ZooKeeperilt. Seej\u00e4rel p\u00f6\u00f6rdub ta RRS-i poole ja loeb tabeli hbase:meta, millest ta tuvastab, milline RegionServer (RS) vastutab antud rowkey v\u00f5tme andmete salvestamise eest huvipakkuvas tabelis. Edasi, et meta-tabelit kasutada, vahem\u00e4lestab klient selle ja seega j\u00e4rgnevate p\u00e4ringute vastuv\u00f5tt toimub kiiremini, otse RS-iga.<\/p>\n<p>Seej\u00e4rel kirjutab RS, saades p\u00e4ringu, k\u00f5igepealt selle WriteAheadLog'i (WAL), mis on vajalik taastamiseks, kui s\u00fcsteem peaks kokku kukkuma. Seej\u00e4rel salvestab andmed MemStore'i. See on m\u00e4lu vahem\u00e4lu, mis sisaldab antud regiooni j\u00e4rjestatud v\u00f5tmete kogumit. Tabel v\u00f5ib olla jagatud regioonideks (partitsioonideks), millest iga\u00fcks sisaldab omavahel mitte\u00fchtivaid v\u00f5tmete komplekte. See v\u00f5imaldab regioonide jagamist erinevatele serveritele, et saavutada paremat j\u00f5udlust. Kuid hoolimata selle v\u00e4ite ilmsetest eeliseid, n\u00e4eme hiljem, et see ei toimi k\u00f5igis olukordades.<\/p>\n<p>P\u00e4rast salvestuse paigutamist MemStore'i naaseb kliendile vastus, et salvestus on edukalt tehtud. Sellegipoolest salvestatakse see t\u00f5eliselt ainult vahem\u00e4llu ja j\u00f5uab ketta peale alles p\u00e4rast teatud ajavahemiku m\u00f6\u00f6dumist v\u00f5i uute andmete t\u00e4itmise korral. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/10f4d5d600a20882690f5cc81322bc41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKustutamisoperatsiooni (Delete) sooritamisel ei toimu andmete f\u00fc\u00fcsilist kustutamist. Need lihtsalt m\u00e4rgitakse kustutatuks, samas kui tegelik h\u00e4vitamine toimub major compact'i funktsiooni k\u00e4ivitamisel, millest l\u00e4hemalt r\u00e4\u00e4gitakse punktis 7.<\/p>\n<p>HFile formaadis failid kogunevad HDFS-is ja aeg-ajalt k\u00e4ivitatakse minor compact'i protsess, mis lihtsalt liidab v\u00e4iksed failid suuremateks, midagi kustutamata. Aja jooksul muutub see probleemiks, mis avaldub andmete lugemisel (kust me r\u00e4\u00e4gime hiljem). <\/p>\n<p>Peale eespool kirjeldatud laadimisprotsessi on olemas palju t\u00f5husam protseduur, milles seisneb t\u00f5eliselt selle andmebaasi \u00fcks tugevamaid k\u00fclgi \u2013 BulkLoad. See seisneb selles, et me ise valmistame HFiles'd ja paigutame need kettale, mis v\u00f5imaldab suurep\u00e4rast skaleerimist ja saavutada \u00fcsna h\u00e4id kiirus. Sisuliselt on piiranguks mitte HBase, vaid riistvara v\u00f5imalused. 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. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise 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 suurendades tabeli partitsioonide (regioonide) arvu, samuti Spark'i executoreid, saame laadimiskiirusel lisanduse. Samuti s\u00f5ltub kiirus kirjutamise mahust. Suured plokid annavad t\u00f5usu MB\/sekundis, v\u00e4iksed aga lisatud kirjete arvu ajas, kui k\u00f5ik muud tingimused on v\u00f5rdsed. <\/p>\n<p>Samuti on v\u00f5imalik laadimist k\u00e4ivitada kahes tabelis samaaegselt ja saavutada kiirus kahekordistumine. Allpool on n\u00e4ha, et 10 KB plokkide kirjutamine kahes tabelis toimub kiirusel umbes 600 MB\/sek iga\u00fche kohta (kokku 1275 MB\/sek), mis vastab \u00fche tabeli kirjutamise kiirusel 623 MB\/sek (vt punkt 11 \u00fclal).<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/9f1b4fc0c80b797111494d400e9ce332.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSiiski n\u00e4itab teine k\u00e4ivitus 50 KB kirjetega, et laadimiskiirus kasvab enam-v\u00e4hem mitteolemasolevalt, mis viitab piirv\u00e4\u00e4rtuste l\u00e4henemisele. Samas tuleb arvestada, et HBASEle ei tekitata peaaegu mingeid koormusi, k\u00f5ik, mida temalt n\u00f5utakse, on k\u00f5igepealt andmete edastamine hbase:meta-st, ja p\u00e4rast HFiles'i paigaldamist andmete BlockCache'i t\u00fchjendamine ning MemStore'i vahem\u00e4lu salvestamine kettale, kui see pole t\u00fchi.<\/p>\n<h2>3. Andmete lugemine HBASE'st<\/h2>\n<p>\nKui arvata, et kogu teave hbase:meta on klient juba olemas (vt p.2), siis saadetakse p\u00e4ring kohe sellele RS-ile, kus vajalik v\u00f5ti asub. Esmalt otsitakse MemCache'is. S\u00f5ltumata sellest, kas seal on andmeid v\u00f5i mitte, otsitakse ka BlockCache'i puhvris ja vajadusel HFailes. Kui andmed leitakse failist, paigutatakse need BlockCache'i ja j\u00e4rgmise p\u00e4ringu korral tagastatakse need kiiremini. Otsing HFailes toimub suhteliselt kiiresti, kasutades Bloom'i filtrit, mis t\u00e4hendab, et v\u00e4ikese andmemahtude lugemise korral m\u00e4\u00e4rab see kohe, kas fail sisaldab vajalikku v\u00f5tit; kui ei, siis minnakse j\u00e4rgmise juurde.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/a21b1b825a84cfd02507ec334e9452fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSaades andmed neist kolmest allikast, koostab RS vastuse. Konkreetsemalt v\u00f5ib ta vajadusel edastada mitu leitud objekti versiooni, kui klient on n\u00f5udnud versioonide ajalugu.<\/p>\n<h2>4. Andmete vahem\u00e4lu<\/h2>\n<p>\nMemStore ja BlockCache puhvrite maht v\u00f5ib ulatuda kuni 80% RS-i m\u00e4\u00e4ratud on-heap m\u00e4lust (\u00fclej\u00e4\u00e4nud on reserveeritud RS-i teenindavateks \u00fclesanneteks). Kui t\u00fc\u00fcpiline kasutusre\u017eiim on selline, et protsessid kirjutavad ja kohe loevad neid andmeid, siis on m\u00f5ttekas v\u00e4hendada BlockCache'i ja suurendada MemStore'i, kuna kirjutamisel ei satu andmed lugemiseks puhvri, mist\u00f5ttu BlockCache'i kasutamine toimub harvem. BlockCache'i puhver koosneb kahest osast: LruBlockCache (alati on-heap) ja BucketCache (enamasti off-heap v\u00f5i SSD-l). BucketCache'i kasutamine on otstarbekas, kui lugemisep\u00e4ringute arv on v\u00e4ga suur ja need ei mahu LruBlockCache'i, mis toob kaasa aktiivse Garbage Collector'i t\u00f6\u00f6. Siiski ei maksa oodata kiiruset\u00f5usu lugemisekahe kasutamisel, kuid selle juurde naaseme veel p. 8.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/17d7791a998dd7da747cb7089dce1f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBlockCache on \u00fcks kogu RS-i kohta, MemStore on iga tabeli jaoks oma (iga Column Family kohta \u00fcks).<\/p>\n<p>Kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudera.com\/blog\/2012\/06\/hbase-write-path\/\">detailsemalt<\/a><\/noindex> Teoorias, andmeid kirjutades ei satu need puhvri, ja t\u00f5epoolest on selle tabeli ja RS-i jaoks parameetrid CACHE_DATA_ON_WRITE seadistatud valele. Kuid praktikas, kui kirjutada andmed MemStore'i, siis seej\u00e4rel see kettale t\u00fchjendada (sellega puhastades), p\u00e4rast seda fail kustutada, saame get p\u00e4ringuga edukalt andmed. Ja isegi kui t\u00e4ielikult BlockCache keelata ja tabel uute andmetega t\u00e4ita, ning saavutada MemStore'i kirjutamine kettale, need kustutada ja teises sessioonis k\u00fcsida, t\u00f5mmatakse need ikkagi kuskilt v\u00e4lja. Nii et 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'\nCreated table ns:magic\nTook 1.1533 seconds\nhbase(main):002:0&gt; put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'\nTook 0.2610 seconds\nhbase(main):003:0&gt; flush 'ns:magic'\nTook 0.6161 seconds\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\u201c on seadistatud valele. Kui teil on ideid, on oodatud arutamiseks kommentaarides.<\/p>\n<h2>5. Andmete grupi t\u00f6\u00f6tlemine MultiGet\/MultiPut<\/h2>\n<p>\nAinulaadsete p\u00e4ringute (Get\/Put\/Delete) t\u00f6\u00f6tlemine on \u00fcsna kulukas operatsioon, seet\u00f5ttu tuleks neid v\u00f5imaluse korral \u00fchendada Listi v\u00f5i Listiga, mis v\u00f5imaldab saavutada m\u00e4rkimisv\u00e4\u00e4rset j\u00f5udluse t\u00f5usu. Eriti puudutab see kirjutamisoperatsiooni, kuid lugemisel on j\u00e4rgmine peidul k\u00f5rvaline probleem. Alloleval graafikul on n\u00e4idatud 50 000 kirje lugemise aega MemStore'ist. Lugemine toimus \u00fches l\u00f5imes ning horisontaalsel teljel on n\u00e4idatud p\u00e4ringu v\u00f5tmete arvu. Siit on n\u00e4ha, et kui v\u00f5tmete arv \u00fche p\u00e4ringu korral suureneb tuhandeni, siis t\u00e4itmisaja v\u00e4henemine toimub, s.t. kiirus suureneb. Kuid kui vaikimisi MSLAB-re\u017eiim on sisse l\u00fclitatud, algab p\u00e4rast seda piiri \u00e4kiline j\u00f5udluse langemine, ja see tuleneb sellest, et mis rohkem andmeid salvestatakse, seda pikem on t\u00f6\u00f6tlemisaeg. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/42d3a77d66770a7fed03f83fecdca470.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestid viidi l\u00e4bi virtuaalses masinas, 8 tuuma, HBase versioon 2.0.0-cdh6.0.0-beta1.<\/p>\n<p>MSLAB re\u017eiim on m\u00f5eldud heap-i fragmenteeringute v\u00e4hendamiseks, mis tekivad uute ja vanade andmete segunemise t\u00f5ttu. Lahenduseks, kui MSLAB on sisse l\u00fclitatud, paigutatakse andmed suhteliselt v\u00e4ikestesse rakkudesse (chunk) ja t\u00f6\u00f6deldakse partii kaupa. Selle tulemusena, kui n\u00f5utud andmepaketi maht \u00fcletab m\u00e4\u00e4ratud suuruse, siis j\u00f5udlus langeb j\u00e4rsult. Teiselt poolt ei ole soovitatav selle re\u017eiimi v\u00e4ljal\u00fclitamine, kuna see toob kaasa peatuste tekkimise GC t\u00f5ttu andmeid intensiivselt t\u00f6\u00f6deldes. Heaks lahenduseks on rakendusmahu suurendamine, kui samal ajal toimub kirjutamine put-i kaudu koos lugemisega. Tasub m\u00e4rkida, et probleemi ei teki, kui p\u00e4rast kirjutamist t\u00e4ita flush k\u00e4sk, mis t\u00fchjendab MemStore kettale, v\u00f5i kui laetakse andmeid BulkLoad'i kaudu. Allolevas tabelis on n\u00e4idatud, et p\u00e4ringud suuremate andmete MemStore'ist (ja sama koguse) toovad kaasa aeglustumise. Kuid suurendades chunksize'i, saame t\u00f6\u00f6tlemise aega normaliseerida.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise 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 piirkondade kaupa, st tabelite jagamine. See toob kaasa, et iga piirkonna jaoks tuleb v\u00e4hem p\u00e4ringuid ja kui need mahtusid rakku, j\u00e4\u00e4b vastus heaks.<\/p>\n<h2>6. Tabelite jagamise strateegia piirkondade kaupa (splittimine)<\/h2>\n<p>\nKuna HBase on key-value salvestus ja partitsioneerimine toimub v\u00f5tme j\u00e4rgi, on \u00e4\u00e4rmiselt oluline andmeid \u00fchtlaselt k\u00f5igi piirkondade vahel jagada. N\u00e4iteks sellise tabeli partitsioneerimine kolme osaks toob kaasa, et andmed jagatakse kolme piirkonna vahel:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/a811ae81e77b48dbf28ed86dbdc35739.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nM\u00f5nikord p\u00f5hjustab see j\u00e4rske aeglustumisi, kui edaspidi laaditavad andmed on n\u00e4iteks long v\u00e4\u00e4rtustes, mis enamasti 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, siis k\u00f5ik nad alustavad \u00fchtmoodi ja kuuluvad \u00fchte piirkonda #1, mis hoiab seda v\u00f5tme vahemikku. On mitu jagamise strateegiat:<\/p>\n<p>HexStringSplit \u2013 Muudab v\u00f5tmeks k\u00fcmnends\u00fcsteemis koodi vahemikus \"00000000\" =&gt; \"FFFFFFFF\" ja t\u00e4idab vasakult nullidega.<\/p>\n<p>UniformSplit \u2013 Muudab v\u00f5tmeks baitide massiivi, mis on k\u00fcmnends\u00fcsteemis kood vahemikus \"00\" =&gt; \"FF\" ja t\u00e4idab parelt nullidega.<\/p>\n<p>Samuti saab m\u00e4\u00e4rata mis tahes vahemiku v\u00f5i v\u00f5tmete kogumi jagamiseks ja seadistada autot\u00f6\u00f6stust. Siiski on \u00fcks lihtsamaid ja t\u00f5husamaid l\u00e4henemisviise UniformSplit ja hash'i \u00fchendamise kasutamine, n\u00e4iteks esimesed kaks baiti v\u00f5tme t\u00f6\u00f6tlemisel funktsiooni CRC32(rowkey) kaudu ja tegelik rowkey:<\/p>\n<p>hash + rowkey<\/p>\n<p>Siis jaotatakse k\u00f5ik andmed \u00fchtlaselt piirkondade vahel. Lugemisel visatakse esimesed kaks baiti lihtsalt k\u00f5rvale ja j\u00e4etakse alles algne v\u00f5ti. Samuti kontrollib RS andmete ja v\u00f5tmete arvu piirkonnas ja kui limiidid \u00fcletatakse, jagab selle automaatselt osadeks. <\/p>\n<h2>7. Vigade taluvus ja andmete kohalolek<\/h2>\n<p>\nKuna iga v\u00f5tme seeria eest vastutab ainult \u00fcks piirkond, on RS-i v\u00f5i selle v\u00e4ljal\u00fclitamisega seotud probleemide lahenduseks k\u00f5ik vajalikud andmed hoida HDFS-is. RS-i rikke korral avastab master selle ZooKeeperis s\u00fcdametuksis oleva s\u00f5lme kaudu. Siis m\u00e4\u00e4rab ta hallatava piirkonna teisele RS-ile ja kuna HFiles salvestatakse jaotatud failis\u00fcsteemi, loeb uus peremees need v\u00e4lja ja j\u00e4tkab andmete teenindamist. Kuid kuna osa andmeid v\u00f5ib olla MemStore'is ja pole veel HFilesisse j\u00f5udnud, kasutatakse toimingute ajaloos WAL-i, mis samuti hoitakse HDFS-is. P\u00e4rast muudatuste elluviimist suudab RS p\u00e4ringutele vastata, kuid liikumine viib selleni, et osa andmeid ja nende teenindamise protsessid asuvad erinevates s\u00f5lmedes, st lokaliteed v\u00e4hendatakse. <\/p>\n<p>Probleemi lahenduseks on major compaction \u2013 see protseduur viib failid nende s\u00f5lmedesse, mis nende eest vastutavad (seal, kus nende piirkonnad asuvad), mille tulemusena suureneb selle protseduuri ajal j\u00e4rsult koormus v\u00f5rku ja kettale. Kuid edaspidi kiireneb juurdep\u00e4\u00e4s andmetele oluliselt. Lisaks teostab major_compaction k\u00f5igi HFiles'ide \u00fchendamist \u00fcheks failiks piirkonna raames ja puhastab andmeid tabeli seadistuste j\u00e4rgi. N\u00e4iteks v\u00f5ib m\u00e4\u00e4rata objekti versioonide arvu, mida tuleb s\u00e4ilitada, v\u00f5i selle eluiga, p\u00e4rast mille m\u00f6\u00f6dumist objekt f\u00fc\u00fcsiliselt eemaldatakse.<\/p>\n<p>See protseduur v\u00f5ib positiivselt m\u00f5jutada HBase'i toimimist. Allolev pilt n\u00e4itab, kuidas j\u00f5udlus halvenes aktiivsete andmete kirjutamise t\u00f5ttu. N\u00e4ha on, kuidas \u00fchte tabelisse kirjutas 40 haru ja 40 haru luges andmeid samal ajal. Kirjutavad harud genereerisid \u00fcha rohkem HFiles'e, mida lugesid teised harud. tulemuseks on see, et j\u00e4rjest rohkem andmeid on vajalik m\u00e4lust eemaldada ja l\u00f5puks hakkab t\u00f6\u00f6le GC, mis praktiliselt halvab kogu t\u00f6\u00f6. Major compactioni k\u00e4ivitamine viis kogunenud segaduse puhastamiseni ja j\u00f5udluse taastamiseni.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise 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 peal (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 haru). HBase'i versioon 1.2.0-cdh5.14.2<\/p>\n<p>On oluline m\u00e4rkida, et major compaction viidi l\u00e4bi \"elava\" tabeli peal, kuhu kirjutati ja loeti aktiivselt andmeid. V\u00f5rgus esines v\u00e4iteid, et see v\u00f5ib p\u00f5hjustada vale vastust andmete lugemise ajal. Kontrollimiseks k\u00e4ivitati protsess, mis genereeris uusi andmeid ja kirjutas need tabelisse. Seej\u00e4rel loeti kohe ja v\u00f5rreldi, kas saadud v\u00e4\u00e4rtus kattus salvestatuga. Selle protsessi k\u00e4igus k\u00e4ivitati umbes 200 korda major compaction ja mitte \u00fchtegi riket ei registreeritud. Probleem v\u00f5ib ilmneda harva ja ainult k\u00f5rgete koormuste korral, seega on siiski turvalisem plaane teha, peatades kirjutamise ja lugemise protsessid ning teostada puhastust, v\u00e4ltides nii GC languseid.<\/p>\n<p>Samuti ei m\u00f5juta major compaction MemStore'i seisukorda, et selle andmeid kettale kirjutada ja kompaktida, tuleb kasutada flush (connection.getAdmin().flush(TableName.valueOf(tblName))).<\/p>\n<h2>8. Seaded ja j\u00f5udlus<\/h2>\n<p>\nNagu juba mainitud, on HBase k\u00f5ige edukam seal, kus tal pole vaja midagi teha, BulkLoad'i teostamisel. Kuid see kehtib enamiku s\u00fcsteemide ja inimeste kohta. Siiski sobib see t\u00f6\u00f6riist pigem andmete massiliseks salvestamiseks suurtel blokkidel, samas kui, kui protsess n\u00f5uab paljude konkurentsiv\u00f5imeliste lugemise ja kirjutamise p\u00e4ringute t\u00e4itmist, kasutatakse \u00fclalnimetatud Get ja Put k\u00e4ske. Optimaalsete parameetrite m\u00e4\u00e4ramiseks viidi l\u00e4bi katseid erinevate tabeli parameetrite ja seadistuste kombinatsioonide korral:<\/p>\n<ul>\n<li>K\u00e4ivitati 10 l\u00f5ime korraga 3 korda j\u00e4rjest (nimetame seda l\u00f5imeblokiks). <\/li>\n<li>K\u00f5igi l\u00f5imede t\u00f6\u00f6tamise aeg plokis keskmistati ja see oli ploki l\u00f5ppkokkuv\u00f5te.<\/li>\n<li>K\u00f5ik l\u00f5imed t\u00f6\u00f6tasid \u00fche ja sama tabeliga. <\/li>\n<li>Iga l\u00f5imeploki k\u00e4ivituse eel viidi l\u00e4bi major compaction.<\/li>\n<li>Iga plokk teostas ainult \u00fchte j\u00e4rgmistest tegevustest: <\/li>\n<\/ul>\n<p>\n \u2014 Put<br \/>\n \u2014 Get<br \/>\n \u2014 Get+Put<\/p>\n<ul>\n<li>Iga plokk teostas 50 000 kordust oma tegevuses.<\/li>\n<li>Bloki kirje suurus on 100 baiti, 1000 baiti v\u00f5i 10000 baiti (random).<\/li>\n<li>Plokid k\u00e4ivitati erineva arvuga k\u00fcsitavaid v\u00f5tmeid (kas \u00fcks v\u00f5ti v\u00f5i 10).<\/li>\n<li>Plokid k\u00e4ivitati erinevate tabeli seadistustega. Muudeti parameetreid:<\/li>\n<\/ul>\n<p>\n \u2014 BlockCache = sisse v\u00f5i v\u00e4lja<br \/>\n \u2014 BlockSize = 65 Kb v\u00f5i 16 Kb<br \/>\n \u2014 Partitsioonid = 1, 5 v\u00f5i 30<br \/>\n \u2014 MSLAB = sisse v\u00f5i v\u00e4lja<\/p>\n<p>Nii et plokk n\u00e4eb v\u00e4lja j\u00e4rgmine:<\/p>\n<p>a. Kujundati MSLAB re\u017eiimi sisse\/v\u00e4lja.<br \/>\nb. Loodi tabel, millele seadistati j\u00e4rgmised parameetrid: BlockCache = true\/none, BlockSize = 65\/16 Kb, Partitsioonid = 1\/5\/30. <br \/>\nc. Seati GZ tihendamine.<br \/>\nd. K\u00e4ivitati 10 l\u00f5ime korraga, tehes 1\/10 operatsioonidest put\/get\/get+put sellele tabelile 100\/1000\/10000 baiti, teostades j\u00e4rjest 50 000 p\u00e4ringut (v\u00f5tmed on juhuslikud).<br \/>\ne. Punkt d kordus kolm korda.<br \/>\nf. K\u00f5igi l\u00f5imede t\u00f6\u00f6tamise aeg keskmistati. <\/p>\n<p>Kontrolliti k\u00f5iki v\u00f5imalikke kombinatsioone. \u00d5ige on, et kui kirje suurus suureneb, siis kiirus langeb v\u00f5i et kui vahem\u00e4lu keelatakse, toob see aeglustumist. Siiski oli eesm\u00e4rk m\u00f5ista iga parameetri m\u00f5ju ulatust ja t\u00e4htsust, seet\u00f5ttu esitati kogutud andmed lineaarse regressiooni funktsiooni sisendiks, mis v\u00f5imaldab hinnata usaldusv\u00e4\u00e4rsust t-statistika abil. Allpool on esitatud tulemused, mis on seotud Put operatsioone teostavate plokkidega. T\u00e4ielik kombinatsioonide kogum 2*2*3*2*3 = 144 varianti + 72, kuna m\u00f5ned viidi ellu kaks korda. Seega kokku 216 k\u00e4ivitust:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/7a13c7a9b3ff1859976800f5d45cd51b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTestimine toimus 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\u00f5rgeim sisestuskiirus 3.7 sec saavutati MSLAB re\u017eiimi v\u00e4lja l\u00fclitamisel, tabelis, millel oli \u00fcks partitsioon, sisse l\u00fclitatud BlockCache, BlockSize = 16, 100 baidi kirjeid, 10 t\u00fckki pakis.<br \/>\nMadalaim sisestuskiirus 82.8 sec saavutati MSLAB re\u017eiimi sisse l\u00fclitamisel, tabelis, millel oli \u00fcks partitsioon, sisse l\u00fclitatud BlockCache, BlockSize = 16, 10000 baidi kirjeid, 1 t\u00fckk.<\/p>\n<p>N\u00fc\u00fcd vaatame mudelit. N\u00e4eme head mudeli kvaliteeti R2 kaudu, kuid t\u00e4iesti selge on, et ekstrapoleerimine on siin sobimatu. Reaalne s\u00fcsteemi k\u00e4itumine parameetrite muutumisel ei ole lineaarne, see mudel on vajalik mitte ennustamiseks, vaid m\u00f5istmiseks, mis on juhtunud antud parameetrite jooksul. N\u00e4iteks n\u00e4eme siin St\u00fcdiendi kriteeriumi j\u00e4rgi, et Put operatsiooni osas ei oma parameetrid BlockSize ja BlockCache (mis on \u00fcldiselt \u00fcsna ennustatav):<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/2fb65d1809d53f2b47f4f8829a9efc65.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuid on \u00fcllatav, et partitsioonide arvu suurenemine toob kaasa j\u00f5udluse languse (oleme juba n\u00e4inud positiivset m\u00f5ju partitsioonide arvu suurendamisel BulkLoad'i puhul), kuigi see on arusaadav. Esiteks peab t\u00f6\u00f6tlemiseks vormistama p\u00e4ringud 30 piirkonna suhtes, mitte \u00fche, samas kui andmemaht ei ole piisavalt suur, et see eeliseid tooks. Teiseks, t\u00f6\u00f6aja m\u00e4\u00e4rab aeglasem RS, ja kuna DataNode'ide arv on v\u00e4hem kui RS'i arv, on osa piirkondadest nullkohalikud. Vaatame n\u00fc\u00fcd paremaid tulemusi:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/8ad7e832879156eaa96e630458405cdc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00fc\u00fcd hinnakem Get blokkide t\u00e4itmise tulemusi:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/8a5dd45422c74e8815011d7e9b805ccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPartitsioonide arv on kaotanud oma t\u00e4htsuse, mis on t\u00f5en\u00e4oliselt seletatav asjaoluga, et andmed vahem\u00e4lus, ja lugemisvahem\u00e4lu on k\u00f5ige olulisem (statistiliselt) parameeter. Loomulikult on p\u00e4ringutes s\u00f5numite arvu suurendamine samuti v\u00e4ga kasulik j\u00f5udluse jaoks. Parimad tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/9d237f9fdbeaf5412daec2fc2fa24b01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa l\u00f5puks vaatame plokki, mis t\u00e4itis k\u00f5igepealt get'i ja seej\u00e4rel put'i:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise 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 juhtide tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/c166933d81e86f36958e3af58297f876.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>9. Koormustestimine<\/h2>\n<p>\nJa l\u00f5puks k\u00e4ivitame \u00fcsna korraliku koormuse, kuid alati on huvitav, 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 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\u00e4itas selliseid tulemusi.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/521e9dff60f462e6dabebc1234e028be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Nii palju kui ma aru sain, viidi lugemine l\u00e4bi 100 kirje kaupa ja 16 node HBase testis DataStax n\u00e4itas 10 000 operatsiooni sekundis. <\/p>\n<p>Oleneb, et meie klastris on samuti 16 node, kuid mitte just \"\u00f5nnestunud\", et igas on 64 s\u00fcdamikku (voogu), samas kui DataStaxi testis oli vaid 4. Teisest k\u00fcljest on neil SSD kettad, samas kui meil on HDD ja uuem HBase versioon, ning CPU koormus katsetamise ajal ei suurenenud pea \u00fcldse (visuaalselt 5-10 protsenti). Sellegipoolest proovime selle konfiguratsiooniga k\u00e4ivitada. Tabelite seadistused on vaikeseaded, lugemine toimub v\u00f5ti vahemikus 0 kuni 50 miljonit juhuslikult (st tegelikult iga kord uus). Tabelis on 50 miljonit kirjet, jagatud 64 partitsiooniks. V\u00f5tmed on kr\u00fcptitud crc32 alusel. Tabelite seadistused on vaikeseaded, MSLAB on sisse l\u00fclitatud. K\u00e4ivitame 40 voogu, iga voog loeb komplekti 100 juhuslikku v\u00f5tit ja kohe kirjutab genereeritud 100 baiti nende v\u00f5tmete kaudu tagasi. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/776490f01121cc434135f733311b7722.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Stend: 16 DataNode 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 operatsioonile sekundis, mis on oluliselt parem kui DataStaxi testis. Siiski, katse eesm\u00e4rgil on m\u00f5nev\u00f5rra v\u00f5imalik tingimusi muuta. On \u00fcsna ebat\u00f5en\u00e4oline, et kogu t\u00f6\u00f6 toimub ainult \u00fche tabeliga ja ainult ainulaadsete v\u00f5tmetega. Oletame, et on olemas mingi 'kuum' v\u00f5ti komplekt, mis genereerib peamise koormuse. Seet\u00f5ttu proovime luua koormuse suuremate rekorditega (10 KB), samuti komplektidena 100, neljas eri tabelis ja piirates n\u00f5utava v\u00f5tme vahemiku 50 000. Alloleval graafikul on n\u00e4idatud 40 voolu k\u00e4ivitamine, iga voog loeb komplekti 100 v\u00f5tit ja kohe kirjutab juhuslikud 10 KB nende v\u00f5tmete kaudu tagasi. <\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/30d29f1b98663e3c07cb2be20e93876a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStend: 16 DataNode ja 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 voogu). HBase versioon 1.2.0-cdh5.14.2.<\/p>\n<p>Koormuse ajal k\u00e4ivitati mitu korda major compaction, nagu eelnevalt n\u00e4idatud, et ilma selle protseduurita tootlikkus j\u00e4rk-j\u00e4rgult halveneb, kuid selle teostamise ajal tekib samuti t\u00e4iendav koormus. Langused on p\u00f5hjustatud erinevatest p\u00f5hjustest. M\u00f5nikord l\u00f5petavad vood t\u00f6\u00f6 ja nende taask\u00e4ivitamise ajal tekib paus, m\u00f5nikord loovad kolmandate osapoolte rakendused koormuse klastrile.<\/p>\n<p>Lugemine ja kohe kirjutamine - on \u00fcks raskemaid stsenaariume HBase t\u00f6\u00f6ks. Kui teha ainult v\u00e4ikeste suurustega put p\u00e4ringuid, n\u00e4iteks 100 baiti, \u00fchendades need 10-50 tuhat t\u00fckki komplekti, saab tuua sadu tuhandeid operatsioone sekundis, ja sama kehtib ka ainult lugemisj\u00e4rgsete p\u00e4ringute kohta. Tuleb m\u00e4rkida, et tulemused on radikaalselt paremad kui need, mis saadi DataStaxiga, ennek\u00f5ike 50 000 t\u00fcki komplekti p\u00e4ringute t\u00f5ttu.<\/p>\n<p><img decoding=\"async\" alt=\"HBase&#039;i kasutamise teooria ja praktika\" src=\"\/wp-content\/uploads\/2020\/01\/412bda50a55093224169f048ea2f863a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStend: 16 DataNode 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 kohandatav, kuid paljude parameetrite m\u00f5ju j\u00e4\u00e4b endiselt teadmata. Osa neist on testitud, kuid ei kuulu l\u00f5ppkogumi testidesse. N\u00e4iteks eelnevad eksperimendid n\u00e4itasid, et DATA_BLOCK_ENCODING parameetritel, mis kodeerivad teavet naaberates lahtrites olevate v\u00e4\u00e4rtuste abil, on v\u00e4ike t\u00e4htsus, mis on m\u00f5istetav juhuslikult genereeritud andmete jaoks. Suure hulga korduvate objektide kasutamisel v\u00f5ib kasu olla m\u00e4rkimisv\u00e4\u00e4rne. \u00dcldiselt v\u00f5ib \u00f6elda, et HBase j\u00e4tab mulje t\u00f5sise ja l\u00e4bim\u00f5eldud andmebaasina, mis suurte andmeblokiga toimingute puhul v\u00f5ib olla piisavalt efektiivne. Eriti kui on v\u00f5imalik lugemis- ja kirjutamisprotsessid ajaliselt lahku viia.<\/p>\n<p>Kui midagi on teie arvates ebapiisavalt kajastatud, olen valmis r\u00e4\u00e4kima l\u00e4hemalt. Pakume oma kogemuste jagamist v\u00f5i arutame, kui te 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.0.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.0.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\udd47Teooria ja praktika HBase kasutamisel | ProHoster","description":"Tere p\u00e4evast! Minu nimi on Danil Lipovoy, meie meeskond Sbertechi's on hakanud kasutama HBase'i operatiivandmete salvestamiseks.","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}]}}