Theoria et praxis utendi HBase

Bona dies Nomen meum est Danil Lipovoy, turma nostra Sbertech incepit uti HBase ut repositionis notitiae operationis. In eo discendi cursu experientia coacervata est quae disponere et describere volui (ut multis usui fore speramus). Omnia experimenta infra facta sunt cum HBase versionibus 1.2.0-cdh5.14.2 et 2.0.0-cdh6.0.0-beta1.

  1. General architectura
  2. Scribens data ad HBASE
  3. Lectio notitia ex HBASE
  4. Data caching
  5. Batch MGE MultiGet MGE / MultiPut
  6. Strategy ad mensas in regiones scindendo (scissione)
  7. Culpa tolerantia, compactificatio et notitia loci
  8. Occasus ac perficiendi
  9. Suspendisse Testis
  10. Inventiones

1. Generalis architectura

Theoria et praxis utendi HBase
Magister tergum cordis pulsationem activum in nodo ZooKeeper audit et, in casu ablatione, functiones magistri occupat.

2. Write data ad HBASE

Primum inspiciamus causam simplicissimam - scribens obiectum clavem-pretium ad mensam utens (rowkey). Cliens primum investigare debet ubi Radix Regionis Servo (RRS), quae mensam hbase:metam reponit, sita est. Haec ab ZooKeeper accipit. Post quem RRS accesserit et tabulam hbase:metam legit, e qua informationes extrahit de qua Regionis Server (RS) responsabilis est pro data reponenda pro certo remigandi in tabula usoris. Ad futurum usum, mensa meta a client condivisa est et ideo sequens vocat citius, directe ad RS.

Deinde RS, rogatu accepta, primum omnium scribit ad WriteAheadLog (WAL), quod necessarium est ad recuperationem in casu ruinae. Inde data ad MemStore servat. Hoc quiddam in memoria est quod clavium pro regione data ordinatum continet. Mensa in regiones dividi potest, quarum unaquaeque clavium disiunctionem continet. Hoc permittit ut regiones in diversis servientibus collocaas ad altiora perficienda perficienda. Sed, non obstante evidentia huius propositionis, postea videbimus hoc in omnibus non operari.

Post ingressum in MemStore posito, responsio redditur clienti ingressum esse feliciter servatum. Attamen reipsa tantum in quiddam reponitur et in disco solum post certum tempus elapsum vel cum notitia notitia impletur.

Theoria et praxis utendi HBase
Cum operationem "Delere" faciendo, notitia physice deleta non est. Simpliciter notata sunt ut deleta, et ipsa destructio occurrit in momento vocationis functionis maioris pacti, quod in articulo 7 fusius describitur.

Tabulae in HFile formato in HDFS coacervatae sunt et subinde processio pacti minoris emissa est, quae simpliciter parvas fasciculos in maiores sine ulla deletione mergit. Subinde hoc in problema vertit quod solum cum notitia lectionis apparet (ad hoc paulo post revertemur).

Praeter processum oneratum de quo supra dictum est, ratio longe efficacior est, quae fortasse firmissima huius database - BulkLoad est. In eo est, quod HFiles independenter formamus et eas in disco induit, quod nos perfecte scandere et celeritates honestissimas consequi sinit. Nam limitatio hic non HBase, sed elit odio. Infra sunt proventus tabernus in botro constans ex 16 Regione Servorum et 16 NodeManager YARN (CPU Xeon E5-2680 v4 @2.40GHz * 64 stamina), HBase versio 1.2.0-cdh5.14.2.

Theoria et praxis utendi HBase

Hic videre potes augendo numerum partitionum (regionum) in tabula, necnon executorum scintillarum, incremento celeritatis cinematographicae. Item, celeritas in memoria voluminis dependet. Magnae caudices in MB/sec auctum dant, caudices parvi in ​​numero monumentorum insertorum per unitatem temporis, ceteris omnibus paribus.

