{"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\/hr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","title":{"rendered":"Teorija i praksa kori\u0161tenja HBase","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dobar dan! Zovem se Danil Lipovoy, na\u0161 tim u Sbertechu po\u010deo je koristiti HBase kao skladi\u0161te operativnih podataka. Tijekom njegovog istra\u017eivanja stekli smo iskustvo koje \u017eelimo sistematizirati i opisati (nadamo se da \u0107e mnogima biti korisno). Svi eksperimenta navedeni u nastavku provedeni su s verzijama HBase 1.2.0-cdh5.14.2 i 2.0.0-cdh6.0.0-beta1. <\/p>\n<ol>\n<li>Sveobuhvatna arhitektura <\/li>\n<li>Upis podataka u HBASE<\/li>\n<li>\u010citanje podataka iz HBASE<\/li>\n<li>Ke\u0161iranje podataka<\/li>\n<li>Batch obrada podataka MultiGet\/MultiPut<\/li>\n<li>Strategija dijeljenja tablica na regije (splitting)<\/li>\n<li>Otpornost na gre\u0161ke, kompaktiranje i lokalnost podataka<\/li>\n<li>Postavke i performanse<\/li>\n<li>Testiranje optere\u0107enja<\/li>\n<li>Zaklju\u010dci<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Sveobuhvatna arhitektura<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/30800d8a48de4c52ff1650a4f1dec4c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRezervni Master slu\u0161a heartbeat aktivnog na \u010dvoru ZooKeeper i u slu\u010daju nestanka preuzima funkcije mastera. <\/p>\n<h2>2. Upis podataka u HBASE<\/h2>\n<p>\nPrvo razmotrite najjednostavniji slu\u010daj \u2013 upis objekta klju\u010d-vrijednost u neku tablicu koriste\u0107i put(rowkey). Klijent prvo mora otkriti gdje se nalazi korijenski regijski poslu\u017eitelj (Root Region Server - RRS), koji pohranjuje tablicu hbase:meta. Te informacije dobiva od ZooKeepera. Nakon toga obra\u0107a se RRS-u i \u010dita tablicu hbase:meta, iz koje izdvaja informacije o tome koji RegionServer (RS) odgovara za pohranu podataka po zadanom klju\u010du rowkey u tablici koja ga zanima. U svrhu daljnje upotrebe, meta-tablica se ke\u0161ira od strane klijenta, stoga su sljede\u0107i zahtjevi br\u017ei, izravno prema RS-u.<\/p>\n<p>Nakon \u0161to RS primi zahtjev, prvo ga zapisuje u WriteAheadLog (WAL), \u0161to je potrebno za oporavak u slu\u010daju pada. Zatim pohranjuje podatke u MemStore. Ovo je predmemorija u memoriji koja sadr\u017ei sortirani set klju\u010deva za ovu regiju. Tablica mo\u017ee biti podijeljena na regije (particije), od kojih svaka sadr\u017ei nepoklapaju\u0107i set klju\u010deva. To omogu\u0107ava, raspore\u0111uju\u0107i regije na razli\u010ditim poslu\u017eiteljima, postizanje ve\u0107e performanse. Me\u0111utim, unato\u010d o\u010ditosti ove tvrdnje, vidjet \u0107emo da to ne funkcionira u svim slu\u010dajevima.<\/p>\n<p>Nakon \u0161to se zapis pohrani u MemStore, klijent dobiva odgovor da je zapis uspje\u0161no spremljen. Pri tome se stvarno pohranjuje samo u predmemoriji i bit \u0107e na disku tek nakon \u0161to pro\u0111e neki vremenski interval ili kada se napuni novim podacima. <\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/10f4d5d600a20882690f5cc81322bc41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPrilikom izvo\u0111enja operacije \u00abDelete\u00bb, fizi\u010dko brisanje podataka se ne doga\u0111a. Oni su samo ozna\u010deni kao obrisani, dok se samo uni\u0161tavanje doga\u0111a u trenutku pozivanja funkcije major compact, o kojoj je vi\u0161e napisano u to\u010dki 7.<\/p>\n<p>Datoteke u formatu HFile se sakupljaju u HDFS-u i s vremena na vrijeme pokre\u0107e se proces minor compact, koji jednostavno spaja male datoteke u ve\u0107e, ne bri\u0161u\u0107i ni\u0161ta. S vremenom to postaje problem koji se manifestira samo prilikom \u010ditanja podataka (o \u010demu \u0107emo se kasnije vratiti). <\/p>\n<p>Osim gornjeg opisanog procesa u\u010ditavanja, postoji mnogo u\u010dinkovitija procedura, koja je mo\u017eda najja\u010da strana ove baze podataka \u2013 BulkLoad. To podrazumijeva da sami formiramo HFiles i stavimo ih na disk, \u0161to omogu\u0107ava izvrsno skaliranje i postizanje vrlo dobrih brzina. U su\u0161tini, ograni\u010denje ovdje nije HBase, ve\u0107 mogu\u0107nosti hardvera. U nastavku su prikazani rezultati u\u010ditavanja na klasteru koji se sastoji od 16 RegionServera i 16 NodeManager YARN-a (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 niti), verzija HBase 1.2.0-cdh5.14.2. <\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/4e4452b216eda3269a364ea97c49120f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvdje se mo\u017ee vidjeti da pove\u0107anjem broja particija (regija) u tablici, kao i izvr\u0161itelja Sparka, dobivamo pove\u0107anje brzine u\u010ditavanja. Tako\u0111er, brzina ovisi o volumenu zapisa. Veliki blokovi daju pove\u0107anje u mjerenju MB\/s, dok manji pove\u0107avaju broj umetnutih zapisa u jedinici vremena, pri ostalim jednakim uvjetima. <\/p>\n<p>Tako\u0111er je mogu\u0107e pokrenuti u\u010ditavanje u dvije tablice istovremeno i dobiti udvostru\u010denje brzine. Ispod je vidljivo da zapisi blokova od 10 KB odjednom u dvije tablice idu brzinom od oko 600 Mb\/s u svaku (ukupno 1275 Mb\/s), \u0161to odgovara brzini zapisivanja u jednu tablicu od 623 MB\/s (vidi br. 11 iznad).<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/9f1b4fc0c80b797111494d400e9ce332.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMe\u0111utim, drugi poku\u0161aj s zapisima od 50 KB pokazuje da brzina u\u010ditavanja raste neznatno, \u0161to ukazuje na pribli\u017eavanje grani\u010dnim vrijednostima. Pri tome treba imati na umu da na sam HBASE ovdje prakti\u010dki nema optere\u0107enja, sve \u0161to se od njega zahtijeva je prvo predati podatke iz hbase:meta, a nakon umetanja HFiles, isprazniti podatke BlockCache i sa\u010duvati MemStore buffer na disk, ako nije prazan.<\/p>\n<h2>3. \u010citanje podataka iz HBASE<\/h2>\n<p>\nAko se uzme u obzir da klijent ve\u0107 ima sve informacije iz hbase:meta (pogledajte to\u010dku 2), upit ide odmah na taj RS gdje se nalazi odgovaraju\u0107i klju\u010d. Prvo se pretra\u017euje u MemCache. Bez obzira na to jesu li podaci prisutni ili ne, pretra\u017eivanje se tako\u0111er vr\u0161i u bufferu BlockCache i, po potrebi, u HFiles. Ako su podaci prona\u0111eni u datoteci, stavljaju se u BlockCache i pri sljede\u0107em upitu bit \u0107e vra\u0107eni br\u017ee. Pretra\u017eivanje u HFileu se odvija relativno brzo zahvaljuju\u0107i upotrebi Bloom filtera, tj. \u010ditanjem malog volumena podataka odmah se utvr\u0111uje sadr\u017ei li ta datoteka potrebni klju\u010d, a ako ne, prelazi se na sljede\u0107i.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/a21b1b825a84cfd02507ec334e9452fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNakon \u0161to prikupi podatke iz ova tri izvora, RS formira odgovor. Konkretno, mo\u017ee odmah poslati nekoliko prona\u0111enih verzija objekta ukoliko je klijent zatra\u017eio verzioniranje.<\/p>\n<h2>4. Ke\u0161iranje podataka<\/h2>\n<p>\nMemStore i BlockCache bufferi zauzimaju do 80% dodijeljene on-heap memorije RS-a (ostatak je rezerviran za servisne zadatke RS-a). Ako je tipi\u010dan na\u010din kori\u0161tenja takav da procesi najprije pi\u0161u, a zatim odmah \u010ditaju iste podatke, onda ima smisla smanjiti BlockCache i pove\u0107ati MemStore, jer kod pisanja podaci ne ulaze u ke\u0161 za \u010ditanje, pa \u0107e se kori\u0161tenje BlockCache-a dogoditi rje\u0111e. BlockCache buffer se sastoji od dva dijela: LruBlockCache (uvijek on-heap) i BucketCache (obi\u010dno off-heap ili na SSD-u). BucketCache treba koristiti kada ima puno upita za \u010ditanje i kada ne stanu u LruBlockCache, \u0161to dovodi do aktivnog rada Garbage Collector-a. Me\u0111utim, ne treba o\u010dekivati radikalan porast performansi pri kori\u0161tenju ke\u0161a za \u010ditanje, ali o tome \u0107emo se jo\u0161 osvrnuti u to\u010dki 8.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/17d7791a998dd7da747cb7089dce1f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBlockCache je jedan za cijeli RS, dok je MemStore svoj za svaku tablicu (po jedan za svaki Column Family).<\/p>\n<p>Kako <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudera.com\/blog\/2012\/06\/hbase-write-path\/\">je opisano<\/a><\/noindex> Teoretski, kod pisanja podaci ne ulaze u ke\u0161 i doista su takvi parametri CACHE_DATA_ON_WRITE za tablicu i 'Cache DATA on Write' za RS postavljeni na false. No, u praksi, ako se podaci zapisuju u MemStore, zatim se prebace na disk (tako ga o\u010diste), pa se dobivena datoteka ukloni, nakon \u010dega izvr\u0161avanje get upita uspje\u0161no vra\u0107a podatke. \u010cak i ako se potpuno isklju\u010di BlockCache i napuni tablica novim podacima, a zatim se postigne da se MemStore prebaci na disk, njihovim uklanjanjem i upitom iz druge sesije, oni \u0107e se i dalje negdje izvu\u0107i. Tako da HBase u sebi ne dr\u017ei samo podatke, ve\u0107 i tajanstvene zagonetke.<\/p>\n<pre><code class=\"bash\">hbase(main):001:0&gt; create 'ns:magic', 'cf'<br>Created table ns:magic<br>Took 1.1533 seconds<br>hbase(main):002:0&gt; put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'<br>Took 0.2610 seconds<br>hbase(main):003:0&gt; flush 'ns:magic'<br>Took 0.6161 seconds<br>hdfs dfs -mv \/data\/hbase\/data\/ns\/magic\/* \/tmp\/trash<br>hbase(main):002:0&gt; get 'ns:magic', 'key1'<br> cf:c      timestamp=1534440690218, value=try_to_delete_me\n<\/code><\/pre>\n<p>\nParametar \"Cache DATA on Read\" postavljen je na false. Ako imate ideje, slobodno ih podijelite u komentarima.<\/p>\n<h2>5. Obrada podataka MultiGet\/MultiPut<\/h2>\n<p>\nObrada pojedina\u010dnih zahtjeva (Get\/Put\/Delete) je prili\u010dno skupa operacija, stoga je po\u017eeljno grupirati ih u List ili List, \u0161to omogu\u0107ava zna\u010dajno pove\u0107anje performansi. To se posebno odnosi na operacije zapisivanja, dok pri \u010ditanju postoji sljede\u0107a zamka. Na grafikonu ispod prikazano je vrijeme \u010ditanja 50 000 zapisa iz MemStore-a. \u010citanje je obavljeno u jednom niti, a na horizontalnoj osi prikazani su broj klju\u010deva u zahtjevu. Ovdje se vidi da se s pove\u0107anjem na tisu\u0107u klju\u010deva u jednom zahtjevu vrijeme izvr\u0161enja smanjuje, tj. brzina se pove\u0107ava. Me\u0111utim, kada je zadani na\u010din MSLAB uklju\u010den, nakon ovog praga po\u010dinje radikalno opadanje performansi, a \u0161to je ve\u0107i volumen podataka u zapisu, to je du\u017ee vrijeme rada. <\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/42d3a77d66770a7fed03f83fecdca470.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestovi su provedeni na virtualnoj ma\u0161ini, 8 jezgri, verzija HBase 2.0.0-cdh6.0.0-beta1.<\/p>\n<p>Na\u010din MSLAB je osmi\u0161ljen da smanji fragmentaciju heap-a, koja nastaje zbog mije\u0161anja podataka novih i starih generacija. Kao rje\u0161enje problema, kada je MSLAB uklju\u010den, podaci se stavljaju u relativno male \u0107elije (chunk) i obra\u0111uju se u porcijama. Kao rezultat, kada volumen u zatra\u017eenom paketu podataka prema\u0161uje dodijeljenu veli\u010dinu, performanse drasti\u010dno padaju. S druge strane, isklju\u010divanje ovog na\u010dina tako\u0111er nije po\u017eeljno, jer \u0107e dovesti do zastoja zbog GC-a u trenucima intenzivnog rada s podacima. Dobar izlaz je pove\u0107anje volumena \u0107elije, u slu\u010daju aktivnog zapisivanja putem putanja zajedno s \u010ditanjem. Va\u017eno je napomenuti da problem ne nastaje ako nakon zapisivanja izvr\u0161ite naredbu flush koja prebacuje MemStore na disk ili ako se izvr\u0161ava u\u010ditavanje pomo\u0107u BulkLoad-a. U tablici ispod prikazano je da zahtjevi iz MemStore-a s ve\u0107im volumenom podataka (i istim brojem) dovode do usporavanja. Me\u0111utim, pove\u0107anjem chunksize-a vra\u0107amo vrijeme obrade u normalu.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/0076215bd171257548f8a4c4d4229ba0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOsim pove\u0107anja chunksizea, poma\u017ee i fragmentacija podataka po regijama, tj. splitanje tablica. To dovodi do toga da za svaku regiju dolazi manji broj zahtjeva, a ako se uklapaju u \u0107eliju, odgovor ostaje dobar.<\/p>\n<h2>6. Strategija dijeljenja tablica na regije (splitanje)<\/h2>\n<p>\nBudu\u0107i da je HBase skladi\u0161te klju\u010d-vrijednost i particioniranje se provodi prema klju\u010du, izuzetno je va\u017eno ravnomjerno razdijeliti podatke po svim regijama. Na primjer, particioniranje takve tablice na tri dijela dovest \u0107e do razdvajanja podataka u tri regije:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/a811ae81e77b48dbf28ed86dbdc35739.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPonekad to dovodi do naglog usporavanja, ako u\u010ditani podaci kasnije imaju oblik, na primjer, long vrijednosti ve\u0107inom po\u010dinju\u0107i istom brojkom, kao \u0161to su:<\/p>\n<p>1000001<br \/>\n1000002<br \/>\n\u2026<br \/>\n1100003<\/p>\n<p>Budu\u0107i da se klju\u010devi pohranjuju u obliku niza bajtova, svi \u0107e po\u010deti jednako i pripadati jednoj regiji #1 koja pohranjuje taj raspon klju\u010deva. Postoji nekoliko strategija dijeljenja:<\/p>\n<p>HexStringSplit \u2013 Pretvara klju\u010d u niz s heksadecimalnim kodiranjem u rasponu \u201e00000000\u201d =&gt; \u201eFFFFFFFF\u201d i puni lijevo nulama.<\/p>\n<p>UniformSplit \u2013 Pretvara klju\u010d u niz bajtova s heksadecimalnim kodiranjem u rasponu \u201e00\u201d =&gt; \u201eFF\u201d i puni desno nulama.<\/p>\n<p>Osim toga, mo\u017eete odrediti bilo koji raspon ili skup klju\u010deva za dijeljenje i postaviti automatsko splitanje. Me\u0111utim, jedan od najjednostavnijih i naju\u010dinkovitijih pristupa je UniformSplit i kori\u0161tenje konkatelacije hasha, na primjer, najstarijeg para bajtova kroz funkciju CRC32(rowkey) i samog rowkeya:<\/p>\n<p>hash + rowkey<\/p>\n<p>Tada \u0107e svi podaci biti ravnomjerno raspore\u0111eni po regijama. Pri \u010ditanju prva dva bajta jednostavno se odbacuju i ostaje izvorni klju\u010d. Tako\u0111er, RS kontrolira koli\u010dinu podataka i klju\u010deva u regiji i kada se prekora\u010de limiti, automatski ih dijeli na dijelove. <\/p>\n<h2>7. Otpornost na gre\u0161ke i lokalnost podataka<\/h2>\n<p>\nBudu\u0107i da svaki skup klju\u010deva pripada samo jednoj regiji, rje\u0161enje za probleme povezane s padovima RS-a ili isklju\u010divanjem je pohranjivanje svih potrebnih podataka u HDFS. Kada do\u0111e do pada RS-a, master to otkriva putem nedostatka heartbeat-a na \u010dvoru ZooKeeper. Tada imenuje novog RS-a za upravljanje regijom, a budu\u0107i da su HFiles pohranjeni u distribuiranom datote\u010dnom sustavu, novi vlasnik ih \u010dita i nastavlja upravljati podacima. Me\u0111utim, budu\u0107i da dio podataka mo\u017ee biti u MemStore-u i nije stigao u HFiles, za obnavljanje povijesti operacija koristi se WAL, koji se tako\u0111er pohranjuje u HDFS. Nakon primjene promjena, RS je sposoban odgovarati na zahtjeve, no premje\u0161taj dovodi do toga da dio podataka i procesi koji ih obra\u0111uju zavr\u0161avaju na razli\u010ditim \u010dvorovima, tj. smanjuje se lokalnost. <\/p>\n<p>Rje\u0161enje problema je major compaction \u2013 ova procedura premje\u0161ta datoteke na one \u010dvorove koji su odgovorni za njih (gdje se nalaze njihove regije), pri \u010demu u toku ove procedure naglo raste optere\u0107enje mre\u017ee i diskova. Me\u0111utim, kasnije je pristup podacima znatno br\u017ei. Osim toga, major_compaction spaja sve HFiles u jedan datoteku unutar regije, te tako\u0111er \u010disti podatke u skladu s postavkama tablice. Na primjer, mogu\u0107e je odrediti koliko verzija objekta treba zadr\u017eati ili vrijeme njegovog trajanja, nakon kojeg se objekt fizi\u010dki bri\u0161e.<\/p>\n<p>Ova procedura mo\u017ee imati vrlo pozitivan utjecaj na rad HBase-a. Na slici ispod vidljivo je kako je performansa degradirala zbog aktivnog zapisivanja podataka. Ovdje se vidi kako je 40 niti pisalo u jednu tablicu, dok je 40 niti istovremeno \u010ditalo podatke. Niti za pisanje stvaraju sve vi\u0161e i vi\u0161e HFiles, koje druge niti \u010ditaju. Kao rezultat, sve vi\u0161e podataka mora se ukloniti iz memorije i na kraju po\u010dinje raditi GC, koji prakti\u010dki paralizira cijeli rad. Pokretanje major compaction-a dovelo je do \u010di\u0161\u0107enja nastalih nagomilavanja i obnavljanja performansi.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/6c93b2c10c197663785d3de0bb185481.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTest je proveden na 3 DataNode-a i 4 RS-a (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 niti). Verzija HBase-a 1.2.0-cdh5.14.2<\/p>\n<p>Va\u017eno je napomenuti da je major compaction pokrenut na '\u017eivom' tabeli, u koju se aktivno upisivalo i o\u010ditavalo podatke. Na internetu se pojavila tvrdnja da to mo\u017ee dovesti do neto\u010dnih odgovora prilikom o\u010ditavanja podataka. Za provjeru, pokrenut je proces koji je generirao nove podatke i upisivao ih u tabelu, a zatim ih odmah o\u010ditavao i uspore\u0111ivao da li se dobivena vrijednost poklapa s onom koja je zapisana. Tokom rada ovog procesa major compaction je pokrenut oko 200 puta i nije zabilje\u017een nijedan kvar. Mogu\u0107e je da se problem pojavljuje samo rijetko i tokom velike optere\u0107enosti, stoga je ipak sigurnije planirano zaustavljanje procesa pisanja i o\u010ditavanja te izvo\u0111enje \u010di\u0161\u0107enja bez bogatih GC optere\u0107enja.<\/p>\n<p>Tako\u0111er, major compaction ne utje\u010de na stanje MemStore-a; za njegovo prebacivanje na disk i kompaktiranje potrebno je koristiti flush (connection.getAdmin().flush(TableName.valueOf(tblName))).<\/p>\n<h2>8. Postavke i performanse<\/h2>\n<p>\nKao \u0161to je ve\u0107 re\u010deno, HBase pokazuje najve\u0107i uspjeh kada nema drugih zadataka za obaviti tijekom izvo\u0111enja BulkLoad-a. Ipak, to se odnosi na ve\u0107inu sistema i ljudi. Me\u0111utim, ovaj alat vi\u0161e odgovara masovnom postavljanju podataka u velikim blokovima, dok se za procese koji zahtijevaju izvr\u0161enje brojnih konkurentnih o\u010ditavanja i pisanja koriste gore opisane komande Get i Put. Kako bi se odredile optimalne parametre, izvedena su pokretanja uz razli\u010dite kombinacije parametara tabela i postavki:<\/p>\n<ul>\n<li>Pokrenuto je 10 niti istovremeno 3 puta zaredom (nazovimo to blokom niti). <\/li>\n<li>Vrijeme trajanja svih niti unutar bloka se prosje\u010dilo i predstavljalo kona\u010dni rezultat rada bloka.<\/li>\n<li>Sve niti su radile s istom tabelom. <\/li>\n<li>Prije svakog pokretanja bloka niti izvr\u0161en je major compaction.<\/li>\n<li>Svaki blok je izvodio samo jednu od sljede\u0107ih operacija: <\/li>\n<\/ul>\n<p>\n \u2014 Put<br \/>\n \u2014 Get<br \/>\n \u2014 Get+Put<\/p>\n<ul>\n<li>Svaki blok je izveo 50.000 ponavljanja svoje operacije.<\/li>\n<li>Veli\u010dina zapisa u bloku bila je 100 bajtova, 1000 bajtova ili 10.000 bajtova (nasumi\u010dno).<\/li>\n<li>Blokovi su pokretani s razli\u010ditim brojem zatra\u017eenih klju\u010deva (ili jedan klju\u010d ili 10).<\/li>\n<li>Blokovi su pokretani uz razli\u010dite postavke tabele. Varirane su sljede\u0107e postavke:<\/li>\n<\/ul>\n<p>\n \u2014 BlockCache = uklju\u010den ili isklju\u010den<br \/>\n \u2014 BlockSize = 65 KB ili 16 KB<br \/>\n \u2014 Particije = 1, 5 ili 30<br \/>\n \u2014 MSLAB = uklju\u010den ili isklju\u010den<\/p>\n<p>Tako blok izgleda ovako:<\/p>\n<p>a. MSLAB re\u017eim je uklju\u010den\/isklju\u010den.<br \/>\nb. Napravila je tablica za koju su postavljeni sljede\u0107i parametri: BlockCache = true\/none, BlockSize = 65\/16 Kb, Particija = 1\/5\/30. <br \/>\nc. Postavljena je GZ kompresija.<br \/>\nd. Pokretano je 10 threadova koji istovremeno izvr\u0161avaju 1\/10 operacija put\/get\/get+put u ovoj tablici sa zapisima od 100\/1000\/10000 bajtova, izvr\u0161avaju\u0107i 50.000 upita jedan za drugim (klju\u010devi su nasumi\u010dni).<br \/>\ne. Stavka d ponovljena je tri puta.<br \/>\nf. Vrijeme rada svih threadova je prosje\u010deno. <\/p>\n<p>Provjerene su sve mogu\u0107e kombinacije. Predvidljivo je da \u0107e se prilikom pove\u0107anja veli\u010dine zapisa brzina smanjivati ili da \u0107e isklju\u010divanje ke\u0161iranja dovesti do usporavanja. Me\u0111utim, cilj je bio razumjeti stepen i zna\u010daj utjecaja svakog parametra, stoga su prikupljeni podaci uneseni u funkciju linearne regresije, \u0161to omogu\u0107ava procjenu pouzdanosti pomo\u0107u t-statistike. Ispod su prikazani rezultati rada blokova koji izvr\u0161avaju Put operacije. Potpuni skup kombinacija 2*2*3*2*3 = 144 opcije + 72 obzirom da su neki izvr\u0161eni dvaput. Tako da je ukupno 216 pokretanja:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/7a13c7a9b3ff1859976800f5d45cd51b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTestiranje je provedeno na mini-klasteru sastavljenom od 3 DataNode i 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 threadova). Verzija HBase 1.2.0-cdh5.14.2.<\/p>\n<p>Najvi\u0161a brzina umetanja od 3,7 sekundi ostvarena je s isklju\u010denim MSLAB na\u010dinom rada, na tablici s jednom particijom, uz uklju\u010den BlockCache, BlockSize = 16, sa zapisima od 100 bajtova po 10 u paketu.<br \/>\nNajni\u017ea brzina umetanja od 82,8 sekundi ostvarena je s uklju\u010denim MSLAB na\u010dinom rada, na tablici s jednom particijom, uz uklju\u010den BlockCache, BlockSize = 16, sa zapisima od 10000 bajtova po 1 komadu.<\/p>\n<p>Sada \u0107emo pogledati model. Vidimo dobru kvalitetu modela prema R2, ali je potpuno jasno da je ekstrapolacija ovdje neprihvatljiva. Stvarno pona\u0161anje sustava prilikom promjene parametara ne\u0107e biti linearno, ovaj model je potreban ne za prognoze, ve\u0107 za razumijevanje \u0161to se dogodilo unutar zadanih parametara. Na primjer, ovdje vidimo prema kriteriju Student, da za operaciju Put parametri BlockSize i BlockCache nemaju zna\u010daj (\u0161to je, u su\u0161tini, sasvim predvidljivo):<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/2fb65d1809d53f2b47f4f8829a9efc65.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTo \u0161to pove\u0107anje broja particija smanjuje performanse je prili\u010dno neo\u010dekivano (ve\u0107 smo videli pozitivan uticaj pove\u0107anja broja particija prilikom BulkLoad-a), ali i obja\u0161njivo. Prvo, za obradu je potrebno formirati upite za 30 regiona umesto jednog, a obim podataka nije toliko veliki da bi to donelo dobit. Drugo, ukupno vreme rada odre\u0111uje najsporiji RS, a s obzirom na to da je broj DataNode-a manji od broja RS, neki regioni imaju nultu lokalnost. Pogledajmo pet najboljih:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/8ad7e832879156eaa96e630458405cdc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSada procenimo rezultate izvr\u0161avanja blokova Get:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/8a5dd45422c74e8815011d7e9b805ccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBroj particija je izgubio zna\u010daj, \u0161to verovatno obja\u0161njava to \u0161to se podaci dobro ke\u0161iraju, a ke\u0161 za \u010ditanje je jedan od najva\u017enijih (statisti\u010dki) parametara. Naravno, pove\u0107anje broja poruka u upitu tako\u0111e je veoma korisno za performanse. Najbolji rezultati:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/9d237f9fdbeaf5412daec2fc2fa24b01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI na kraju pogledajmo model bloka koji je prvo izvr\u0161io get, a zatim put:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/75137207a4a69acccad036882794094b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOvde su svi parametri zna\u010dajni. I rezultati lidera:<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/c166933d81e86f36958e3af58297f876.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>9. Optere\u0107uju\u0107e testiranje<\/h2>\n<p>\nNa kraju \u0107emo pokrenuti prili\u010dno pristojno optere\u0107enje, ali uvek je zanimljivije kada imamo s \u010dim da uporedimo. Na sajtu DataStax \u2013 klju\u010dnog developera Cassandre, postoji <noindex><a rel=\"nofollow\" href=\"https:\/\/www.datastax.com\/wp-content\/themes\/datastax-2014-08\/files\/NoSQL_Benchmarks_EndPoint.pdf\">rezultate<\/a><\/noindex> NT raznih NoSQL skladi\u0161ta, uklju\u010duju\u0107i HBase verziju 0.98.6-1. U\u010ditavanje je sprovedeno sa 40 niti, veli\u010dina podataka je 100 bajtova, SSD diskovi. Rezultat testiranja operacija Read-Modify-Write dao je ovakve rezultate.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/521e9dff60f462e6dabebc1234e028be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Kako sam razumeo, \u010ditanje je vr\u0161eno u blokovima od 100 zapisa i za 16 nodova HBase test DataStax je pokazao performanse od 10.000 operacija u sekundi. <\/p>\n<p>Sre\u0107om, u na\u0161em klasteru tako\u0111er ima 16 nodova, ali nije ba\u0161 \"sre\u0107no\" \u0161to svaki ima 64 jezgra (tokova), dok je u DataStax testu bilo po 4. S druge strane, oni imaju SSD diskove, a mi HDD i noviju verziju HBase, a iskori\u0161tenost CPU tijekom optere\u0107enja nije se zna\u010dajno pove\u0107avala (vizualno za 5-10 posto). Ipak, poku\u0161a\u0107emo pokrenuti s ovom konfiguracijom. Postavke tablica su zadane, \u010ditanje se vr\u0161i u rasponu klju\u010deva od 0 do 50 milijuna nasumi\u010dno (tj. svaki put novi). U tablici je 50 milijuna zapisa, raspr\u0161eno na 64 particije. Klju\u010devi su hashirani pomo\u0107u crc32. Zadane postavke tablica, MSLAB je uklju\u010den. Pokre\u0107emo 40 tokova, svaki tok \u010dita skup od 100 nasumi\u010dnih klju\u010deva i odmah zapisuje generiranih 100 bajtova na te klju\u010deve. <\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/776490f01121cc434135f733311b7722.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Stabilna konfiguracija: 16 DataNode i 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 toka). Verzija HBase 1.2.0-cdh5.14.2.<\/p>\n<p>Prosje\u010dni rezultat bli\u017ei je 40 tisu\u0107a operacija u sekundi, \u0161to je zna\u010dajno bolje nego u DataStax testu. Me\u0111utim, u svrhu eksperimenta mo\u017eemo malo promijeniti uvjete. Veoma je malo vjerojatno da \u0107e se sav rad odvijati isklju\u010divo s jednom tablicom, kao i samo s jedinstvenim klju\u010devima. Pretpostavimo da postoji neki \"vru\u0107i\" skup klju\u010deva koji generira glavno optere\u0107enje. Stoga \u0107emo poku\u0161ati stvoriti optere\u0107enje s ve\u0107im zapisima (10 KB), tako\u0111er u paketima od 100, u 4 razli\u010dite tablice, ograni\u010davaju\u0107i raspon tra\u017eenih klju\u010deva na 50 tisu\u0107a. Na grafikonu ispod prikazan je pokretanje 40 tokova, svaki tok \u010dita skup od 100 klju\u010deva i odmah zapisuje nasumi\u010dnih 10 KB na te klju\u010deve nazad. <\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/30d29f1b98663e3c07cb2be20e93876a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStabilna konfiguracija: 16 DataNode i 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 toka). Verzija HBase 1.2.0-cdh5.14.2.<\/p>\n<p>Tijekom optere\u0107enja nekoliko puta pokrenut je major compaction, kao \u0161to je prikazano iznad bez ovog postupka performanse \u0107e postupno degradirati, me\u0111utim tijekom izvr\u0161enja tako\u0111er nastaje dodatno optere\u0107enje. Padovi su uzrokovani razli\u010ditim razlozima. Ponekad su tokovi zavr\u0161avali rad, a dok su se ponovno pokretali nastala je pauza, ponekad su vanjske aplikacije stvarale optere\u0107enje na klaster.<\/p>\n<p>\u010citanje i odmah pisanje jedan je od najte\u017eih scenarija rada za HBase. Ako se rade samo put zahtjevi manjeg obima, na primjer, od 100 bajta, grupiranjem u pakete od 10-50 tisu\u0107a, mogu\u0107e je posti\u0107i stotine tisu\u0107a operacija u sekundi, a sli\u010dno je i s zahtjevima koji se koriste samo za \u010ditanje. Valja napomenuti da su rezultati radikalno bolji od onih koje je dobio DataStax, prvo zahvaljuju\u0107i zahtjevima u blokovima od 50 tisu\u0107a.<\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161tenja HBase\" src=\"\/wp-content\/uploads\/2020\/01\/412bda50a55093224169f048ea2f863a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStabilna konfiguracija: 16 DataNode i 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 toka). Verzija HBase 1.2.0-cdh5.14.2.<\/p>\n<h2>10. Zaklju\u010dci<\/h2>\n<p>\nOvaj sustav vrlo je fleksibilan za pode\u0161avanje, me\u0111utim, utjecaj velikog broja parametara jo\u0161 uvijek ostaje nepoznat. Dio njih je testiran, ali nije u\u0161ao u rezultantni skup testova. Na primjer, preliminarni eksperimenti pokazali su neznatnu zna\u010dajnost parametra kao \u0161to je DATA_BLOCK_ENCODING, koji kodira informacije koriste\u0107i vrijednosti iz susjednih \u0107elija, \u0161to je sasvim razumljivo za podatke generirane nasumi\u010dno. U slu\u010daju upotrebe velikog broja ponavljaju\u0107ih objekata, dobitak mo\u017ee biti zna\u010dajan. Op\u0107enito, mo\u017ee se re\u0107i da HBase ostavlja dojam dovoljno ozbiljne i promi\u0161ljene baze podataka koja mo\u017ee biti dovoljno u\u010dinkovita prilikom operacija s velikim blokovima podataka. Osobito ako postoji mogu\u0107nost ka\u0161njenja izme\u0111u procesa \u010ditanja i pisanja.<\/p>\n<p>Ako ne\u0161to po va\u0161em mi\u0161ljenju nije dovoljno obra\u0111eno, rado \u0107u re\u0107i vi\u0161e. Predla\u017eemo da podijelite svoje iskustvo ili da raspravljate ako se s ne\u010dim ne sla\u017eete.<br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Teorija i praksa kori\u0161tenja HBase | ProHoster","description":"Dobar dan! Zovem se Danil Lipovoy, na\u0161 tim u Sbertehu po\u010deo je koristiti HBase kao skladi\u0161te operativnih podataka.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/55302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=55302"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/55302\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=55302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=55302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=55302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}