{"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\/sv\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","title":{"rendered":"Teori och praktik f\u00f6r anv\u00e4ndning av HBase","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej! Jag heter Danil Lipovoy, och v\u00e5rt team p\u00e5 Sbertech har b\u00f6rjat anv\u00e4nda HBase som ett datalagringssystem. Under studiet av detta har vi samlat erfarenhet som vi ville systematisera och beskriva (vi hoppas att det blir till nytta f\u00f6r m\u00e5nga). Alla experiment som beskrivs nedan utf\u00f6rdes med versionerna HBase 1.2.0-cdh5.14.2 och 2.0.0-cdh6.0.0-beta1. <\/p>\n<ol>\n<li>\u00d6vergripande arkitektur <\/li>\n<li>Skriva data till HBASE<\/li>\n<li>L\u00e4sa data fr\u00e5n HBASE<\/li>\n<li>Cachning av data<\/li>\n<li>Batchbehandling av data MultiGet\/MultiPut<\/li>\n<li>Strategi f\u00f6r uppdelning av tabeller i regioner (splitting)<\/li>\n<li>T\u00e5lighet, komprimering och lokalitet av data<\/li>\n<li>Inst\u00e4llningar och prestanda<\/li>\n<li>Belastningstestning<\/li>\n<li>Slutsatser<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. \u00d6vergripande arkitektur<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/30800d8a48de4c52ff1650a4f1dec4c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn reserv Master \u00f6vervakar heartbeat fr\u00e5n den aktiva p\u00e5 noden ZooKeeper och tar \u00f6ver masterfunktionen i h\u00e4ndelse av att den avaktiveras. <\/p>\n<h2>2. Skriva data till HBASE<\/h2>\n<p>\nF\u00f6rst tittar vi p\u00e5 det enklaste fallet \u2013 att skriva ett nyckel-v\u00e4rde-objekt till en viss tabell med hj\u00e4lp av put(rowkey). Klienten m\u00e5ste f\u00f6rst ta reda p\u00e5 var den rotregioner servern (Root Region Server \u2013 RRS) ligger, som lagrar tabellen hbase:meta. Denna information f\u00e5r den fr\u00e5n ZooKeeper. D\u00e4refter kontaktar den RRS och l\u00e4ser tabellen hbase:meta, fr\u00e5n vilken den h\u00e4mtar information om vilken RegionServer (RS) som ansvarar f\u00f6r att lagra data f\u00f6r den angivna nyckeln rowkey i den tabell som intresserar den. F\u00f6r framtida anv\u00e4ndning cachar klienten metatabellen, och d\u00e4rf\u00f6r g\u00e5r de efterf\u00f6ljande f\u00f6rfr\u00e5gningarna snabbare, direkt till RS.<\/p>\n<p>D\u00e4refter skriver RS, efter att ha mottagit f\u00f6rfr\u00e5gan, f\u00f6rst in den i WriteAheadLog (WAL), vilket \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r \u00e5terst\u00e4llning vid ett systemhaveri. Sedan sparas data i MemStore. Detta \u00e4r en minnesbuffer som inneh\u00e5ller en sorterad upps\u00e4ttning nycklar f\u00f6r denna region. Tabellen kan delas upp i regioner (partitioner), som var och en inneh\u00e5ller en icke-\u00f6verliggande upps\u00e4ttning nycklar. Detta till\u00e5ter, genom att placera regionerna p\u00e5 olika servrar, att uppn\u00e5 h\u00f6gre prestanda. Men trots att denna slutsats \u00e4r uppenbar, kommer vi att se att det inte alltid fungerar p\u00e5 detta s\u00e4tt.<\/p>\n<p>Efter att posten har lagts i MemStore f\u00e5r klienten en bekr\u00e4ftelse p\u00e5 att posten har sparats framg\u00e5ngsrikt. Den sparas dock egentligen bara i bufferten och kommer att \u00f6verf\u00f6ras till disken f\u00f6rst efter att en viss tidsperiod har passerat eller n\u00e4r den har fyllts med nya data. <\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/10f4d5d600a20882690f5cc81322bc41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVid utf\u00f6randet av operationen \"Delete\" sker ingen fysisk radering av data. De markeras helt enkelt som raderade, och sj\u00e4lva f\u00f6rst\u00f6relsen sker vid anrop av funktionen major compact, som beskrivs mer detaljerat i punkt 7.<\/p>\n<p>Filer i HFile-format samlas i HDFS och med j\u00e4mna mellanrum k\u00f6rs processen minor compact, som helt enkelt sammanfogar sm\u00e5 filer till st\u00f6rre utan att radera n\u00e5got. Med tiden blir detta ett problem som endast visar sig vid l\u00e4sning av data (detta kommer vi att \u00e5terkomma till senare). <\/p>\n<p>F\u00f6rutom den beskrivna uppladdningsprocessen finns det en mycket effektivare procedur, som utg\u00f6r kanske den starkaste sidan av denna databas \u2013 BulkLoad. Det handlar om att vi sj\u00e4lva skapar HFiles och l\u00e4gger in dem p\u00e5 disken, vilket till\u00e5ter utm\u00e4rkt skalning och uppn\u00e5else av ganska anst\u00e4ndiga hastigheter. I princip \u00e4r det inte HBase som s\u00e4tter gr\u00e4nser h\u00e4r, utan h\u00e5rdvarans kapabiliteter. Nedan visas resultaten av uppladdningen p\u00e5 en kluster best\u00e5ende av 16 RegionServers och 16 NodeManager YARN (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar), version HBase 1.2.0-cdh5.14.2. <\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/4e4452b216eda3269a364ea97c49120f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nH\u00e4r kan vi se att genom att \u00f6ka antalet partitioner (regioner) i tabellen samt Spark-exekverare f\u00e5r vi en \u00f6kning av uppladdningshastigheten. Hastigheten beror ocks\u00e5 p\u00e5 skrivvolymen. Stora block ger en \u00f6kning i m\u00e5tt av MB\/s, medan sm\u00e5 block \u00f6kar antalet inskrivna poster per tidsenhet, vid \u00f6vriga lika f\u00f6rh\u00e5llanden. <\/p>\n<p>Det \u00e4r ocks\u00e5 m\u00f6jligt att starta uppladdning i tv\u00e5 tabeller samtidigt och f\u00e5 en dubblering av hastigheten. Nedan kan vi se att skrivningen av 10 KB block direkt i tv\u00e5 tabeller g\u00e5r med en hastighet p\u00e5 cirka 600 Mb\/s i varje (totalt 1275 Mb\/s), vilket st\u00e4mmer \u00f6verens med skrivhastigheten i en tabell p\u00e5 623 MB\/s (se punkt \u211611 ovan).<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/9f1b4fc0c80b797111494d400e9ce332.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDen andra k\u00f6rningen med 50 KB-inspelningar visar att uppladdningshastigheten \u00f6kar endast i begr\u00e4nsad utstr\u00e4ckning, vilket indikerar att vi n\u00e4rmar oss de maximala v\u00e4rdena. H\u00e4rvid b\u00f6r man ha i \u00e5tanke att HBASE i princip inte belastas alls, allt som kr\u00e4vs fr\u00e5n den \u00e4r att f\u00f6rst returnera data fr\u00e5n hbase:meta, och efter inlagan av HFiles, t\u00f6mma BlockCache och spara MemStore-bufferten p\u00e5 disken, om den inte \u00e4r tom.<\/p>\n<h2>3. L\u00e4sa data fr\u00e5n HBASE<\/h2>\n<p>\nOm vi antar att all information fr\u00e5n hbase:meta redan finns hos kunden (se p.2), g\u00e5r f\u00f6rfr\u00e5gan direkt till den RS d\u00e4r den \u00f6nskade nyckeln lagras. F\u00f6rst sker s\u00f6kningen i MemCache. Oavsett om det finns data d\u00e4r eller inte, sker s\u00f6kningen ocks\u00e5 i BlockCache och vid behov i HFiles. Om data hittas i filen placeras de i BlockCache och kommer att returneras snabbare vid n\u00e4sta f\u00f6rfr\u00e5gan. S\u00f6kningen i HFile sker relativt snabbt tack vare anv\u00e4ndningen av en Bloom-filter, det vill s\u00e4ga genom att l\u00e4sa en liten m\u00e4ngd data kan det direkt avg\u00f6ra om denna fil inneh\u00e5ller den \u00f6nskade nyckeln, och om inte, g\u00e5r det vidare till n\u00e4sta.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/a21b1b825a84cfd02507ec334e9452fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00e4r data har erh\u00e5llits fr\u00e5n dessa tre k\u00e4llor bildar RS svaret. I synnerhet kan det skicka flera hittade versioner av objektet om kunden har beg\u00e4rt versionering.<\/p>\n<h2>4. Cachning av data<\/h2>\n<p>\nBuffrarna MemStore och BlockCache tar upp till 80% av den tilldelade on-heap-minnet p\u00e5 RS (resten \u00e4r reserverat f\u00f6r tj\u00e4nsteuppgifter i RS). Om den typiska anv\u00e4ndningen \u00e4r s\u00e5dan att processer skriver och omedelbart l\u00e4ser dessa samma data, \u00e4r det meningsfullt att minska BlockCache och \u00f6ka MemStore, eftersom data vid skrivning inte g\u00e5r in i l\u00e4scachen, vilket g\u00f6r att anv\u00e4ndningen av BlockCache blir mindre frekvent. BlockCache-bufferten best\u00e5r av tv\u00e5 delar: LruBlockCache (alltid on-heap) och BucketCache (vanligtvis off-heap eller p\u00e5 SSD). BucketCache b\u00f6r anv\u00e4ndas n\u00e4r det finns m\u00e5nga l\u00e4sningsf\u00f6rfr\u00e5gningar som inte f\u00e5r plats i LruBlockCache, vilket leder till aktivt arbete av Garbage Collector. Vid detta tillf\u00e4lle b\u00f6r man inte f\u00f6rv\u00e4nta sig en radikal \u00f6kning av prestanda fr\u00e5n anv\u00e4ndningen av l\u00e4s-cache, men vi \u00e5terkommer till detta i p. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/17d7791a998dd7da747cb7089dce1f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBlockCache \u00e4r gemensam f\u00f6r hela RS, medan MemStore \u00e4r specifik f\u00f6r varje tabell (en f\u00f6r varje Column Family).<\/p>\n<p>Hur <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudera.com\/blog\/2012\/06\/hbase-write-path\/\">beskrivet<\/a><\/noindex> I teorin g\u00e5r data inte in i cachen vid skrivning och faktiskt \u00e4r s\u00e5dana parametrar CACHE_DATA_ON_WRITE f\u00f6r tabellen och 'Cache DATA on Write' f\u00f6r RS inst\u00e4llda p\u00e5 false. Men i praktiken, om man skriver data till MemStore, sedan spolar det till disk (\u00e5terst\u00e4ller d\u00e4rmed), f\u00f6r att sedan ta bort den resulterande filen, kommer en get-f\u00f6rfr\u00e5gan framg\u00e5ngsrikt att returnera data. Dessutom, \u00e4ven om BlockCache helt st\u00e4ngs av och tabellen fylls med nya data, f\u00f6r att sedan uppn\u00e5 en spoling av MemStore till disk, radera dem och be om dem fr\u00e5n en annan session, kommer de \u00e4nd\u00e5 att h\u00e4mtas fr\u00e5n n\u00e5gonstans. S\u00e5 HBase lagrar inte bara data utan \u00e4ven mystiska mysterier.<\/p>\n<pre><code class=\"bash\">hbase(main):001:0&gt; create 'ns:magic', 'cf'\nSkapade tabell ns:magic\nTog 1.1533 sekunder\nhbase(main):002:0&gt; put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'\nTog 0.2610 sekunder\nhbase(main):003:0&gt; flush 'ns:magic'\nTog 0.6161 sekunder\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>\nParametern \"Cache DATA on Read\" \u00e4r inst\u00e4lld p\u00e5 false. Om det finns id\u00e9er, v\u00e4lkomna att diskutera detta i kommentarerna.<\/p>\n<h2>5. Batchbearbetning av data MultiGet\/MultiPut<\/h2>\n<p>\nBearbetning av enskilda f\u00f6rfr\u00e5gningar (Get\/Put\/Delete) \u00e4r en ganska kostsam operation, s\u00e5 det \u00e4r b\u00e4st att gruppera dem i List eller List, vilket ger en betydande prestanda\u00f6kning. Detta g\u00e4ller s\u00e4rskilt f\u00f6r skrivoperationer, men vid l\u00e4sning finns f\u00f6ljande fallgropp. I diagrammet nedan visas tiden f\u00f6r att l\u00e4sa 50 000 poster fr\u00e5n MemStore. L\u00e4sningen utf\u00f6rdes i en tr\u00e5d och p\u00e5 den horisontella axeln visas antalet nycklar i f\u00f6rfr\u00e5gan. H\u00e4r kan vi se att n\u00e4r antalet nycklar i en f\u00f6rfr\u00e5gan \u00f6kar till tusen, minskar exekveringstiden, det vill s\u00e4ga hastigheten \u00f6kar. Men med standardl\u00e4get f\u00f6r MSLAB b\u00f6rjar prestandan falla kraftigt efter denna tr\u00f6skel, och ju st\u00f6rre datam\u00e4ngden i posten \u00e4r, desto mer \u00f6kar arbetstiden. <\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/42d3a77d66770a7fed03f83fecdca470.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTester utf\u00f6rdes p\u00e5 en virtuell maskin med 8 k\u00e4rnor, version HBase 2.0.0-cdh6.0.0-beta1.<\/p>\n<p>MSLAB-l\u00e4get syftar till att minska fragmenteringen av heap, vilket uppst\u00e5r genom blandning av nya och gamla generationers data. F\u00f6r att l\u00f6sa problemet, n\u00e4r MSLAB \u00e4r aktiverat, placeras data i relativt sm\u00e5 celler (chunk) och bearbetas i portioner. Som ett resultat, n\u00e4r volymen i den beg\u00e4rda datapaketet \u00f6verskrider den tilldelade storleken, minskar prestandan kraftigt. \u00c5 andra sidan \u00e4r det inte \u00f6nskv\u00e4rt att st\u00e4nga av detta l\u00e4ge, eftersom det kan leda till stopp p\u00e5 grund av GC vid intensiva databehandlingsmoment. En bra l\u00f6sning \u00e4r att \u00f6ka storleken p\u00e5 cellerna vid aktiv skrivning med put samtidigt som man l\u00e4ser. Det b\u00f6r noteras att problemet inte uppst\u00e5r om man efter skrivningen utf\u00f6r flush-kommandot som \u00f6verf\u00f6r MemStore till disken eller om data laddas med hj\u00e4lp av BulkLoad. I tabellen nedan visas att f\u00f6rfr\u00e5gningar fr\u00e5n MemStore med st\u00f6rre datam\u00e4ngder (och samma antal) leder till f\u00f6rdr\u00f6jningar. Men genom att \u00f6ka chunksize \u00e5terf\u00e5r vi bearbetningstiden till det normala.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/0076215bd171257548f8a4c4d4229ba0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nF\u00f6rutom att \u00f6ka chunksize \u00e4r det ocks\u00e5 effektivt att dela upp data efter regioner, det vill s\u00e4ga tabellsplittring. Detta inneb\u00e4r att varje region f\u00e5r f\u00e4rre f\u00f6rfr\u00e5gningar och om de placeras i en cell, f\u00f6rblir svarstiden bra.<\/p>\n<h2>6. Strategi f\u00f6r att dela upp tabeller i regioner (splittring)<\/h2>\n<p>\nEftersom HBase \u00e4r en nyckel-v\u00e4rde lagringsl\u00f6sning och partitioneringen sker baserat p\u00e5 nyckel, \u00e4r det mycket viktigt att f\u00f6rdela data j\u00e4mnt \u00f6ver alla regioner. Till exempel kommer partitionering av en s\u00e5dan tabell i tre delar att resultera i att data delas upp i tre regioner:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/a811ae81e77b48dbf28ed86dbdc35739.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet h\u00e4nder att detta leder till en kraftig nedgradering, om den data som laddas in senare mestadels best\u00e5r av long-v\u00e4rden som b\u00f6rjar med samma siffra, till exempel:<\/p>\n<p>1000001<br \/>\n1000002<br \/>\n\u2026<br \/>\n1100003<\/p>\n<p>Eftersom nycklarna lagras i form av byte-arrayer, kommer alla att b\u00f6rja likadant och tillh\u00f6ra en region #1 som lagrar detta nyckelintervall. Det finns flera strategier f\u00f6r splittring:<\/p>\n<p>HexStringSplit \u2013 Konverterar nyckeln till en str\u00e4ng med hexadecimalt kodande inom intervallet \u00ab00000000\u00bb =&gt; \u00abFFFFFFFF\u00bb och fyller v\u00e4nster med nollor.<\/p>\n<p>UniformSplit \u2013 Konverterar nyckeln till en byte-array med hexadecimalt kodande inom intervallet \u00ab00\u00bb =&gt; \u00abFF\u00bb och fyller h\u00f6ger med nollor.<\/p>\n<p>Dessutom kan man ange vilket intervall eller upps\u00e4ttning av nycklar som helst f\u00f6r splittring och konfigurera automatisk splittring. Men en av de enklaste och mest effektiva metoderna \u00e4r UniformSplit och att anv\u00e4nda hash-konkatenation, till exempel den h\u00f6gsta byte-paret fr\u00e5n k\u00f6rningen av nyckeln genom CRC32(rowkey) funktionen och sj\u00e4lva rowkey:<\/p>\n<p>hash + rowkey<\/p>\n<p>D\u00e5 kommer alla data att f\u00f6rdelas j\u00e4mnt \u00f6ver regionerna. Vid l\u00e4sning kastas de f\u00f6rsta tv\u00e5 bytesen helt enkelt bort och den ursprungliga nyckeln kvarst\u00e5r. RS kontrollerar \u00e4ven m\u00e4ngden data och nycklar i regionen och bryter automatiskt upp den i delar n\u00e4r gr\u00e4nserna \u00f6verskrids. <\/p>\n<h2>7. Felresiliens och datalokalisering<\/h2>\n<p>\nEftersom varje nyckelset bara ansvarar f\u00f6r en region \u00e4r l\u00f6sningen p\u00e5 problem relaterade till RS-nederlag eller nedl\u00e4ggning att lagra all n\u00f6dv\u00e4ndig data i HDFS. Vid ett RS-nederlag uppt\u00e4cker master detta genom att inte f\u00e5 n\u00e5gon heartbeat fr\u00e5n ZooKeeper-noden. D\u00e5 tilldelar den en annan RS den drabbade regionen, och eftersom HFiles lagras i ett distribuerat filsystem, s\u00e5 l\u00e4ser den nya \u00e4garen dem och forts\u00e4tter att betj\u00e4na data. Emellertid, eftersom en del data kan vara i MemStore och \u00e4nnu inte har kommit in i HFiles, anv\u00e4nds WAL f\u00f6r att \u00e5terst\u00e4lla operationernas historik, som ocks\u00e5 lagras i HDFS. Efter att f\u00f6r\u00e4ndringar har genomf\u00f6rts kan RS svara p\u00e5 f\u00f6rfr\u00e5gningar, men flyttningen inneb\u00e4r att en del data och processer som hanterar dem hamnar p\u00e5 olika noder, vilket reducerar lokalitet. <\/p>\n<p>L\u00f6sningen p\u00e5 problemet \u00e4r major compaction \u2013 denna procedur flyttar filer till de noder som ansvarar f\u00f6r dem (dit d\u00e4r deras regioner ligger), vilket resulterar i att belastningen p\u00e5 n\u00e4tverket och diskarna \u00f6kar kraftigt under denna procedur. Men senare f\u00f6rb\u00e4ttras \u00e5tkomsten till data markant. Dessutom utf\u00f6r major_compaction en sammanslagning av alla HFiles till en enda fil inom regionen och rensar data beroende p\u00e5 tabellinst\u00e4llningarna. Till exempel kan du st\u00e4lla in antalet versioner av ett objekt som ska sparas eller dess livsl\u00e4ngd, efter vilken objektet tas bort fysiskt.<\/p>\n<p>Denna procedur kan ha en mycket positiv effekt p\u00e5 HBase:s prestanda. P\u00e5 bilden nedan kan man se hur prestandan f\u00f6rs\u00e4mrades till f\u00f6ljd av aktiv dataskrivning. H\u00e4r syns hur 40 tr\u00e5dar skrev till en tabell och 40 tr\u00e5dar l\u00e4ste data samtidigt. Skrivraven genererar fler och fler HFiles som l\u00e4ses av andra tr\u00e5dar. Som resultat m\u00e5ste allt fler data tas bort fr\u00e5n minnet och till slut startar GC, som i stort sett lamnar hela arbetet. Starten av major compaction ledde till rensning av de uppkomna avlagringarna och \u00e5terst\u00e4llande av prestandan.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/6c93b2c10c197663785d3de0bb185481.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTestet utf\u00f6rdes p\u00e5 3 DataNode och 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar). HBase version 1.2.0-cdh5.14.2<\/p>\n<p>Det \u00e4r v\u00e4rt att notera att major compaction k\u00f6rdes p\u00e5 en \"levande\" tabell d\u00e4r data aktivt skrivits och l\u00e4sts. Det har p\u00e5st\u00e5tts p\u00e5 n\u00e4tet att detta kan leda till felaktiga svar vid l\u00e4sning av data. F\u00f6r att verifiera detta startades en process som genererade nya data och skrev dem till tabellen. D\u00e4refter l\u00e4stes dessa data omedelbart och j\u00e4mf\u00f6rdes med det som hade skrivits. Under denna process k\u00f6rdes major compaction cirka 200 g\u00e5nger och inga fel registrerades. Problemet kan eventuellt upptr\u00e4da s\u00e4llan och endast vid h\u00f6g belastning, d\u00e4rf\u00f6r \u00e4r det mer s\u00e4kert att planera stopp av skriv- och l\u00e4sprocesser och utf\u00f6ra rensning f\u00f6r att undvika s\u00e5dana GC-fall.<\/p>\n<p>Dessutom p\u00e5verkar major compaction inte tillst\u00e5ndet f\u00f6r MemStore; f\u00f6r att spola dess inneh\u00e5ll till disk och kompaktera m\u00e5ste flush anv\u00e4ndas (connection.getAdmin().flush(TableName.valueOf(tblName))).<\/p>\n<h2>8. Inst\u00e4llningar och prestanda<\/h2>\n<p>\nSom redan n\u00e4mnts visar HBase st\u00f6rst framg\u00e5ng d\u00e4r det inte beh\u00f6ver utf\u00f6ra n\u00e5gra \u00e5tg\u00e4rder, vid anv\u00e4ndning av BulkLoad. Detta g\u00e4ller dock de flesta system och m\u00e4nniskor. Men detta verktyg \u00e4r mer l\u00e4mpligt f\u00f6r massins\u00e4ttning av data i stora block, medan om processen kr\u00e4ver utf\u00f6rande av m\u00e5nga konkurrerande l\u00e4sa- och skrivf\u00f6rfr\u00e5gningar anv\u00e4nds de ovan beskrivna kommandona Get och Put. F\u00f6r att fastst\u00e4lla optimala parametrar genomf\u00f6rdes k\u00f6rningar med olika kombinationer av tabellparametrar och inst\u00e4llningar:<\/p>\n<ul>\n<li>10 tr\u00e5dar k\u00f6rdes samtidigt tre g\u00e5nger i rad (l\u00e5t oss kalla detta en tr\u00e5dblock). <\/li>\n<li>K\u00f6rtiden f\u00f6r alla tr\u00e5dar i blocket genomsnittades och var det slutgiltiga resultatet av blockets arbete.<\/li>\n<li>Alla tr\u00e5dar arbetade med samma tabell. <\/li>\n<li>Innan varje k\u00f6rning av tr\u00e5dblock utf\u00f6rdes en major compaction.<\/li>\n<li>Varje block utf\u00f6rde endast en av f\u00f6ljande operationer: <\/li>\n<\/ul>\n<p>\n \u2014 Put<br \/>\n \u2014 Get<br \/>\n \u2014 Get+Put<\/p>\n<ul>\n<li>Varje block utf\u00f6rde 50 000 upprepningar av sin operation.<\/li>\n<li>Storleken p\u00e5 en post i blocket var 100 byte, 1000 byte eller 10000 byte (slumptal).<\/li>\n<li>Blocken k\u00f6rdes med varierande antal beg\u00e4rda nycklar (antingen en nyckel eller 10).<\/li>\n<li>Blocken k\u00f6rdes med olika tabellinst\u00e4llningar. F\u00f6ljande parametrar \u00e4ndrades:<\/li>\n<\/ul>\n<p>\n \u2014 BlockCache = aktiverad eller inaktiverad<br \/>\n \u2014 BlockSize = 65 KB eller 16 KB<br \/>\n \u2014 Partitioner = 1, 5 eller 30<br \/>\n \u2014 MSLAB = aktiverad eller inaktiverad<\/p>\n<p>S\u00e5 h\u00e4r ser blocket ut:<\/p>\n<p>a. MSLAB-l\u00e4ge aktiverades\/avaktiverades.<br \/>\nb. En tabell skapades d\u00e4r f\u00f6ljande parametrar st\u00e4lldes in: BlockCache = true\/none, BlockSize = 65\/16 Kb, Partitioner = 1\/5\/30. <br \/>\nc. GZ-komprimering st\u00e4lldes in.<br \/>\nd. 10 tr\u00e5dar k\u00f6rdes samtidigt som utf\u00f6rde 1\/10 operationer put\/get\/get+put till denna tabell med poster p\u00e5 100\/1000\/10000 byte, vilket resulterade i 50 000 p\u00e5 varandra f\u00f6ljande f\u00f6rfr\u00e5gningar (nycklar slumpm\u00e4ssiga).<br \/>\ne. Punkt d upprepades tre g\u00e5nger.<br \/>\nf. Den genomsnittliga k\u00f6rtiden f\u00f6r alla tr\u00e5dar ber\u00e4knades. <\/p>\n<p>Alla m\u00f6jliga kombinationer testades. Det var f\u00f6ruts\u00e4gbart att med \u00f6kad poststorlek skulle hastigheten minska eller att inaktivering av cachelagring skulle leda till en nedg\u00e5ng. M\u00e5let var dock att f\u00f6rst\u00e5 graden och betydelsen av p\u00e5verkan av varje parameter, d\u00e4rf\u00f6r matades de insamlade uppgifterna in i en linj\u00e4r regressionsfunktion, vilket m\u00f6jligg\u00f6r att uppskatta tillf\u00f6rlitligheten med hj\u00e4lp av t-statistik. Nedan framg\u00e5r resultaten fr\u00e5n block som utf\u00f6r operationer Put. Den fullst\u00e4ndiga upps\u00e4ttningen kombinationer 2*2*3*2*3 = 144 alternativ + 72, eftersom vissa genomf\u00f6rdes tv\u00e5 g\u00e5nger. S\u00e5ledes blev det sammanlagt 216 k\u00f6rningar:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/7a13c7a9b3ff1859976800f5d45cd51b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTestning utf\u00f6rdes p\u00e5 en mini-kluster best\u00e5ende av 3 DataNodes och 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar). HBase-version 1.2.0-cdh5.14.2.<\/p>\n<p>Den h\u00f6gsta ins\u00e4ttningstakten p\u00e5 3,7 sekunder uppn\u00e5ddes n\u00e4r MSLAB-l\u00e4get var avst\u00e4ngt, p\u00e5 en tabell med en partition, med BlockCache aktiverat, BlockSize = 16, poster p\u00e5 100 byte i grupper om 10.<br \/>\nDen l\u00e4gsta ins\u00e4ttningstakten p\u00e5 82,8 sekunder uppn\u00e5ddes n\u00e4r MSLAB-l\u00e4get var aktiverat, p\u00e5 en tabell med en partition, med BlockCache aktiverat, BlockSize = 16, poster p\u00e5 10000 byte i enstaka.<\/p>\n<p>Nu ska vi titta p\u00e5 modellen. Vi ser en bra kvalitet av modellen enligt R2, men det \u00e4r helt klart att extrapolering h\u00e4r inte rekommenderas. Det verkliga beteendet hos systemet vid parameterf\u00f6r\u00e4ndringar kommer att vara icke-linj\u00e4rt, denna modell beh\u00f6vs inte f\u00f6r prognoser, utan f\u00f6r att f\u00f6rst\u00e5 vad som h\u00e4nde inom angivna parametrar. Till exempel ser vi h\u00e4r enligt Student-kriteriet att f\u00f6r operationen Put har parametrarna BlockSize och BlockCache ingen betydelse (vilket \u00e4r ganska f\u00f6ruts\u00e4gbart):<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/2fb65d1809d53f2b47f4f8829a9efc65.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet \u00e4r ganska ov\u00e4ntat att en \u00f6kning av antalet partitioner leder till en minskning av prestanda (vi har redan sett den positiva effekten av att \u00f6ka antalet partitioner vid BulkLoad), \u00e4ven om det \u00e4r f\u00f6rklarligt. F\u00f6r det f\u00f6rsta inneb\u00e4r det att man m\u00e5ste formulera f\u00f6rfr\u00e5gningar till 30 regioner ist\u00e4llet f\u00f6r en, och datavolymen \u00e4r inte tillr\u00e4ckligt stor f\u00f6r att ge vinst. F\u00f6r det andra definieras den totala svartiden av den l\u00e5ngsammaste RS, och eftersom antalet DataNodes \u00e4r mindre \u00e4n antalet RS har vissa regioner noll lokalitet. L\u00e5t oss ocks\u00e5 titta p\u00e5 topp fem:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/8ad7e832879156eaa96e630458405cdc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNu f\u00e5r vi utv\u00e4rdera resultaten fr\u00e5n Get-blocken:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/8a5dd45422c74e8815011d7e9b805ccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAntalet partitioner har f\u00f6rlorat sin betydelse, vilket troligen beror p\u00e5 att datan cachas v\u00e4l och att cachen f\u00f6r l\u00e4sning \u00e4r den mest betydelsefulla (statistiskt sett) parametern. Naturligtvis \u00e4r det ocks\u00e5 mycket f\u00f6rdelaktigt f\u00f6r prestandan att \u00f6ka antalet meddelanden i f\u00f6rfr\u00e5gan. B\u00e4sta resultaten:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/9d237f9fdbeaf5412daec2fc2fa24b01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOch slutligen, l\u00e5t oss titta p\u00e5 modellen f\u00f6r blocket som f\u00f6rst utf\u00f6rde get och sedan put:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/75137207a4a69acccad036882794094b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nH\u00e4r \u00e4r alla parametrar signifikanta. Och resultaten f\u00f6r ledarna:<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/c166933d81e86f36958e3af58297f876.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>9. Belastningstestning<\/h2>\n<p>\nOch slutligen ska vi k\u00f6ra en mer eller mindre anst\u00e4ndig belastning, men det \u00e4r alltid mer intressant n\u00e4r man har n\u00e5got att j\u00e4mf\u00f6ra med. P\u00e5 DataStax webbplats \u2013 den nyckelutvecklare f\u00f6r Cassandra - finns det <noindex><a rel=\"nofollow\" href=\"https:\/\/www.datastax.com\/wp-content\/themes\/datastax-2014-08\/files\/NoSQL_Benchmarks_EndPoint.pdf\">resultat<\/a><\/noindex> NT av flera NoSQL-lagringar, inklusive HBase version 0.98.6-1. Inladdningen genomf\u00f6rdes med 40 tr\u00e5dar, datastorleken var 100 byte, SSD-diskar. Resultaten av testningen av Read-Modify-Write-operationerna visade f\u00f6ljande resultat.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/521e9dff60f462e6dabebc1234e028be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n S\u00e5vitt jag f\u00f6rst\u00e5r genomf\u00f6rdes l\u00e4sningen i block om 100 poster och f\u00f6r 16 noder visade DataStax test av HBase en prestanda p\u00e5 10 000 operationer per sekund. <\/p>\n<p>Det \u00e4r tur att v\u00e5r kluster ocks\u00e5 har 16 noder, men det \u00e4r inte s\u00e5 \"turigt\" att varje noder har 64 k\u00e4rnor (tr\u00e5dar), medan i DataStax-testet har de bara 4. \u00c5 andra sidan har de SSD-diskar, medan vi har HDD, och en nyare version av HBase, och CPU-anv\u00e4ndning under belastning \u00f6kade i stort sett inte m\u00e4rkbart (visuellt med 5-10 procent). Men vi kommer \u00e4nd\u00e5 att f\u00f6rs\u00f6ka k\u00f6ra med denna konfiguration. Standardtabellinst\u00e4llningar, l\u00e4sning utf\u00f6rs inom nyckelintervallet fr\u00e5n 0 till 50 miljoner slumpm\u00e4ssigt (dvs. i grund och botten varje g\u00e5ng nya). Tabellen inneh\u00e5ller 50 miljoner poster, uppdelade i 64 partitioner. Nycklarna \u00e4r hashade med crc32. Tabellinst\u00e4llningarna \u00e4r standard, MSLAB \u00e4r aktiverat. 40 tr\u00e5dar startas, varje tr\u00e5d l\u00e4ser en upps\u00e4ttning av 100 slumpm\u00e4ssiga nycklar och skriver omedelbart de genererade 100 byte till dessa nycklar. <\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/776490f01121cc434135f733311b7722.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Stand: 16 DataNode och 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar). Version HBase 1.2.0-cdh5.14.2.<\/p>\n<p>Det genomsnittliga resultatet ligger n\u00e4rmare 40 000 operationer per sekund, vilket \u00e4r avsev\u00e4rt b\u00e4ttre \u00e4n i DataStax-testet. Men f\u00f6r experimentets skull kan villkoren \u00e4ndras n\u00e5got. Det \u00e4r ganska osannolikt att allt arbete kommer att utf\u00f6ras uteslutande med en tabell, och endast med unika nycklar. Anta att det finns en viss \"het\" upps\u00e4ttning nycklar som genererar den st\u00f6rsta belastningen. D\u00e4rf\u00f6r kommer vi att f\u00f6rs\u00f6ka skapa belastning med st\u00f6rre poster (10 KB), ocks\u00e5 i batchar om 100, i 4 olika tabeller och begr\u00e4nsa nyckelintervallet till 50 000. P\u00e5 grafen nedan visas starten av 40 tr\u00e5dar, varje tr\u00e5d l\u00e4ser en upps\u00e4ttning av 100 nycklar och skriver omedelbart slumpm\u00e4ssiga 10 KB till dessa nycklar tillbaka. <\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/30d29f1b98663e3c07cb2be20e93876a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStand: 16 DataNode och 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar). Version HBase 1.2.0-cdh5.14.2.<\/p>\n<p>Under belastningen genomf\u00f6rdes flera g\u00e5nger major compaction, som visades ovan utan denna procedur kommer prestandan gradvis att f\u00f6rs\u00e4mras, men under genomf\u00f6randet uppst\u00e5r ocks\u00e5 en ytterligare belastning. Dips orsakas av olika sk\u00e4l. Ibland avslutade tr\u00e5darna sitt arbete och medan de startades om uppstod det en paus, ibland skapade externa applikationer belastning p\u00e5 klustret.<\/p>\n<p>Att l\u00e4sa och skriva direkt \u00e4r ett av de mest kr\u00e4vande arbetsm\u00f6nstren f\u00f6r HBase. Om man g\u00f6r endast sm\u00e5 put-f\u00f6rfr\u00e5gningar, till exempel 100 byte vardera, genom att kombinera dem i paket om 10-50 tusen, kan man uppn\u00e5 hundratusentals operationer per sekund och likas\u00e5 g\u00e4ller det f\u00f6r f\u00f6rfr\u00e5gningar enbart f\u00f6r l\u00e4sning. Det \u00e4r v\u00e4rt att notera att resultaten \u00e4r radikalt b\u00e4ttre \u00e4n de som erh\u00f6lls av DataStax, fr\u00e4mst tack vare blockf\u00f6rfr\u00e5gningar om 50 tusen.<\/p>\n<p><img decoding=\"async\" alt=\"Teori och praktik f\u00f6r anv\u00e4ndning av HBase\" src=\"\/wp-content\/uploads\/2020\/01\/412bda50a55093224169f048ea2f863a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStand: 16 DataNode och 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 tr\u00e5dar). Version HBase 1.2.0-cdh5.14.2.<\/p>\n<h2>10. Slutsatser<\/h2>\n<p>\nDetta system kan konfigureras ganska flexibelt, men p\u00e5verkan av ett stort antal parametrar \u00e4r fortfarande oklar. Delar av dem har testats, men ingick inte i det slutgiltiga testsetet. Till exempel visade prelimin\u00e4ra experiment en liten betydelse av parametern DATA_BLOCK_ENCODING, som kodar information genom att anv\u00e4nda v\u00e4rden fr\u00e5n n\u00e4rliggande celler, vilket \u00e4r helt f\u00f6rst\u00e5eligt f\u00f6r slumpm\u00e4ssigt genererade data. I fallet med anv\u00e4ndning av ett stort antal upprepande objekt kan vinsten bli betydande. Generellt kan man s\u00e4ga att HBase ger intrycket av att vara en ganska seri\u00f6s och genomt\u00e4nkt databas som kan vara tillr\u00e4ckligt presterande vid operationer med stora datablokker. S\u00e4rskilt om det finns m\u00f6jlighet att sprida l\u00e4s- och skrivprocesserna \u00f6ver tid.<\/p>\n<p>Om du anser att n\u00e5got inte \u00e4r tillr\u00e4ckligt utf\u00f6rligt, \u00e4r jag redo att ber\u00e4tta mer. Vi f\u00f6resl\u00e5r att ni delar med er av er erfarenhet eller diskuterar om ni inte h\u00e5ller med om n\u00e5got.<br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Teori och praktik av HBase-anv\u00e4ndning | ProHoster","description":"God dag! Mitt namn \u00e4r Danil Lipovoy, v\u00e5rt team p\u00e5 Sbertech har b\u00f6rjat anv\u00e4nda HBase som ett lagringsutrymme f\u00f6r operationella data.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/55302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55302"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55302\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}