Etiam in duas tabulas simul onerandas incipere et celeritatem duplicare potes. Infra videre potes quod scriptura 10 KB ad duas tabulas stipites statim occurrat in velocitate circiter 600 MB/sec in singulis (totalis 1275 MB/sec), quae cum celeritate scribendi ad unam tabulam 623 MB/sec coincidit (videatur. supra No. XI)

Theoria et praxis utendi HBase
Secundus autem cursus cum monumentis 50 KB ostendit celeritatem download leviter crescere, quod indicat limitem appropinquare. Eodem tempore meminisse debes nullum fere onus in ipso HBASE creato esse, omne id quod ab eo requiritur, ut primum data ab hbase: meta, et post HFiles enascentia, notitias BlockCache reset et salvare. MemStore quiddam disco, si vacuum non est.

3. Lectio notitia ex HBASE

Si clientem iam omnia informationes ex hbase:meta (vide punctum 2) ponimus, petitio directe accedit ad RS ubi clavis requiritur reponitur. Primum, quaestio in MemCache peragitur. Nihilne interest utrum illic data sit necne, percontatio etiam exercetur in quiddam BlockCache et, si opus est, in HFiles. Si notitia in tabella inventa est, in BlockCache reposita est et celerius proxima postulatione reddetur. Investigatio in HFile relative velociter est usui Flosculi colum, i.e. cum parva notitiarum copia perlecta, statim decernit an haec fasciculus contineat clavem debitam et an non, moveatur ad sequentem.

Theoria et praxis utendi HBase
Accepta ex his tribus fontibus RS responsionem generat. Praesertim, si client versiones postulavit plures versiones inventas rei statim transferre potest.

4. Data caching

MemStore et BlockCache buffers occupant usque ad 80% of aggeris RS memoriae (reliqua conservata officiorum RS). Si modus usus typicus talis est ut processus scribat et statim eadem notitia legatur, tunc sensus efficit BlockCache reducere et MemStore augere, quia Cum notitias scribens in cella legendi non attingit, BlockCache rarius adhibebitur. BlockCache quiddam constat duabus partibus: LruBlockCache (semper acervum) et BucketCache (plerumque acervum vel in SSD). BucketCache utendum est cum multae petitiones legendi sunt et in LruBlockCache non conveniunt, quod ad operandum Purgamentum Collector ducit. Simul, non debes exspectare incrementum in effectu ab utendo cache legeres, sed ad hoc in paragrapho 8 revertemur.

Theoria et praxis utendi HBase
Unus BlockCache pro tota RS, unus est MemStore pro qualibet mensa (una pro singulis Columnae Familiae).

How descriptus " in theoria cum scribens, data in cella non intrat, immo tales parametri CACHE_DATA_ON_WRITE pro mensa et "Cache DATA in Scribe" pro RS falsae sunt. Attamen in praxi, si MemStore datas scribimus, tum ruborem in disco (sic se purgando), lima consequens dele, deinde per petitionem impetrandi datam feliciter accipiemus. Praeterea, etiamsi BlockCache omnino disable et mensam novis notitiarum impleveris, tunc MemStore in disco repone, eas delere et ab alia sessione petas, tamen alicunde recuperabuntur. Ita HBase thesauris non solum data, sed etiam arcana mysteria.

