{"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\/hu\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","title":{"rendered":"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>J\u00f3 napot! A nevem Danil Lipovoy, a csapatunk a Szbertechn\u00e9l elkezdte haszn\u00e1lni az HBase-t, mint val\u00f3s idej\u0171 adatrakt\u00e1rat. Az al\u00e1bbiakban \u00f6sszegy\u0171jt\u00f6tt tapasztalatainkat szeretn\u00e9nk rendszerezni \u00e9s le\u00edrni (rem\u00e9lj\u00fck, sokak sz\u00e1m\u00e1ra hasznos lesz). Az al\u00e1bb felsorolt k\u00eds\u00e9rletek az HBase 1.2.0-cdh5.14.2 \u00e9s 2.0.0-cdh6.0.0-beta1 verzi\u00f3ival t\u00f6rt\u00e9ntek. <\/p>\n<ol>\n<li>\u00c1ltal\u00e1nos architekt\u00fara <\/li>\n<li>Adatok \u00edr\u00e1sa HBASE-be<\/li>\n<li>Adatok olvas\u00e1sa HBASE-b\u0151l<\/li>\n<li>Adatok gyors\u00edt\u00f3t\u00e1raz\u00e1sa<\/li>\n<li>T\u00f6meges adatfeldolgoz\u00e1s MultiGet\/MultiPut<\/li>\n<li>A t\u00e1bl\u00e1k r\u00e9gi\u00f3kra bont\u00e1s\u00e1nak strat\u00e9gi\u00e1ja (sharding)<\/li>\n<li>Hibat\u0171r\u00e9s, t\u00f6m\u00f6r\u00edt\u00e9s \u00e9s az adatok lok\u00e1ci\u00f3ja<\/li>\n<li>Be\u00e1ll\u00edt\u00e1sok \u00e9s teljes\u00edtm\u00e9ny<\/li>\n<li>Terhel\u00e9ses tesztel\u00e9s<\/li>\n<li>K\u00f6vetkeztet\u00e9sek<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. \u00c1ltal\u00e1nos architekt\u00fara<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/30800d8a48de4c52ff1650a4f1dec4c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA tartal\u00e9k Master a ZooKeeper csom\u00f3ponton hallgatja a f\u0151 akt\u00edv csom\u00f3pont heartbeat-j\u00e9t, \u00e9s a kies\u00e9s eset\u00e9n \u00e1tveszi a Master feladatait. <\/p>\n<h2>2. Adatok \u00edr\u00e1sa HBASE-be<\/h2>\n<p>\nEl\u0151sz\u00f6r vizsg\u00e1ljuk meg a legegyszer\u0171bb esetet \u2013 egy kulcs-\u00e9rt\u00e9k p\u00e1r \u00edr\u00e1s\u00e1t egy t\u00e1bl\u00e1ba put(rowkey) haszn\u00e1lat\u00e1val. A kliensnek el\u0151sz\u00f6r is meg kell tudnia, hol tal\u00e1lhat\u00f3 a gy\u00f6k\u00e9r r\u00e9gi\u00f3szerver (Root Region Server - RRS), amely a hbase:meta t\u00e1bl\u00e1t t\u00e1rolja. Ezt az inform\u00e1ci\u00f3t a ZooKeeper-t\u0151l kapja. Ezut\u00e1n a RRS-hez fordul, \u00e9s elolvassa a hbase:meta t\u00e1bl\u00e1t, amelyb\u0151l kinyeri, hogy melyik RegionServer (RS) felel\u0151s az adott rowkey kulcshoz tartoz\u00f3 adatok t\u00e1rol\u00e1s\u00e1\u00e9rt a v\u00e1lasztott t\u00e1bl\u00e1ban. A j\u00f6v\u0151beli felhaszn\u00e1l\u00e1s \u00e9rdek\u00e9ben a meta-t\u00e1bl\u00e1t a kliens gyors\u00edt\u00f3t\u00e1razza, \u00edgy a tov\u00e1bbi k\u00e9r\u00e9sek gyorsabban, k\u00f6zvetlen\u00fcl az RS-hez \u00e9rkeznek.<\/p>\n<p>Ezut\u00e1n az RS, miut\u00e1n megkapta a k\u00e9r\u00e9st, el\u0151sz\u00f6r is be\u00edrja azt a WriteAheadLog (WAL) napl\u00f3ba, ami a vissza\u00e1ll\u00edt\u00e1shoz sz\u00fcks\u00e9ges, ha a rendszer le\u00e1ll. Ezt k\u00f6vet\u0151en elmenti az adatokat a MemStore-ba. Ez egy mem\u00f3riaalap\u00fa puffer, amely a r\u00e9gi\u00f3hoz tartoz\u00f3 rendezett kulcsk\u00e9szletet tartalmazza. A t\u00e1bla r\u00e9gi\u00f3kra (part\u00edci\u00f3kra) bonthat\u00f3, amelyeket minden egyes r\u00e9gi\u00f3 nem \u00e1tfed\u0151 kulcsk\u00e9szletek t\u00e1rol\u00e1s\u00e1ra haszn\u00e1l. Ez lehet\u0151v\u00e9 teszi, hogy a r\u00e9gi\u00f3kat k\u00fcl\u00f6nb\u00f6z\u0151 szervereken elhelyezve magasabb teljes\u00edtm\u00e9nyt \u00e9rjenek el. Azonban, annak ellen\u00e9re, hogy ez a kijelent\u00e9s nyilv\u00e1nval\u00f3nak t\u0171nik, hamarosan l\u00e1tni fogjuk, hogy nem minden esetben m\u0171k\u00f6dik.<\/p>\n<p>A MemStore-ba t\u00f6rt\u00e9n\u0151 \u00edr\u00e1st k\u00f6vet\u0151en a kliens v\u00e1laszt kap arr\u00f3l, hogy az adatokat sikeresen elmentett\u00e9k. Val\u00f3j\u00e1ban azonban az adatok csak a pufferben t\u00e1rol\u00f3dnak, \u00e9s csak egy megfelel\u0151 id\u0151intervallum ut\u00e1n, vagy \u00faj adatok felv\u00e9tel\u00e9nek eset\u00e9n ker\u00fclnek a lemezre. <\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/10f4d5d600a20882690f5cc81322bc41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA \"Delete\" operation does not physically remove data. It is merely marked as deleted, with actual deletion occurring at the time of calling the major compact function, which is explained in detail in section 7.<\/p>\n<p>Files in HFile format accumulate in HDFS, and from time to time, a minor compact process is initiated, which simply merges small files into larger ones without deleting anything. Over time, this becomes a problem that manifests only when reading data (we will return to this later). <\/p>\n<p>In addition to the loading process described above, there is a much more efficient procedure, which is perhaps the strongest point of this database \u2013 BulkLoad. This involves creating HFiles ourselves and placing them on the disk, allowing for excellent scalability and reaching quite respectable speeds. Essentially, the limitation here is not HBase, but the capabilities of the hardware. Below are the loading results on a cluster consisting of 16 RegionServers and 16 NodeManager YARN (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 threads), HBase version 1.2.0-cdh5.14.2. <\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/4e4452b216eda3269a364ea97c49120f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt can be seen that by increasing the number of partitions (regions) in the table, as well as Spark executors, we achieve an increase in loading speed. Speed also depends on the volume of records. Large blocks yield an increase in measurement in MB\/sec, while smaller ones increase the number of inserted records per unit time, all else being equal. <\/p>\n<p>You can also initiate loading into two tables simultaneously and achieve a doubling of speed. It can be seen below that writing 10 KB blocks straight into two tables runs at about 600 Mb\/sec for each (totaling 1275 Mb\/sec), matching the speed of writing into one table at 623 MB\/sec (see #11 above).<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/9f1b4fc0c80b797111494d400e9ce332.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHowever, the second run with 50 KB records shows that the loading speed is growing only slightly, indicating a nearing of the limit values. It should be noted that HBASE itself is not significantly stressed here; all that is required from it is to initially hand over data from hbase:meta, and after placing the HFiles, flush the BlockCache data and save the MemStore buffer to disk, if it is not empty.<\/p>\n<h2>3. Reading data from HBASE<\/h2>\n<p>\nHa felt\u00e9telezz\u00fck, hogy az \u00f6sszes inform\u00e1ci\u00f3 a hbase:meta m\u00e1r rendelkez\u00e9sre \u00e1ll a kliensn\u00e9l (l\u00e1sd 2. pont), akkor a k\u00e9r\u00e9s azonnal arra a RS-re \u00e9rkezik, ahol a sz\u00fcks\u00e9ges kulcsot t\u00e1rolj\u00e1k. El\u0151sz\u00f6r a MemCache-ben t\u00f6rt\u00e9nik a keres\u00e9s. F\u00fcggetlen\u00fcl att\u00f3l, hogy vannak-e ott adatok vagy sem, a keres\u00e9s a BlockCache pufferben is zajlik, sz\u00fcks\u00e9g eset\u00e9n pedig az HFiles-ban. Ha az adatokat megtal\u00e1lj\u00e1k a f\u00e1jlban, akkor a BlockCache-be helyezik, \u00e9s a k\u00f6vetkez\u0151 k\u00e9r\u00e9skor gyorsabban visszaadj\u00e1k. A HFile-ban t\u00f6rt\u00e9n\u0151 keres\u00e9s viszonylag gyorsan zajlik a Bloom sz\u0171r\u0151 haszn\u00e1lat\u00e1nak k\u00f6sz\u00f6nhet\u0151en, azaz egy kis mennyis\u00e9g\u0171 adat beolvas\u00e1s\u00e1val azonnal meghat\u00e1rozza, hogy ez a f\u00e1jl tartalmazza-e a sz\u00fcks\u00e9ges kulcsot, \u00e9s ha nem, akkor \u00e1tt\u00e9r a k\u00f6vetkez\u0151re.<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/a21b1b825a84cfd02507ec334e9452fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA h\u00e1rom forr\u00e1sb\u00f3l kapott adatok alapj\u00e1n az RS v\u00e1laszt form\u00e1l. K\u00fcl\u00f6n\u00f6sen, ha a kliens verzi\u00f3z\u00e1st k\u00e9rt, akkor egyszerre sz\u00e1mos megtal\u00e1lt verzi\u00f3t is tov\u00e1bb\u00edthat.<\/p>\n<h2>4. Adatok gyors\u00edt\u00f3t\u00e1raz\u00e1sa<\/h2>\n<p>\nA MemStore \u00e9s BlockCache puffer 80%-ig terjed\u0151 on-heap mem\u00f3riaig\u00e9nyt k\u00e9pvisel az RS sz\u00e1m\u00e1ra (a t\u00f6bbi a RS szolg\u00e1ltat\u00e1si feladatai sz\u00e1m\u00e1ra van fenntartva). Ha a tipikus haszn\u00e1lati m\u00f3d olyan, hogy a folyamatok \u00edrj\u00e1k \u00e9s azonnal olvass\u00e1k ezeket az adatokat, akkor \u00e9rdemes cs\u00f6kkenteni a BlockCache m\u00e9retet \u00e9s n\u00f6velni a MemStore-t, mivel \u00edr\u00e1skor az adatok nem ker\u00fclnek a gyors\u00edt\u00f3t\u00e1rba olvas\u00e1sra, \u00edgy a BlockCache haszn\u00e1lata ritk\u00e1bban fordul el\u0151. A BlockCache puffer k\u00e9t r\u00e9szb\u0151l \u00e1ll: LruBlockCache (mindig on-heap) \u00e9s BucketCache (\u00e1ltal\u00e1ban off-heap vagy SSD-n). A BucketCache haszn\u00e1lat\u00e1t akkor javaslom, ha az olvas\u00e1si k\u00e9r\u00e9sek sz\u00e1ma nagyon magas, \u00e9s nem f\u00e9rnek el az LruBlockCache-ben, ami akt\u00edv Garbage Collector m\u0171k\u00f6d\u00e9shez vezet. Ekkor azonban radik\u00e1lis teljes\u00edtm\u00e9nyn\u00f6veked\u00e9st ne v\u00e1rjunk az olvas\u00e1si gyors\u00edt\u00f3t\u00e1r haszn\u00e1lat\u00e1t\u00f3l, de erre m\u00e9g visszat\u00e9r\u00fcnk a 8. pontban.<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/17d7791a998dd7da747cb7089dce1f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA BlockCache egy eg\u00e9sz RS-re vonatkozik, m\u00edg a MemStore minden t\u00e1bl\u00e1hoz saj\u00e1t (egy minden Column Family-hez).<\/p>\n<p>Mint <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudera.com\/blog\/2012\/06\/hbase-write-path\/\">ami le van \u00edrva<\/a><\/noindex> Elm\u00e9letben, \u00edr\u00e1skor az adatok nem ker\u00fclnek a gyors\u00edt\u00f3t\u00e1rba, \u00e9s val\u00f3ban, ezek a CACHE_DATA_ON_WRITE param\u00e9terek a t\u00e1bl\u00e1ra \u00e9s a \u201eCache DATA on Write\u201d az RS-re false-ra vannak \u00e1ll\u00edtva. Praktikusan azonban, ha adatokat \u00edrunk a MemStore-ba, majd azokat le\u00edrjuk a lemezre (ez\u00e1ltal t\u00f6r\u00f6lve \u0151ket), majd a l\u00e9trej\u00f6tt f\u00e1jlt elt\u00e1vol\u00edtjuk, akkor egy get k\u00e9r\u00e9s v\u00e9grehajt\u00e1sakor sikeresen megkapjuk az adatokat. R\u00e1ad\u00e1sul, m\u00e9g ha teljesen le is \u00e1ll\u00edtjuk a BlockCache-t, \u00e9s \u00faj adatokkal t\u00f6ltj\u00fck fel a t\u00e1bl\u00e1t, majd el\u00e9rj\u00fck a MemStore le\u00edr\u00e1s\u00e1t a lemezre, elt\u00e1vol\u00edtjuk az adatokat, \u00e9s egy m\u00e1sik \u00fcl\u00e9st k\u00e9r\u00fcnk, akkor az adatok valahonnan m\u00e9gis visszanyerhet\u0151k. Teh\u00e1t az HBase nemcsak az adatokat t\u00e1rolja, hanem titokzatos rejt\u00e9lyeket is.<\/p>\n<pre><code class=\"bash\">hbase(main):001:0&gt; create 'ns:magic', 'cf'\nL\u00e9trehozva a t\u00e1bl\u00e1zat: ns:magic\nEltelt: 1.1533 m\u00e1sodperc\nhbase(main):002:0&gt; put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'\nEltelt: 0.2610 m\u00e1sodperc\nhbase(main):003:0&gt; flush 'ns:magic'\nEltelt: 0.6161 m\u00e1sodperc\nhdfs dfs -mv \/data\/hbase\/data\/ns\/magic\/* \/tmp\/trash\nhbase(main):002:0&gt; get 'ns:magic', 'key1'\n cf:c      timestamp=1534440690218, \u00e9rt\u00e9k=try_to_delete_me\n<\/code><\/pre>\n<p>\nA \u201eCache DATA on Read\u201d param\u00e9ter false \u00e9rt\u00e9kre van \u00e1ll\u00edtva. Ha van \u00f6tletem, sz\u00edvesen v\u00e1rom a megjegyz\u00e9seket.<\/p>\n<h2>5. MultiGet\/MultiPut k\u00f6tegelt adatfeldolgoz\u00e1s<\/h2>\n<p>\nAz egyes lek\u00e9rdez\u00e9sek (Get\/Put\/Delete) kezel\u00e9se meglehet\u0151sen k\u00f6lts\u00e9ges m\u0171velet, ez\u00e9rt \u00e9rdemes ezeket lehet\u0151s\u00e9g szerint List-be vagy List-be csoportos\u00edtani, ami jelent\u0151s teljes\u00edtm\u00e9nyn\u00f6veked\u00e9st eredm\u00e9nyez. K\u00fcl\u00f6n\u00f6sen az \u00edr\u00e1si m\u0171veletek eset\u00e9n, de olvas\u00e1s k\u00f6zben az al\u00e1bbi buktat\u00f3val tal\u00e1lkozhatunk. Az al\u00e1bbi grafikonon 50 000 rekord MemStore-b\u00f3l t\u00f6rt\u00e9n\u0151 olvas\u00e1s\u00e1nak ideje l\u00e1that\u00f3. Az olvas\u00e1s egy sz\u00e1lon zajlott, \u00e9s a v\u00edzszintes tengelyen a lek\u00e9rdez\u00e9sben szerepl\u0151 kulcsok sz\u00e1ma l\u00e1that\u00f3. Itt l\u00e1that\u00f3, hogy ezer kulcsra emelve egy lek\u00e9rdez\u00e9s ideje cs\u00f6kken, azaz a sebess\u00e9g n\u0151. Azonban az alap\u00e9rtelmezett MSLAB m\u00f3d bekapcsol\u00e1sa ut\u00e1n ezen a hat\u00e1ron t\u00fal drasztikusan cs\u00f6kken a teljes\u00edtm\u00e9ny, \u00e9s min\u00e9l nagyobb az adatmennyis\u00e9g a feljegyz\u00e9sben, ann\u00e1l hosszabb a feldolgoz\u00e1si id\u0151. <\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/42d3a77d66770a7fed03f83fecdca470.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA teszteket virtu\u00e1lis g\u00e9pen v\u00e9gezt\u00e9k, 8 mag, HBase 2.0.0-cdh6.0.0-beta1 verzi\u00f3.<\/p>\n<p>Az MSLAB m\u00f3d c\u00e9lja a heap t\u00f6redezetts\u00e9g\u00e9nek cs\u00f6kkent\u00e9se, amely az \u00faj \u00e9s r\u00e9gi gener\u00e1ci\u00f3k adatainak kevered\u00e9se miatt keletkezik. A probl\u00e9ma megold\u00e1sak\u00e9nt, az MSLAB bekapcsol\u00e1sakor az adatok viszonylag kis cell\u00e1kba (chunk) ker\u00fclnek, \u00e9s adagokban dolgozz\u00e1k fel \u0151ket. Ennek eredm\u00e9nyek\u00e9nt, amikor a k\u00e9rt adatmennyis\u00e9g meghaladja a kijel\u00f6lt m\u00e9retet, a teljes\u00edtm\u00e9ny drasztikusan cs\u00f6kken. M\u00e1sr\u00e9szr\u0151l, ennek a m\u00f3dnak a kikapcsol\u00e1sa sem k\u00edv\u00e1natos, mivel a GC miatti le\u00e1ll\u00e1sokhoz vezethet az adatok intenz\u00edv kezel\u00e9sekor. J\u00f3 megold\u00e1s lehet a cellam\u00e9ret n\u00f6vel\u00e9se, akt\u00edv \u00edr\u00e1s k\u00f6zben a put parancs haszn\u00e1lat\u00e1val, egyidej\u0171 olvas\u00e1ssal. \u00c9rdemes megjegyezni, hogy a probl\u00e9ma nem mer\u00fcl fel, ha a feljegyz\u00e9s ut\u00e1n v\u00e9grehajtjuk a flush parancsot, amely a MemStore-t a lemezre \u00edrja, vagy ha BulkLoad seg\u00edts\u00e9g\u00e9vel t\u00f6ltenek be. Az al\u00e1bbi t\u00e1bl\u00e1zatban l\u00e1that\u00f3, hogy a MemStore-b\u00f3l nagyobb mennyis\u00e9g\u0171 adat (\u00e9s azonos sz\u00e1m\u00fa) lek\u00e9rdez\u00e9sek lassul\u00e1shoz vezetnek. Azonban a chunksize n\u00f6vel\u00e9s\u00e9vel az feldolgoz\u00e1si id\u0151 norm\u00e1ra \u00e1ll\u00edthat\u00f3 vissza.<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/0076215bd171257548f8a4c4d4229ba0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAz adatok r\u00e9gi\u00f3k szerinti feloszt\u00e1sa, azaz a t\u00e1bl\u00e1k has\u00edt\u00e1sa, seg\u00edt a chunksize n\u00f6vel\u00e9s\u00e9ben. Ez azt eredm\u00e9nyezi, hogy minden r\u00e9gi\u00f3hoz kevesebb k\u00e9r\u00e9s \u00e9rkezik, \u00e9s ha ezek egy cell\u00e1ba ker\u00fclnek, a v\u00e1laszid\u0151 j\u00f3 marad.<\/p>\n<h2>6. Strat\u00e9gi\u00e1k a t\u00e1bl\u00e1k r\u00e9gi\u00f3kra bont\u00e1s\u00e1ra (has\u00edt\u00e1s)<\/h2>\n<p>\nMivel az HBase egy kulcs-\u00e9rt\u00e9k t\u00e1rol\u00f3, ahol a part\u00edcion\u00e1l\u00e1s a kulcs alapj\u00e1n t\u00f6rt\u00e9nik, rendk\u00edv\u00fcl fontos, hogy az adatokat egyenletesen osszuk el a r\u00e9gi\u00f3k k\u00f6z\u00f6tt. P\u00e9ld\u00e1ul egy ilyen t\u00e1bl\u00e1t h\u00e1rom r\u00e9szre osztva az adatok h\u00e1rom r\u00e9gi\u00f3ra bont\u00f3dnak:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/a811ae81e77b48dbf28ed86dbdc35739.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEl\u0151fordulhat, hogy ez dr\u00e1mai lassul\u00e1shoz vezet, ha a k\u00e9s\u0151bb bet\u00f6ltend\u0151 adatok t\u00f6bbs\u00e9ge p\u00e9ld\u00e1ul hossz\u00fa \u00e9rt\u00e9kekb\u0151l \u00e1ll, amelyek legt\u00f6bbje ugyanazzal a sz\u00e1mmal kezd\u0151dik, p\u00e9ld\u00e1ul:<\/p>\n<p>1000001<br \/>\n1000002<br \/>\n\u2026<br \/>\n1100003<\/p>\n<p>Mivel a kulcsok byte t\u00f6mbk\u00e9nt t\u00e1rol\u00f3dnak, mindegyik ugyanazzal kezd\u0151dik, \u00e9s ugyanahhoz az #1 region\u00e1lhoz tartozik, amely ezt a kulcstartom\u00e1nyt t\u00e1rolja. T\u00f6bb has\u00edt\u00e1si strat\u00e9gia l\u00e9tezik:<\/p>\n<p>HexStringSplit \u2013 A kulcsot hexadecim\u00e1lis k\u00f3dol\u00e1s\u00fa karakterl\u00e1ncc\u00e1 alak\u00edtja a tartom\u00e1nyban \u201e00000000\u201d =&gt; \u201eFFFFFFFF\u201d, balra null\u00e1kkal kit\u00f6ltve.<\/p>\n<p>UniformSplit \u2013 A kulcsot byte t\u00f6mbb\u00e9 alak\u00edtja hexadecim\u00e1lis k\u00f3dol\u00e1sban a tartom\u00e1nyban \u201e00\u201d =&gt; \u201eFF\u201d, jobbra null\u00e1kkal kit\u00f6ltve.<\/p>\n<p>Ezen k\u00edv\u00fcl megadhatunk b\u00e1rmilyen kulcstartom\u00e1nyt vagy kulcsk\u00e9szletet a has\u00edt\u00e1shoz, \u00e9s be\u00e1ll\u00edthatjuk az automatikus has\u00edt\u00e1st. Azonban az egyik legegyszer\u0171bb \u00e9s leghat\u00e9konyabb megk\u00f6zel\u00edt\u00e9s a UniformSplit \u00e9s a hash konkaten\u00e1ci\u00f3 haszn\u00e1lata, p\u00e9ld\u00e1ul a legmagasabb byte p\u00e1r a kulcs CRC32(rowkey) f\u00fcggv\u00e9nyen val\u00f3 \u00e1tfuttat\u00e1s\u00e1b\u00f3l \u00e9s mag\u00e1b\u00f3l a rowkeyb\u0151l:<\/p>\n<p>hash + rowkey<\/p>\n<p>Ez\u00e1ltal az \u00f6sszes adat egyenletesen oszlik meg a r\u00e9gi\u00f3k k\u00f6z\u00f6tt. Olvas\u00e1skor az els\u0151 k\u00e9t byte egyszer\u0171en elvet\u00e9sre ker\u00fcl, \u00e9s megmarad az eredeti kulcs. A RS szint\u00e9n ellen\u0151rzi a r\u00e9gi\u00f3ban tal\u00e1lhat\u00f3 adatok \u00e9s kulcsok sz\u00e1m\u00e1t, \u00e9s ha a hat\u00e1r\u00e9rt\u00e9keket t\u00fall\u00e9pi, automatikusan felosztja azokat. <\/p>\n<h2>7. Hibat\u0171r\u00e9s \u00e9s adatok helyi el\u00e9rhet\u0151s\u00e9ge<\/h2>\n<p>\nMivel minden kulcsgarnit\u00far\u00e1\u00e9rt csak egy r\u00e9gi\u00f3 felel, a RS-el val\u00f3 probl\u00e9m\u00e1k megold\u00e1sa \u00e9rdek\u00e9ben minden sz\u00fcks\u00e9ges adatot az HDFS-ben kell t\u00e1rolni. Ha a RS le\u00e1ll, a mester az ezt k\u00f6vet\u0151 heartbeat hi\u00e1ny\u00e1b\u00f3l \u00e9rtes\u00fcl r\u00f3la a ZooKeeper csom\u00f3ponton. Ekkor egy m\u00e1sik RS-nek rendeli hozz\u00e1 a kezelend\u0151 r\u00e9gi\u00f3t, \u00e9s mivel az HFiles a elosztott f\u00e1jlrendszerben t\u00e1rol\u00f3dik, az \u00faj gazda kiolvassa azokat \u00e9s folytatja az adatok kezel\u00e9s\u00e9t. Azonban mivel az adatok egy r\u00e9sze lehet a MemStore-ban van, \u00e9s m\u00e9g nem ker\u00fclt az HFiles-ba, a tranzakci\u00f3s el\u0151zm\u00e9nyek helyre\u00e1ll\u00edt\u00e1s\u00e1hoz a WAL-t haszn\u00e1lj\u00e1k, ami szint\u00e9n az HDFS-ben van t\u00e1rolva. A v\u00e1ltoztat\u00e1sok alkalmaz\u00e1sa ut\u00e1n a RS k\u00e9pes v\u00e1laszolni a k\u00e9r\u00e9sekre, azonban a k\u00f6lt\u00f6z\u00e9s miatt az adatok egy r\u00e9sze \u00e9s azokat kezel\u0151 folyamatok k\u00fcl\u00f6nb\u00f6z\u0151 csom\u00f3pontokon helyezkednek el, ami cs\u00f6kkenti a helyi er\u0151forr\u00e1sok haszn\u00e1lat\u00e1t. <\/p>\n<p>A probl\u00e9ma megold\u00e1sa a major compaction - ez a folyamat \u00e1thelyezi a f\u00e1jlokat azokra a csom\u00f3pontokra, amelyek\u00e9rt felel\u0151sek (ahov\u00e1 a r\u00e9gi\u00f3ik is tartoznak), ennek eredm\u00e9nyek\u00e9nt a folyamat alatt nagym\u00e9rt\u00e9kben megn\u00f6vekszik a h\u00e1l\u00f3zati \u00e9s lemez terhel\u00e9s. Azonban a k\u00e9s\u0151bbiekben az adatokhoz val\u00f3 hozz\u00e1f\u00e9r\u00e9s jelent\u0151sen felgyorsul. Ezenk\u00edv\u00fcl a major_compaction egyes\u00edti az \u00f6sszes HFiles-t egy f\u00e1jlba a r\u00e9gi\u00f3 keretein bel\u00fcl, \u00e9s t\u00f6rli az adatokat a t\u00e1bl\u00e1zat be\u00e1ll\u00edt\u00e1sait\u00f3l f\u00fcgg\u0151en. P\u00e9ld\u00e1ul megadhat\u00f3 az objektumok verzi\u00f3inak sz\u00e1ma, amelyet meg kell \u0151rizni, vagy az eltarthat\u00f3s\u00e1gi id\u0151, amely ut\u00e1n az objektum fizikailag elt\u00e1vol\u00edt\u00e1sra ker\u00fcl.<\/p>\n<p>Ez a folyamat nagyon pozit\u00edv hat\u00e1ssal lehet az HBase m\u0171k\u00f6d\u00e9s\u00e9re. Az al\u00e1bbi k\u00e9pen l\u00e1that\u00f3, hogyan cs\u00f6kkent a teljes\u00edtm\u00e9ny az akt\u00edv adat\u00edr\u00e1s eredm\u00e9nyek\u00e9nt. L\u00e1that\u00f3, hogy egy t\u00e1bl\u00e1zatba 40 sz\u00e1l \u00edrt \u00e9s 40 sz\u00e1l egyidej\u0171leg olvasott adatokat. Az \u00edr\u00f3 sz\u00e1lak egyre t\u00f6bb HFiles-t k\u00e9peztek, amelyeket a m\u00e1sik sz\u00e1l olvasott. Ennek eredm\u00e9nyek\u00e9ppen egyre t\u00f6bb adatot kellett elt\u00e1vol\u00edtani a mem\u00f3ri\u00e1b\u00f3l, \u00e9s v\u00e9g\u00fcl elindult a GC, amely szinte megb\u00e9n\u00edtotta az eg\u00e9sz m\u0171k\u00f6d\u00e9st. A major compaction elind\u00edt\u00e1sa a felhalmoz\u00f3d\u00e1sok megtiszt\u00edt\u00e1s\u00e1hoz \u00e9s a teljes\u00edtm\u00e9ny helyre\u00e1ll\u00edt\u00e1s\u00e1hoz vezetett.<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/6c93b2c10c197663785d3de0bb185481.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA teszt h\u00e1rom DataNode-on \u00e9s n\u00e9gy RS-en futott (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 sz\u00e1l). HBase verzi\u00f3: 1.2.0-cdh5.14.2<\/p>\n<p>Fontos megjegyezni, hogy a major compaction egy \"\u00e9letben l\u00e9v\u0151\" t\u00e1bl\u00e1n hajt\u00f3dott v\u00e9gre, amelybe akt\u00edvan \u00edrtak \u00e9s olvastak adatokat. Az interneten olyan \u00e1ll\u00edt\u00e1sok fogalmaz\u00f3dtak meg, hogy ez helytelen v\u00e1laszokat eredm\u00e9nyezhet az adatok olvas\u00e1sakor. A probl\u00e9ma ellen\u0151rz\u00e9s\u00e9re egy folyamatot ind\u00edtottunk, amely \u00faj adatokat gener\u00e1lt \u00e9s \u00edrt a t\u00e1bl\u00e1ba. Ezt k\u00f6vet\u0151en azonnal olvasta \u00e9s ellen\u0151rizte, hogy a kapott \u00e9rt\u00e9k megegyezik-e azzal, ami be volt \u00edrva. Ennek a folyamatnak a m\u0171k\u00f6d\u00e9se alatt k\u00f6r\u00fclbel\u00fcl 200 alkalommal hajtottak v\u00e9gre major compaction-t, \u00e9s egyetlen hiba sem t\u00f6rt\u00e9nt. Lehets\u00e9ges, hogy a probl\u00e9ma ritk\u00e1n l\u00e9p fel, csak magas terhel\u00e9s eset\u00e9n, ez\u00e9rt biztons\u00e1gosabb lenne a \u00edr\u00e1si \u00e9s olvas\u00e1si folyamatokat tervezetten le\u00e1ll\u00edtani, \u00e9s tiszt\u00edt\u00e1st v\u00e9gezni, elker\u00fclve a GC ilyen m\u00e9lyrep\u00fcl\u00e9seit.<\/p>\n<p>A major compaction szint\u00e9n nem befoly\u00e1solja a MemStore \u00e1llapot\u00e1t, annak lemezre \u00edr\u00e1s\u00e1hoz \u00e9s t\u00f6m\u00f6r\u00edt\u00e9s\u00e9hez flush-t kell haszn\u00e1lni (connection.getAdmin().flush(TableName.valueOf(tblName))).<\/p>\n<h2>8. Be\u00e1ll\u00edt\u00e1sok \u00e9s teljes\u00edtm\u00e9ny<\/h2>\n<p>\nAhogy m\u00e1r eml\u00edtett\u00fck, az HBase legnagyobb sikert akkor \u00e9ri el, amikor nincs sz\u00fcks\u00e9ge semmire, ha BulkLoad-ot hajt v\u00e9gre. Ez azonban a legt\u00f6bb rendszerre \u00e9s emberre is igaz. Azonban ez az eszk\u00f6z ink\u00e1bb a t\u00f6meges adatok nagy blokkokban t\u00f6rt\u00e9n\u0151 elhelyez\u00e9s\u00e9re alkalmas, m\u00edg ha a folyamat verseng\u0151 olvas\u00e1si \u00e9s \u00edr\u00e1si k\u00e9r\u00e9sek sokas\u00e1g\u00e1t ig\u00e9nyli, az el\u0151z\u0151leg eml\u00edtett Get \u00e9s Put parancsokat haszn\u00e1lj\u00e1k. Az optim\u00e1lis param\u00e9terek meghat\u00e1roz\u00e1s\u00e1ra k\u00fcl\u00f6nf\u00e9le t\u00e1bl\u00e1zati param\u00e9terek \u00e9s be\u00e1ll\u00edt\u00e1skombin\u00e1ci\u00f3k mellett hajtottunk v\u00e9gre teszteket:<\/p>\n<ul>\n<li>10 sz\u00e1lat ind\u00edtottunk p\u00e1rhuzamosan 3 alkalommal (nevezz\u00fck ezt egy sz\u00e1lblokknak). <\/li>\n<li>A blokk \u00f6sszes sz\u00e1l\u00e1nak fut\u00e1si idej\u00e9t \u00e1tlagoltuk, \u00e9s ez lett a blokk eredm\u00e9nye.<\/li>\n<li>Minden sz\u00e1l ugyanazzal a t\u00e1bl\u00e1val dolgozott. <\/li>\n<li>Minden sz\u00e1lblokk ind\u00edt\u00e1sa el\u0151tt major compaction v\u00e9grehajt\u00e1sra ker\u00fclt.<\/li>\n<li>Minden blokk csak az al\u00e1bbi m\u0171veletek k\u00f6z\u00fcl egyet hajtott v\u00e9gre: <\/li>\n<\/ul>\n<p>\n \u2014 Put<br \/>\n \u2014 Get<br \/>\n \u2014 Get+Put<\/p>\n<ul>\n<li>Minden blokk 50 000 ism\u00e9tl\u00e9st hajtott v\u00e9gre a saj\u00e1t m\u0171velet\u00e9b\u0151l.<\/li>\n<li>A blokkban l\u00e9v\u0151 rekord m\u00e9rete 100 b\u00e1jt, 1000 b\u00e1jt vagy 10000 b\u00e1jt (v\u00e9letlenszer\u0171).<\/li>\n<li>A blokkok k\u00fcl\u00f6nb\u00f6z\u0151 sz\u00e1m\u00fa k\u00e9rt kulccsal indultak (vagy egy kulcs, vagy 10).<\/li>\n<li>A blokkok k\u00fcl\u00f6nb\u00f6z\u0151 t\u00e1bl\u00e1zati be\u00e1ll\u00edt\u00e1sok mellett indultak. A k\u00f6vetkez\u0151 param\u00e9terek v\u00e1ltoztak:<\/li>\n<\/ul>\n<p>\n \u2014 BlockCache = be vagy ki volt kapcsolva<br \/>\n \u2014 BlockSize = 65 KB vagy 16 KB<br \/>\n \u2014 Part\u00edci\u00f3k = 1, 5 vagy 30<br \/>\n \u2014 MSLAB = be vagy ki volt kapcsolva<\/p>\n<p>\u00cdgy n\u00e9z ki a blokk:<\/p>\n<p>a. A MSLAB m\u00f3d be vagy ki volt kapcsolva.<br \/>\nb. K\u00e9sz\u00edtett\u00fcnk egy t\u00e1bl\u00e1zatot, amelyhez a k\u00f6vetkez\u0151 param\u00e9terek lettek be\u00e1ll\u00edtva: BlockCache = true\/nincs, BlockSize = 65\/16 Kb, Part\u00edci\u00f3k = 1\/5\/30. <br \/>\nc. A GZ t\u00f6mszelv\u00e9ny lett be\u00e1ll\u00edtva.<br \/>\nd. 10 p\u00e1rhuzamos sz\u00e1lat ind\u00edtottunk, amelyek egyszerre v\u00e9geztek 1\/10 put\/get\/get+put m\u0171veleteket a t\u00e1bl\u00e1zatban 100\/1000\/10000 byte rekordokkal, \u00f6sszesen 50 000 k\u00e9r\u00e9s v\u00e9grehajt\u00e1s\u00e1val (a kulcsok v\u00e9letlenszer\u0171ek voltak).<br \/>\ne. A d. pontot h\u00e1romszor megism\u00e9telt\u00fck.<br \/>\nf. Az \u00f6sszes sz\u00e1l fut\u00e1s\u00e1nak idej\u00e9t \u00e1tlagoltuk. <\/p>\n<p>Minden lehets\u00e9ges kombin\u00e1ci\u00f3t ellen\u0151rizt\u00fcnk. Logikus, hogy a rekord m\u00e9ret\u00e9nek n\u00f6vel\u00e9s\u00e9vel a sebess\u00e9g cs\u00f6kken, vagy hogy a cache kikapcsol\u00e1sa lelass\u00edt. Azonban a c\u00e9l az volt, hogy meg\u00e9rts\u00fck minden param\u00e9ter hat\u00e1s\u00e1nak m\u00e9rt\u00e9k\u00e9t \u00e9s jelent\u0151s\u00e9g\u00e9t, ez\u00e9rt a begy\u0171jt\u00f6tt adatokat line\u00e1ris regresszi\u00f3s f\u00fcggv\u00e9nynek adtuk \u00e1t, amely lehet\u0151v\u00e9 teszi a megb\u00edzhat\u00f3s\u00e1g \u00e9rt\u00e9kel\u00e9s\u00e9t t-statisztik\u00e1val. Az al\u00e1bbiakban l\u00e1that\u00f3k a Put m\u0171veleteket v\u00e9grehajt\u00f3 blokkok eredm\u00e9nyei. A teljes kombin\u00e1ci\u00f3s k\u00e9szlet 2*2*3*2*3 = 144 v\u00e1ltozat + 72, mivel egyesek k\u00e9tszer lettek v\u00e9grehajtva. Teh\u00e1t \u00f6sszesen 216 futtat\u00e1s:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/7a13c7a9b3ff1859976800f5d45cd51b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA tesztel\u00e9s egy 3 DataNode-b\u00f3l \u00e9s 4 RS-b\u0151l \u00e1ll\u00f3 mini klaszteren zajlott (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 sz\u00e1l). Az HBase verzi\u00f3ja 1.2.0-cdh5.14.2.<\/p>\n<p>A legmagasabb besz\u00far\u00e1si sebess\u00e9get, 3.7 m\u00e1sodpercet, akkor \u00e9rt\u00fck el, amikor az MSLAB m\u00f3dban kikapcsoltuk, egy egypart\u00edci\u00f3s t\u00e1bl\u00e1zaton, beaktiv\u00e1lt BlockCache-sel, BlockSize = 16-tal, 100 byte-os rekordokkal, 10 darab egy csomagban.<br \/>\nA legalacsonyabb besz\u00far\u00e1si sebess\u00e9get, 82.8 m\u00e1sodpercet, akkor \u00e9rt\u00fck el, amikor az MSLAB m\u00f3dban beaktiv\u00e1ltuk, egy egypart\u00edci\u00f3s t\u00e1bl\u00e1zaton, beaktiv\u00e1lt BlockCache-sel, BlockSize = 16-tal, 10 000 byte-os rekordokkal, 1 darab egy csomagban.<\/p>\n<p>Most n\u00e9zz\u00fck meg a modellt. J\u00f3l l\u00e1that\u00f3, hogy a modell R2 alapj\u00e1n j\u00f3 min\u0151s\u00e9g\u0171, de vil\u00e1gosan \u00e9rhet\u0151, hogy az extrapol\u00e1ci\u00f3 itt tilos. A rendszer val\u00f3di viselked\u00e9se a param\u00e9terek megv\u00e1ltoztat\u00e1sakor nem line\u00e1ris lesz, ez a modell nem el\u0151rejelz\u00e9sre, hanem a meg\u00e9rt\u00e9sre sz\u00fcks\u00e9ges, hogy mi t\u00f6rt\u00e9nt a megadott param\u00e9terek keretein bel\u00fcl. P\u00e9ld\u00e1ul itt l\u00e1thatjuk a t-\u00e9rt\u00e9k szerint, hogy a Put m\u0171veletn\u00e9l a BlockSize \u00e9s a BlockCache param\u00e9tereknek nincs jelent\u0151s\u00e9ge (ami alapvet\u0151en teljesen logikus):<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/2fb65d1809d53f2b47f4f8829a9efc65.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNem kicsit meglep\u0151, hogy a part\u00edci\u00f3k sz\u00e1m\u00e1nak n\u00f6vel\u00e9se cs\u00f6kkenti a teljes\u00edtm\u00e9nyt (m\u00e1r l\u00e1ttuk a part\u00edci\u00f3k sz\u00e1m\u00e1nak n\u00f6vel\u00e9s\u00e9nek pozit\u00edv hat\u00e1s\u00e1t a BulkLoad eset\u00e9n), noha ez \u00e9rthet\u0151. El\u0151sz\u00f6r is, a feldolgoz\u00e1s sor\u00e1n 30 r\u00e9gi\u00f3ra kell k\u00e9rd\u00e9seket megfogalmazni egy helyett, \u00e9s az adatmennyis\u00e9g nem olyan nagy, hogy el\u0151nyt jelentsen. M\u00e1sodszor, a teljes m\u0171k\u00f6d\u00e9si id\u0151t a leglassabb RS hat\u00e1rozza meg, \u00e9s mivel a DataNode-ok sz\u00e1ma kevesebb, mint az RS-ek\u00e9, n\u00e9h\u00e1ny r\u00e9gi\u00f3 null\u00e1s lok\u00e1lis\u00e1ggal b\u00edr. N\u00e9zz\u00fck meg az \u00e9llovas \u00f6t\u00f6st:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/8ad7e832879156eaa96e630458405cdc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMost \u00e9rt\u00e9kelj\u00fck a Get blokkok v\u00e9grehajt\u00e1s\u00e1nak eredm\u00e9nyeit:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/8a5dd45422c74e8815011d7e9b805ccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA part\u00edci\u00f3k sz\u00e1ma elvesztette jelent\u0151s\u00e9g\u00e9t, amit val\u00f3sz\u00edn\u0171leg az magyar\u00e1z, hogy az adatok j\u00f3l gyors\u00edt\u00f3t\u00e1rba ker\u00fclnek, \u00e9s a gyors\u00edt\u00f3t\u00e1r a legfontosabb (statisztikailag) param\u00e9ter olvas\u00e1skor. Nyilv\u00e1nval\u00f3, hogy a k\u00e9r\u00e9sben a visszajelz\u00e9sek sz\u00e1m\u00e1nak n\u00f6vel\u00e9se is nagyon hasznos a teljes\u00edtm\u00e9ny sz\u00e1m\u00e1ra. A legjobb eredm\u00e9nyek:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/9d237f9fdbeaf5412daec2fc2fa24b01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV\u00e9g\u00fcl n\u00e9zz\u00fck meg a blokk modellj\u00e9t, amely el\u0151sz\u00f6r get, majd put m\u0171veletet hajtott v\u00e9gre:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/75137207a4a69acccad036882794094b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nItt minden param\u00e9ter jelent\u0151s. Az \u00e9llovasok eredm\u00e9nyei:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/c166933d81e86f36958e3af58297f876.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>9. Terhel\u00e9ses tesztel\u00e9s<\/h2>\n<p>\nMost pedig ind\u00edtsunk el egy viszonylag norm\u00e1lis terhel\u00e9st, de mindig \u00e9rdekesebb, ha van mivel \u00f6sszehasonl\u00edtani. A DataStax weboldal\u00e1n \u2013 a Cassandra kulcsfejleszt\u0151je \u2013 tal\u00e1lhat\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.datastax.com\/wp-content\/themes\/datastax-2014-08\/files\/NoSQL_Benchmarks_EndPoint.pdf\">eredm\u00e9nyek<\/a><\/noindex> a NoSQL t\u00e1rol\u00f3k NHT sor\u00e1r\u00f3l, bele\u00e9rtve az HBase 0.98.6-1-es verzi\u00f3j\u00e1t. A bet\u00f6lt\u00e9s 40 sz\u00e1lon t\u00f6rt\u00e9nt, az adatok m\u00e9rete 100 b\u00e1jt, SSD meghajt\u00f3k. A Read-Modify-Write m\u0171veletek tesztel\u00e9s\u00e9nek eredm\u00e9nyei a k\u00f6vetkez\u0151k\u00e9ppen alakultak:<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/521e9dff60f462e6dabebc1234e028be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Amennyiben j\u00f3l \u00e9rtettem, az olvas\u00e1s 100 bejegyz\u00e9s blokkjain t\u00f6rt\u00e9nt, \u00e9s a 16 HBase csom\u00f3ponttal a DataStax teszt 10 ezer m\u0171veletet mutatott m\u00e1sodpercenk\u00e9nt. <\/p>\n<p>Szerencs\u00e9s, hogy a klaszter\u00fcnkben is 16 csom\u00f3pont van, de nem annyira \u201eszerencs\u00e9s\u201d, hogy mindegyiken 64 mag (sz\u00e1l) tal\u00e1lhat\u00f3, m\u00edg a DataStax tesztje sor\u00e1n csak 4. M\u00e1sr\u00e9szt n\u00e1luk SSD lemezek vannak, m\u00edg n\u00e1lunk HDD, \u00e9s a HBase egy \u00fajabb verzi\u00f3ja, valamint a CPU kihaszn\u00e1lts\u00e1ga a terhel\u00e9s alatt gyakorlatilag nem n\u0151tt jelent\u0151sen (vizu\u00e1lisan 5-10 sz\u00e1zal\u00e9kkal). Mindazon\u00e1ltal megpr\u00f3b\u00e1lunk elindulni ezzel a konfigur\u00e1ci\u00f3val. Az alapvet\u0151 t\u00e1bl\u00e1zati be\u00e1ll\u00edt\u00e1sok vannak \u00e9rv\u00e9nyben, az olvas\u00e1s v\u00e9letlenszer\u0171en t\u00f6rt\u00e9nik a 0-t\u00f3l 50 milli\u00f3 kulcs k\u00f6z\u00f6tti tartom\u00e1nyban (teh\u00e1t l\u00e9nyeg\u00e9ben minden alkalommal \u00faj). A t\u00e1bl\u00e1zatban 50 milli\u00f3 bejegyz\u00e9s tal\u00e1lhat\u00f3, 64 part\u00edci\u00f3ra felosztva. A kulcsok crc32 szerint hash-eltek. A t\u00e1bl\u00e1zati be\u00e1ll\u00edt\u00e1sok alap\u00e9rtelmezettek, MSLAB enged\u00e9lyezve van. 40 sz\u00e1l ind\u00edt\u00e1sa, mindegyik sz\u00e1l 100 v\u00e9letlenszer\u0171 kulcsot olvas be \u00e9s azonnal vissza\u00edr 100 byte-t az adott kulcsokhoz. <\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/776490f01121cc434135f733311b7722.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n \u00c1llv\u00e1ny: 16 DataNode \u00e9s 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 sz\u00e1l). HBase verzi\u00f3: 1.2.0-cdh5.14.2.<\/p>\n<p>Az \u00e1tlagos eredm\u00e9ny k\u00f6zelebb \u00e1ll a 40 ezer m\u0171velet\/sekundumhoz, ami l\u00e9nyegesen jobb, mint a DataStax tesztj\u00e9n\u00e9l. Azonban k\u00eds\u00e9rleti c\u00e9lokb\u00f3l \u00e9rdemes lenne n\u00e9h\u00e1ny felt\u00e9telt megv\u00e1ltoztatni. Igencsak val\u00f3sz\u00edn\u0171tlen, hogy az \u00f6sszes munka kiz\u00e1r\u00f3lag egy t\u00e1bl\u00e1zattal, illetve csak egyedi kulcsokkal fog zajlani. Tegy\u00fck fel, hogy van egy \u201eforr\u00f3\u201d kulcssorozat, amely gener\u00e1lja a f\u0151 terhel\u00e9st. Ez\u00e9rt pr\u00f3b\u00e1ljunk meg nagyobb bejegyz\u00e9sekkel (10 KB) terhel\u00e9st gener\u00e1lni, szint\u00e9n 100-as csomagokban, 4 k\u00fcl\u00f6nb\u00f6z\u0151 t\u00e1bl\u00e1zatban, mik\u00f6zben 50 ezer kulcsra korl\u00e1tozzuk a lek\u00e9rdez\u00e9si tartom\u00e1nyt. Az al\u00e1bbi grafikonon l\u00e1that\u00f3, hogy 40 sz\u00e1l indult, mindegyik sz\u00e1l 100 kulcsot olvas be \u00e9s azonnal vissza\u00edr v\u00e9letlenszer\u0171 10 KB-ot ezekre a kulcsokra. <\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/30d29f1b98663e3c07cb2be20e93876a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00c1llv\u00e1ny: 16 DataNode \u00e9s 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 sz\u00e1l). HBase verzi\u00f3: 1.2.0-cdh5.14.2.<\/p>\n<p>A terhel\u00e9s sor\u00e1n t\u00f6bbsz\u00f6r indult major compaction, ahogy fentebb eml\u00edtettem, ennek az elj\u00e1r\u00e1snak a hi\u00e1ny\u00e1ban a teljes\u00edtm\u00e9ny fokozatosan romlik, azonban v\u00e9grehajt\u00e1s k\u00f6zben is keletkezik tov\u00e1bbi terhel\u00e9s. Az es\u00e9sek k\u00fcl\u00f6nb\u00f6z\u0151 okokb\u00f3l ad\u00f3dnak. N\u00e9ha a sz\u00e1lak befejezt\u00e9k a munk\u00e1t \u00e9s am\u00edg \u00fajraindultak, sz\u00fcnet keletkezett, n\u00e9ha k\u00fcls\u0151 alkalmaz\u00e1sok gener\u00e1ltak terhel\u00e9st a klaszteren.<\/p>\n<p>Az olvas\u00e1s \u00e9s az azonnali \u00edr\u00e1s az egyik legnehezebb munkafolyamat az HBase sz\u00e1m\u00e1ra. Ha csak kis m\u00e9ret\u0171 put k\u00e9r\u00e9seket, p\u00e9ld\u00e1ul 100 byte-ot v\u00e9gez\u00fcnk, \u00e9s ezeket 10-50 ezer darabos k\u00f6tegekbe csoportos\u00edtjuk, akkor m\u00e1sodpercenk\u00e9nt t\u00f6bb sz\u00e1zezer m\u0171veletet \u00e9rhet\u00fcnk el, \u00e9s hasonl\u00f3an a csak olvas\u00e1si k\u00e9r\u00e9sek eset\u00e9ben is. \u00c9rdemes megjegyezni, hogy az eredm\u00e9nyek radik\u00e1lisan jobbak, mint amit a DataStax eset\u00e9ben tapasztaltak, legf\u0151k\u00e9ppen a 50 ezer darabos blokkokban v\u00e9gzett k\u00e9r\u00e9sek miatt.<\/p>\n<p><img decoding=\"async\" alt=\"Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata\" src=\"\/wp-content\/uploads\/2020\/01\/412bda50a55093224169f048ea2f863a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00c1llv\u00e1ny: 16 DataNode \u00e9s 16 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 sz\u00e1l). HBase verzi\u00f3: 1.2.0-cdh5.14.2.<\/p>\n<h2>10. K\u00f6vetkeztet\u00e9sek<\/h2>\n<p>\nEz a rendszer el\u00e9g rugalmasan konfigur\u00e1lhat\u00f3, azonban a sz\u00e1mos param\u00e9ter hat\u00e1sa m\u00e9g mindig ismeretlen. N\u00e9h\u00e1nyat teszteltek, de nem ker\u00fcltek be a v\u00e9gs\u0151 tesztk\u00e9szletbe. P\u00e9ld\u00e1ul az el\u0151zetes k\u00eds\u00e9rletek azt mutatt\u00e1k, hogy a DATA_BLOCK_ENCODING param\u00e9ter, amely a szomsz\u00e9dos cell\u00e1k \u00e9rt\u00e9keivel k\u00f3dolja az inform\u00e1ci\u00f3t, jelent\u00e9ktelen hat\u00e1ssal b\u00edr, ami \u00e9rthet\u0151 a v\u00e9letlenszer\u0171en gener\u00e1lt adatok eset\u00e9ben. Amennyiben sok ism\u00e9tl\u0151d\u0151 objektumot haszn\u00e1lunk, a nyeres\u00e9g jelent\u0151s lehet. \u00c1ltal\u00e1ban elmondhat\u00f3, hogy az HBase egy nagyon komoly \u00e9s \u00e1tgondolt adatb\u00e1zis-kezel\u0151 rendszert alak\u00edt ki, amely nagy adathalmazok kezel\u00e9sekor el\u00e9gg\u00e9 hat\u00e9kony lehet. K\u00fcl\u00f6n\u00f6sen, ha lehet\u0151s\u00e9g van az olvas\u00e1si \u00e9s \u00edr\u00e1si folyamatok id\u0151beli elk\u00fcl\u00f6n\u00edt\u00e9s\u00e9re.<\/p>\n<p>Ha valami szerinted nem el\u00e9gg\u00e9 van kifejtve, sz\u00edvesen besz\u00e9lek r\u00e9szletesebben. Javasoljuk, hogy osszuk meg tapasztalatainkat, vagy vitatkozzunk, ha nem \u00e9rt\u00fcnk egyet valamivel.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-16T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:24+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Az HBase haszn\u00e1lat\u00e1nak elm\u00e9lete \u00e9s gyakorlata | ProHoster","description":"J\u00f3 napot! A nevem Danil Lipovoy, csapatunk a Sbertehn\u00e9l elkezdte haszn\u00e1lni az HBase-t, mint operat\u00edv adatgy\u0171jt\u0151 t\u00e1rol\u00f3t.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-hbase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/55302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=55302"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/55302\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=55302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=55302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=55302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}