hbase(main):001:0> create 'ns:magic', 'cf'
Created table ns:magic
Took 1.1533 seconds
hbase(main):002:0> put 'ns:magic', 'key1', 'cf:c', 'try_to_delete_me'
Took 0.2610 seconds
hbase(main):003:0> flush 'ns:magic'
Took 0.6161 seconds
hdfs dfs -mv /data/hbase/data/ns/magic/* /tmp/trash
hbase(main):002:0> get 'ns:magic', 'key1'
 cf:c      timestamp=1534440690218, value=try_to_delete_me

The "Cache DATA on Read" parameter pro falso ponitur. Si quid habes, gratissime in commenta discutere.

5. Batch MGE MultiGet MGE / MultiPut

Processus singularum petitionum (Get/Put/Delete) admodum pretiosa est operatio, ergo si fieri potest, eas in electronicam vel Indicem coniungere debes, quod tibi permittit ut boost insignis effectus sit. Hoc maxime valet ad scribendam operationem, sed cum lectio sequitur foveam. Aliquam lacinia purus infra ostendit tempus legendi 50 monumentorum ex MemStore. Lectio in uno filo fiebat et axis horizontalis numerus clavium instantiae ostendit. Hic videre potes quod cum mille clavium in una petitione crescant, tempus exsecutionis guttae, i.e. celeritas augetur. Attamen, cum MSLAB modus defaltam fecerit, post hoc limen gutta radicalis in executione incipit, et maior copia notitiarum in censu, eo diutius operans tempus.

Theoria et praxis utendi HBase

Testimenta facta sunt in machinae virtualis, 8 coros, versio HBase 2.0.0-cdh6.0.0-beta1.

Modus MSLAB designatus est ad redigendum ruptionem acervi, qui fit ex notitia generationis novae et veteris permixtionis. Ut habemus circum, cum MSLAB datur, notitia in cellulas relative parvas (chunks) collocatur et in chunkis discurrit. Quam ob rem, cum volumen in notitia fasciculi rogatae magnitudinem partita excedit, perficientur guttae aspere. Contra hunc modum declinare etiam non expedit, quia per momenta intensiva notitia processus GC ad cessandum ducet. Bona solutio est volumen cellulae augere in casu activae scripturae per viam simul ac lectionem. Notatu dignum est quaestionem non fieri si, post recordationem, iubes ruborem currere, quod MemStore ad disco reponit, vel si BulkLoad utendo oneris. Mensa infra ostendit queries de MemStore pro amplioribus (et tantundem) notitiis provenire in slowdowns. Sed augendo chunksize processui temporis ad normalem revertimus.

Theoria et praxis utendi HBase
Praeter ad augendam chunksize, notitias regionum adiuvat scindendo, i.e. mensam scindendi. Hoc in paucioribus evenit petitionibus ad singulas regiones venientibus et, si in cellam conveniunt, responsum bonum manet.

6. Strategy ad mensas in regiones scindendo (scissione)

Cum HBase sit amet adipiscing ac partitione per clavem exercetur, magni momenti est notitias per omnes regiones aequaliter dividere. Exempli gratia: partitionis talis tabulae in tres partes evenit ut notitia in tres regiones dividatur;

Theoria et praxis utendi HBase
Hoc fit ut tarditatem acutam ducat, si notitiae onustae postea similes apparent, exempli gratia, valores longi, plerique incipientes ab eadem digiti, exempli gratia:

1000001
1000002
...
1100003

Cum claves tamquam byte ordinatae repositae sint, idem omnes incipient et ad eandem regionem pertinentes # 1 hanc clavium amplitudinem recondunt. Plures insidijs partitiones sunt:

HexStringSplit – Clavem vertit in chorda hexadecimali encoded in ambitu "00000000" => "FFFFFFFF" et additamentum ad sinistram cum cyphris.

UniformSplit - Clavem vertit in byte ordinata cum hexadecimali descriptam in visibilis "00" => "FF" et additamentum in dextro cum cyphris.

Praeterea, quamlibet eminus vel claues designare potes ad scindendum et configurandum auto- scindendum. Una autem simplicissima et efficacissima accessus est UniformSplit et usus concatenationis Nullam, exempli gratia praestantissimum par bytes currit clavis per functionem CRC32 (rowkey) et ipsum remigium:

Nullam + rowkey

Tunc omnia data aequaliter per regiones distribuentur. Cum legeretur, duo prima bytes simpliciter abiecta sunt et clavis originalis manet. RS quoque quantitatem notitiarum et clavium in regione moderatur et, si limites exceduntur, ipso facto in partes frangit.

7. Culpa tolerantia ac data loco

Cum una tantum regio singulis clauibus respondeat, solutio quaestionum cum RS ruinis vel decommissionibus coniunctarum est omnia necessarias notitias in HDFS reponere. Cum RS cadit, dominus hoc per cordis pulsationem in nodi ZooKeeper detegit. Deinde regionem ministram alteri RS assignat et cum in systematis fasciculi HFiles repositae sunt, novus dominus eas legit et notitias ministrare pergit. Cum tamen aliqua notitiarum in MemStore sit nec tempus ingrediendi HFiles, WAL, quod etiam in HDFS repositum est, historia operationum restituere solebat. Post mutationes applicatae, RS respondere petitionibus potest, sed motus inducit ad hoc quod aliquae notitiae et processuum operandi in diversis nodis terminantur, i.e. locus decrescentes.

Solutio problematis compaction maior est - haec ratio limas nodi movet his nodi qui praesunt illis (ubi regiones sunt locatae), ex quibus onus in retis et orbis in hoc processu acrius augetur. Attamen in posterum notabiliter acceleratur accessus ad notitias. Praeterea, major_compactio omnium HFilium in unum fasciculum intra regionem secessionem facit, et etiam notitias secundum mensam uncinis expurgat. Exempli gratia, numerus versionum rei retinendae vel vita, postquam res corpore deleta est.

Haec processus multum positivum effectum habere potest in operatione HBase. Tabula infra ostendit quomodo effectus degradetur ex actuosa notitia recordationis. Hic videre potes quomodo 40 stamina ad unam tabulam scripserint et 40 fila simul data legat. Stamina scribentes magis ac magis HFilia generant, quae ab aliis stamina leguntur. Quam ob rem magis magisque notitiae a memoria removendae sunt ac tandem operae GC incipit, quae omne opus paene torpescit. Maioris compactionis launched ad purgandas obstantia et fructus restitutionem inde perduxit.

Theoria et praxis utendi HBase
Expertus fiebat in 3 DataNodes et 4 RS (CPU Xeon E5-2680 v4 @2.40GHz * 64 stamina). HBase version 1.2.0-cdh5.14.2

Notatu dignum est maiorem compactionem in mensam "vivam" deductam esse, in quam notitia actuose scripta et legebatur. Dictum est online quod hoc posset ducere ad responsionem falsam cum notitia legendi. Ad reprimendam processum immissum est, qui novas notitias generavit et ad mensam scripsit. Post quod statim legi et deprimi, num inde valoris inscriptus sit. Dum hic processus currit, compactio maior circiter 200 vicibus discurrit et nulla defectio notata est. Fortasse quaestio raro et solum in alto onere apparet, tutius est igitur processuum scripturae et lectionis obsistere, ut institutum et purgatio facienda est, ne huiusmodi GC deprimantur.

Maior etiam compactio statum MemStoris non afficit, ut ruborem illum ad disci et compingat, necesse est uti ruborem (connexionem.getAdmin().flush(TableName.valueOf(tblName))).

8. Occasus ac perficiendi

HBase, ut iam dictum est, maximam felicitatem ostendit, ubi nihil opus est facere, cum BulkLoad exequatur. Sed hoc maxime pertinet ad disciplinas et homines. Nihilominus hoc instrumentum aptius est ad accommodandas notitias in mole in magnis caudices, at si processus plures requirat petitiones legere et scribere certando, imperata quae supra scripta sunt Get et Put. Ad meliorem parametri statuendam, launches cum variis compositionibus parametri et uncinis mensarum fiebant;

  • 10 stamina simul 3 vicibus in versu deductae sunt (hoc truncum vocamus stamina).
  • Tempus operativum omnium filorum in trunco ​​averaged erat et ultimus effectus operationis clausulae erat.
  • Omnia stamina eadem tabula exarata sunt.
  • Ante unumquodque initium scandali sequelae, maior compactio facta est.
  • Unusquisque scandalum faciebat tantum ex operationibus sequentibus;

-Put
-Get
-Get + Put

  • Unusquisque stipes 50 iterationes operationis suae faciebat.
  • Magnitudo monumenti obstructionum 100 bytes, 1000 bytes vel 10000 bytes (passim).
  • Caudices deductae sunt cum diversis numeris clavibus petitarum (vel una clavis vel 10).
  • Caudices currebant sub diversis uncinis mensae. Morbi laoreet bibendum est.

- BlockCache = conversus in vel off *
- BlockSize = 65 KB vel XVI KB
β€” Partitiones = 1, 5 vel 30
- MSLAB = enabled vel disabled

Sic truncus similis est:

a. MSLAB modus conversus est in / sunt.
b. Mensa creata est pro qua sequentes parametri positi sunt: ​​BlockCache = true/none, BlockSize = 65/16 Kb, Partitio = 1/5/30.
c. Compressio posita est GZ.
d. 10 stamina eodem tempore deductae sunt 1/10 put/get/get/actiones in hanc tabulam ponendo cum monumentis 100/1000/10000 bytes, faciendo 50 interrogationes in ordine (clavium temere).
e. Punctum d ter repetitum est.
f. Tempus operativum omnium staminum averaged erat.

Omnes compositiones fieri possunt probatae sunt. Praevidetur praevidere celeritatem decidere sicut magnitudo augetur record, vel quod inactivare caching tarditatem causat. Attamen propositum erat intellegendi gradum ac momentum influxus cuiusque parametri, sic notitia collecta in input munus regressionis linearis pascebatur, quae efficit ut significationem t-statisticorum aestimare sinat. Infra sunt eventus, caudices operationes Pone faciendo. Plena copia compositionum 2*2*3*2*3 = 144 optiones + 72 tk. quaedam bis facta sunt. Ergo sunt fugit in 216 summa;

Theoria et praxis utendi HBase
Testis e mini- botri constans ex 3 DataNodes et 4 RS (CPU Xeon E5-2680 v4 @2.40GHz* 64 stamina). HBase versio 1.2.0-cdh5.14.2.

Summam insertionis celeritas 3.7 secundis consecuta est cum MSLAB modo aversa, in mensa cum partitione una, facta BlockCache, BlockSize = 16, monumentis 100 bytes, 10 frusta per sarcinas.
Infima celeritas insertionis 82.8 sec consecuta est cum modulo MSLAB parato, in tabula una partitione, cum enabled BlockCache, BlockSize = 16, monumentorum 10000 bytes, 1 singulae.

Nunc exemplum videamus. Videmus bonam qualitatem exemplaris in R2 fundatam, sed clare patet extrapolationem hic contraindicare. Actualis ratio agendi cum parametri mutatione non linearis erit: hoc exemplum non ad praedictiones, sed ad intellegendum id quod intra ambitum positos acciderunt. Exempli gratia, hic videmus ex criterio studentium quod parametri BlockSize et BlockCache operationi Put (quod plerumque satis praedictio est) nihil refert;

Theoria et praxis utendi HBase
Quod vero augens numerum partitionum ad diminutionem perficiendi perducit, aliquantum inopinatum est (iam vidimus positivum ictum augere numerum partitionum cum BulkLoad), etsi comprehendi potest. Uno modo, ad expediendas, 30 regiones pro uno petitiones generare, et soliditas notitiarum non est talis, ut hoc lucri cedat. Secundo, totum tempus operans lentissimum RS determinatur, et cum numerus DataNodes sit minor quam numerus RSs, regiones aliquae nullum locum habent. Age, inspiciamus capita quinque;

Theoria et praxis utendi HBase
Nunc perpendamus eventus exsecutionis Get caudices:

Theoria et praxis utendi HBase
Numerus partitionum significationem amisit, quod probabiliter explicatur ex eo quod bene conditivo notitia et cella lecta est maxime notabile (statistically) parametrum. Naturaliter numerus epistularum in petitione augendus valde utilis est ad effectus. Top scores:

Theoria et praxis utendi HBase
Bene denique inspiciamus exemplar clausus, quod primum fecit, accipere et deinde positum;

Theoria et praxis utendi HBase
Omnes ambitus hic significantes sunt. Eventus et duces;

Theoria et praxis utendi HBase

9. Lond probatio

Bene, tandem plus minusve honestum onus mittemus, sed semper plus interesting est cum aliquid comparare habes. In website DataStax, amet elit Cassandrae est results NT plurium tabularum NoSQL, inter HBase versio 0.98.6-1. Loading facta est per 40 fila, amplitudo data 100 bytes, orbis SSD. Effectus probandi operationes Read-Modify-Write sequentes eventus ostendit.

Theoria et praxis utendi HBase
Quantum intelligo, lectio peracta est in cuneis centum tabularum et pro 100 nodi HBase, probatio DataStax per alterum per decem milia operationum ostendit.

Fortunatus est ut botrus noster etiam XVI nodos habeat, sed non valde "felix" quod quisque habet 16 coros (stamina), dum in testo DataStax tantum sunt 64. E contrario SSD agitet, dum HDDs habemus. vel magis nova versio HBase et CPU utensilium in onere fere signanter non augebat (visibiliter per 4-5 centesimas). Sed hac configuratione utendo incipiamus. Default mensae uncinis, lectio fit in clavibus ab 10 ad 0 decies passim (i.e., per se novum omni tempore). Mensa continet 50 decies centena milia, in 50 partitiones divisa. Claves hashed usura crc64. Tabulae occasus sunt default, MSLAB est potens. Deductis 32 stamina, singula fila ex 40 clausulis incertis legit et statim 100 bytes generatos ad has claves remittit.

Theoria et praxis utendi HBase
Sta: 16 DataNode et 16 RS (CPU Xeon E5-2680 v4 @2.40GHz *64 fila). HBase versio 1.2.0-cdh5.14.2.

Mediocris effectus propius ad quadraginta milia operationum secundorum, quae significanter melior est quam in test DataStax. Sed ad experimentalem proposita condiciones leviter mutare potes. Veri simile est omnia opera exerceri solum in una tabula, et solum in clavibus singularibus. Ponamus certam esse "calidum" clauium, quae summam onus gignit. Quapropter onus cum maioribus monumentis creare conemur (40 KB), etiam in batches 10, in 100 diversis tabulis et limitans teli petitarum clavium ad 4 milia. statuto 50 clavium et statim scribens temere 40 KB in his clavibus retro.

Theoria et praxis utendi HBase
Sta: 16 DataNode et 16 RS (CPU Xeon E5-2680 v4 @2.40GHz *64 fila). HBase versio 1.2.0-cdh5.14.2.

In onere maiore compactio pluries, ut supra ostensum est, sine hoc processu emissa est, perficientur paulatim degradatur, tamen addito onere etiam in executione oritur. Variis de causis causantur Drawdowns. Aliquando stamina confecta operando et mora facta est dum repressi erant, interdum tertia pars applicationes onus in botro creaverunt.

Lectio et statim scriptura inter missiones difficiliores operis est pro HBase. Si parvas modo petitiones ponis, exempli gratia 100 bytes, eas in sarcinas 10-50 milium nummorum colligens, centies centena milia operationum per secundam potes accipere, et condicio similis cum sola petitionibus legitur. Notatu dignum est eventus meliores esse penitus quam quos DataStax consecutus est, maxime ob petitiones in stipitibus quinquaginta milium.

Theoria et praxis utendi HBase
Sta: 16 DataNode et 16 RS (CPU Xeon E5-2680 v4 @2.40GHz *64 fila). HBase versio 1.2.0-cdh5.14.2.

10. Conclusiones

Haec ratio satis molliter configuratur, sed influxus parametri adhuc ignotus manet. Ex eis quaedam sunt probata, sed in testi indefinito non comprehensa sunt. Exempli gratia, experimenta praeliminantia parvam significationem demonstraverunt tam parametri quam DATA_BLOCK_ENCODING, qui informat informationes utens valores e cellulis vicinis, quod intellegi potest pro notitia passim generata. Si numerus rerum duplicatorum uteris, lucrum significans esse potest. In universum dicere possumus HBase impressionem datorum satis gravis et bene cogitatae datorum, quod satis fructuosum esse potest cum in magnis rerum notitiarum cautibus exercendis. Praesertim si fieri potest, ut tempus lectionis scripturaeque processum separare possit.

Si quid est quod tibi non satis pateat, paratus sum planius dicere. Te invitamus ut experientiam tuam communicemus vel discutias si cum aliquo dissentis.

Source: www.habr.com