Назария ва амалияи истифодаи HBase

Нимирӯзи ба хайр Номи ман Данил Липовой аст, дастаи мо дар Sbertech истифодаи HBase-ро ҳамчун нигаҳдории маълумоти амалиётӣ оғоз кард. Дар рафти омузиши он тачриба чамъ шуд, ки ман мехостам ба низом даровардан ва тавсиф намоям (умедворем, ки он барои бисёриҳо муфид хоҳад буд). Ҳама таҷрибаҳои дар поён овардашуда бо версияҳои HBase 1.2.0-cdh5.14.2 ва 2.0.0-cdh6.0.0-beta1 анҷом дода шуданд.

  1. Меъмории умумӣ
  2. Навиштани маълумот ба HBASE
  3. Хониши маълумот аз HBASE
  4. Кэшкунии маълумот
  5. Коркарди маълумотҳои партияи MultiGet/MultiPut
  6. Стратегияи тақсими ҷадвалҳо ба минтақаҳо (тақсимкунӣ)
  7. Таҳаммулпазирии хатогиҳо, компактизатсия ва ҷойгиршавии маълумот
  8. Танзимот ва иҷроиш
  9. Санҷиши стресс
  10. натиҷаҳои

1. Меъмории умумӣ

Назария ва амалияи истифодаи HBase
Устоди эҳтиётӣ тапиши дили фаъолро дар гиреҳи ZooKeeper гӯш мекунад ва дар ҳолати нопадид шудан, вазифаҳои устодро ба ӯҳда мегирад.

2. Маълумотро ба HBASE нависед

Аввалан, биёед оддитарин ҳолатро дида бароем - навиштани объекти арзиши калидӣ ба ҷадвал бо истифода аз put(rowkey). Мизоҷ аввал бояд бифаҳмад, ки сервери минтақавии решавӣ (RRS), ки ҷадвали hbase:meta -ро нигоҳ медорад, дар куҷо ҷойгир аст. Вай ин маълумотро аз ZooKeeper мегирад. Пас аз он, он ба RRS дастрасӣ пайдо мекунад ва ҷадвали hbase:meta-ро мехонад, ки аз он маълумотро дар бораи он, ки кадом RegionServer (RS) барои нигоҳ доштани маълумот барои сатри додашуда дар ҷадвали таваҷҷӯҳ масъул аст, истихроҷ мекунад. Барои истифодаи оянда, ҷадвали мета аз ҷониби муштарӣ кэш карда мешавад ва аз ин рӯ зангҳои минбаъда мустақиман ба RS зудтар мераванд.

Баъдан, RS дархостро гирифта, пеш аз ҳама онро ба WriteAheadLog (WAL) менависад, ки барои барқароршавӣ дар ҳолати садама зарур аст. Сипас маълумотро дар MemStore захира мекунад. Ин буфер дар хотира аст, ки маҷмӯи мураттабшудаи калидҳоро барои минтақаи додашуда дар бар мегирад. Ҷадвалро ба минтақаҳо (қисмҳо) тақсим кардан мумкин аст, ки ҳар яки онҳо маҷмӯи ҷудогонаи калидҳоро дар бар мегиранд. Ин ба шумо имкон медиҳад, ки минтақаҳоро дар серверҳои гуногун ҷойгир кунед, то иҷрои баландтарро ба даст оред. Аммо, сарфи назар аз маълум будани ин изҳорот, мо баъдтар хоҳем дид, ки ин на дар ҳама ҳолатҳо кор мекунад.

Пас аз ҷойгир кардани сабт дар MemStore, ба муштарӣ посухе бармегардад, ки сабт бомуваффақият захира шудааст. Аммо, дар асл он танҳо дар буфер нигоҳ дошта мешавад ва танҳо пас аз гузаштани вақти муайян ё бо маълумоти нав пур кардани он ба диск меояд.

Назария ва амалияи истифодаи HBase
Ҳангоми иҷрои амалиёти "Нест кардан" маълумот аз ҷиҳати ҷисмонӣ нест карда намешавад. Онҳо танҳо ҳамчун ҳазфшуда қайд карда мешаванд ва худи нобудшавӣ дар лаҳзаи даъват кардани функсияи асосии паймоне, ки дар банди 7 муфассалтар тасвир шудааст, рух медиҳад.

Файлҳо дар формати HFile дар HDFS ҷамъ мешаванд ва гоҳ-гоҳ раванди хурди паймон оғоз мешавад, ки он танҳо файлҳои хурдро ба файлҳои калонтар бидуни нест кардани чизе муттаҳид мекунад. Бо гузашти вақт, ин ба мушкилоте табдил меёбад, ки танҳо ҳангоми хондани маълумот пайдо мешавад (мо ба ин каме дертар бармегардем).

Илова ба раванди боркунии дар боло тавсифшуда, як тартиби хеле муассиртар вуҷуд дорад, ки шояд қавитарин паҳлӯи ин пойгоҳи додаҳо - BulkLoad бошад. Ин дар он аст, ки мо мустақилона HFiles-ро ташкил мекунем ва онҳоро ба диск мегузорем, ки ба мо имкон медиҳад, ки миқёси комил ва ба суръати хеле мувофиқ ноил гардем. Дар асл, маҳдудият дар ин ҷо HBase нест, балки имкониятҳои сахтафзор аст. Дар зер натиҷаҳои пурборкунӣ дар кластер иборатанд аз 16 RegionServers ва 16 NodeManager YARN (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ришта), версияи HBase 1.2.0-cdh5.14.2.

Назария ва амалияи истифодаи HBase

Дар ин ҷо шумо мебинед, ки бо зиёд кардани шумораи қисмҳо (минтақаҳо) дар ҷадвал, инчунин иҷрокунандагони Spark, мо суръати зеркашӣро афзоиш медиҳем. Инчунин, суръат аз ҳаҷми сабт вобаста аст. Блокҳои калон афзоиши МБ/сек, блокҳои хурд дар шумораи сабтҳои воридшуда дар як воҳиди вақт, ҳама чизҳои дигар баробаранд.

Шумо инчунин метавонед дар як вақт ба ду ҷадвал бор карданро оғоз кунед ва суръатро дучанд кунед. Дар зер шумо мебинед, ки навиштани блокҳои 10 КБ якбора ба ду ҷадвал бо суръати тақрибан 600 МБ/с дар ҳар кадоми онҳо (ҷамъ 1275 МБ/сония) сурат мегирад, ки бо суръати навиштан ба як ҷадвал 623 МБ/сония рост меояд (ниг. № 11 дар боло)

Назария ва амалияи истифодаи HBase
Аммо даври дуввум бо сабтҳои 50 KB нишон медиҳад, ки суръати зеркашӣ каме афзоиш меёбад, ки ин нишон медиҳад, ки он ба арзишҳои маҳдуд наздик мешавад. Дар айни замон, шумо бояд дар хотир дошта бошед, ки дар худи HBASE амалан ягон сарборӣ эҷод нашудааст, танҳо аз он талаб карда мешавад, ки аввал маълумот аз hbase:meta дода шавад ва пас аз пӯшонидани HFiles, маълумоти BlockCache-ро аз нав танзим кунед ва захира кунед. Буфери MemStore ба диск, агар он холӣ набошад.

3. Хониши маълумот аз HBASE

Агар фарз кунем, ки муштарӣ аллакай ҳама маълумотро аз hbase:meta дорад (ниг. банди 2), он гоҳ дархост мустақиман ба RS меравад, ки дар он калиди зарурӣ нигоҳ дошта мешавад. Аввалан, ҷустуҷӯ дар MemCache анҷом дода мешавад. Новобаста аз он ки дар он ҷо маълумот мавҷуд аст ё не, ҷустуҷӯ инчунин дар буфери BlockCache ва дар ҳолати зарурӣ дар HFiles анҷом дода мешавад. Агар маълумот дар файл пайдо шуда бошад, он дар BlockCache ҷойгир карда мешавад ва дар дархости навбатӣ зудтар баргардонида мешавад. Ҷустуҷӯ дар HFile ба шарофати истифодаи филтри Bloom нисбатан зуд аст, яъне. миқдори ками маълумотро хонда, дарҳол муайян мекунад, ки оё ин файл калиди лозимиро дар бар мегирад ва агар не, ба дигараш мегузарад.

Назария ва амалияи истифодаи HBase
Бо гирифтани маълумот аз ин се манбаъ, RS посух медиҳад. Аз ҷумла, он метавонад якбора якчанд версияҳои пайдошудаи объектро интиқол диҳад, агар муштарӣ версияро дархост кунад.

4. Кэшкунии маълумот

Буферҳои MemStore ва BlockCache то 80% хотираи ҷудошудаи RS-ро ишғол мекунанд (қисми боқимонда барои вазифаҳои хидматрасонии RS маҳфуз аст). Агар режими маъмулии истифода чунин бошад, ки равандҳо ҳамон як маълумотро менависанд ва фавран мехонанд, пас кам кардани BlockCache ва зиёд кардани MemStore маъно дорад, зеро Вақте ки навиштани маълумот ба кэш барои хондан дохил намешавад, BlockCache камтар истифода мешавад. Буфери BlockCache аз ду қисм иборат аст: LruBlockCache (ҳамеша дар болои теппа) ва BucketCache (одатан берун аз тӯда ё дар SSD). BucketCache бояд ҳангоми зиёд будани дархостҳои хониш истифода шавад ва онҳо ба LruBlockCache мувофиқат накунанд, ки ин боиси кори фаъоли Ҷамъоварии партов мегардад. Дар айни замон, шумо набояд аз истифодаи кэши хондан афзоиши куллани корҳоро интизор шавед, аммо мо ба ин дар банди 8 бармегардем.

Назария ва амалияи истифодаи HBase
Барои тамоми RS як BlockCache мавҷуд аст ва барои ҳар як ҷадвал як MemStore мавҷуд аст (якто барои ҳар як оилаи сутун).

чи тавр тавсиф карда шудааст Дар назария, ҳангоми навиштан маълумот ба кэш намедарояд ва воқеан, чунин параметрҳои CACHE_DATA_ON_WRITE барои ҷадвал ва "Кэши МАЪЛУМОТ дар навиштан" барои RS нодуруст муқаррар карда мешаванд. Аммо, дар амал, агар мо маълумотро ба MemStore нависем, пас онро ба диск тоза кунем (бо ҳамин тариқ онро тоза кунем), пас файли ҳосилшударо нест кунем, пас бо иҷрои дархости get мо маълумотро бомуваффақият қабул мекунем. Ғайр аз он, ҳатто агар шумо BlockCache-ро комилан ғайрифаъол кунед ва ҷадвалро бо маълумоти нав пур кунед, пас MemStore-ро ба диск барқарор кунед, онҳоро нест кунед ва аз сессияи дигар дархост кунед, онҳо ба ҳар ҳол аз ҷое гирифта мешаванд. Ҳамин тавр, HBase на танҳо маълумот, балки асрори пурасрорро низ нигоҳ медорад.

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

Параметри "Cache DATA on Read" ба "дурӯғ" муқаррар карда шудааст. Агар шумо ягон идея дошта бошед, хуш омадед, ки онро дар шарҳҳо муҳокима кунед.

5. Коркарди маълумотҳои партияи MultiGet/MultiPut

Коркарди дархостҳои ягона (Get/Put/Delete) як амалиёти хеле гаронбаҳост, бинобар ин, агар имконпазир бошад, шумо бояд онҳоро дар Рӯйхат ё Рӯйхат муттаҳид кунед, ки ба шумо имкон медиҳад, ки афзоиши назарраси иҷроишро ба даст оред. Ин махсусан барои амалиёти навиштан дуруст аст, аммо ҳангоми хондан як доми зерин вуҷуд дорад. Графикаи зер вақти хондани 50 000 сабтро аз MemStore нишон медиҳад. Хондан дар як ришта анҷом дода шуд ва меҳвари уфуқӣ шумораи калидҳоро дар дархост нишон медиҳад. Дар ин ҷо шумо мебинед, ки ҳангоми зиёд кардани ҳазор калид дар як дархост, вақти иҷро кам мешавад, яъне. суръат меафзояд. Бо вуҷуди ин, вақте ки ҳолати MSLAB бо нобаёнӣ фаъол аст, пас аз ин ҳадди ниҳоӣ коҳиши куллӣ дар кор оғоз мешавад ва миқдори маълумот дар сабт ҳар қадар зиёдтар бошад, вақти корӣ ҳамон қадар дарозтар мешавад.

Назария ва амалияи истифодаи HBase

Санҷишҳо дар мошини виртуалӣ, 8 ядро, версияи HBase 2.0.0-cdh6.0.0-beta1 гузаронида шуданд.

Ҳолати MSLAB барои кам кардани пораҳои теппае тарҳрезӣ шудааст, ки бо сабаби омезиши додаҳои насли нав ва кӯҳна рух медиҳад. Ҳамчун роҳи ҳал, вақте ки MSLAB фаъол карда мешавад, маълумот ба ячейкаҳои нисбатан хурд (порчаҳо) ҷойгир карда мешавад ва дар қисмҳо коркард карда мешавад. Дар натиҷа, вақте ки ҳаҷми бастаи додаҳои дархостшуда аз андозаи ҷудошуда зиёд мешавад, иҷроиш якбора коҳиш меёбад. Аз тарафи дигар, хомӯш кардани ин режим низ тавсия дода намешавад, зеро он боиси таваққуф аз сабаби GC дар лаҳзаҳои коркарди пуршиддати маълумот мегардад. Як ҳалли хуб ин зиёд кардани ҳаҷми ҳуҷайраҳо дар сурати навиштани фаъол тавассути гузоштан дар як вақт бо хондан мебошад. Бояд қайд кард, ки агар шумо пас аз сабт фармони flush-ро иҷро кунед, ки MemStore-ро ба диск аз нав барқарор мекунад ё бо истифодаи BulkLoad бор кунед, мушкилот ба миён намеояд. Ҷадвали зер нишон медиҳад, ки дархостҳо аз MemStore барои маълумоти калонтар (ва ҳамон миқдор) боиси сустшавӣ мегардад. Бо вуҷуди ин, бо зиёд кардани андоза, мо вақти коркардро ба муқаррарӣ бармегардонем.

Назария ва амалияи истифодаи HBase
Илова ба зиёд кардани андоза, тақсим кардани маълумот аз рӯи минтақа кӯмак мекунад, яъне. тақсим кардани ҷадвал. Ин боиси кам шудани дархостҳо ба ҳар як минтақа мегардад ва агар онҳо ба ячейка мувофиқат кунанд, посух хуб боқӣ мемонад.

6. Стратегияи тақсими ҷадвалҳо ба минтақаҳо (тақсимкунӣ)

Азбаски HBase як нигаҳдории арзиши калидӣ аст ва тақсимкунӣ тавассути калид анҷом дода мешавад, тақсим кардани маълумот дар тамоми минтақаҳо хеле муҳим аст. Масалан, ба се қисм тақсим кардани чунин ҷадвал боиси ба се минтақа тақсим шудани маълумот мегардад:

Назария ва амалияи истифодаи HBase
Чунин мешавад, ки ин боиси сустшавии якбора мегардад, агар маълумоти баъдтар боршуда ба монанди арзишҳои дароз, ки аксари онҳо бо як рақам сар мешаванд, масалан:

1000001
1000002
...
1100003

Азбаски калидҳо ҳамчун массиви байт нигоҳ дошта мешаванд, онҳо ҳама як хел оғоз мешаванд ва ба ҳамон минтақаи №1 тааллуқ доранд, ки ин диапазони калидҳоро нигоҳ медорад. Якчанд стратегияҳои тақсимкунӣ мавҷуданд:

HexStringSplit - Калидро ба як сатри рамзгузоришудаи шонздаҳӣ дар диапазони "00000000" => "FFFFFFFF" ва пуркунии чап бо сифрҳо табдил медиҳад.

UniformSplit - Калидро ба массиви байтӣ бо рамзгузории шонздаҳӣ дар диапазони "00" => "FF" ва пуркунии дар тарафи рост бо сифрҳо табдил медиҳад.

Илова бар ин, шумо метавонед ҳама гуна диапазон ё маҷмӯи калидҳоро барои тақсимот муайян кунед ва тақсимкунии худкорро танзим кунед. Бо вуҷуди ин, яке аз соддатарин ва муассиртарин равишҳо UniformSplit ва истифодаи пайвастагии ҳаш мебошад, масалан муҳимтарин ҷуфти байт аз иҷро кардани калид тавассути функсияи CRC32(rowkey) ва худи сатр:

hash + rowkey

Он гоҳ ҳама маълумот дар байни минтақаҳо баробар тақсим карда мешавад. Ҳангоми хондан, ду байти аввал танҳо партофта мешаванд ва калиди аслӣ боқӣ мемонад. RS инчунин миқдори маълумот ва калидҳоро дар минтақа назорат мекунад ва агар аз меъёр зиёд бошад, онро ба таври худкор ба қисмҳо тақсим мекунад.

7. Таҳаммулпазирии хатогиҳо ва маҳалли ҷойгиршавии маълумот

Азбаски барои ҳар як маҷмӯи калидҳо танҳо як минтақа масъул аст, ҳалли мушкилоти марбут ба садамаҳои RS ё аз кор баромадан ин нигоҳ доштани ҳама маълумоти зарурӣ дар HDFS мебошад. Вақте ки RS меафтад, усто инро тавассути набудани набзи дил дар гиреҳи ZooKeeper муайян мекунад. Он гоҳ он минтақаи хидматрасониро ба дигар RS таъин мекунад ва азбаски HFiles дар системаи файлии тақсимшуда нигоҳ дошта мешавад, соҳиби нав онҳоро мехонад ва хидматрасонии маълумотро идома медиҳад. Аммо, азбаски баъзе маълумотҳо метавонанд дар MemStore бошанд ва барои ворид шудан ба HFiles вақт надошта бошанд, WAL, ки дар HDFS низ нигоҳ дошта мешавад, барои барқарор кардани таърихи амалиёт истифода мешавад. Пас аз татбиқи тағирот, RS қодир аст ба дархостҳо посух диҳад, аммо ҳаракат ба он оварда мерасонад, ки баъзе маълумотҳо ва равандҳои хидматрасонии онҳо дар гиреҳҳои гуногун ба итмом мерасанд, яъне. махаллй кам шуда истодааст.

Ҳалли мушкилот фишурдани асосӣ аст - ин тартиб файлҳоро ба он гиреҳҳое интиқол медиҳад, ки барои онҳо масъуланд (дар он ҷо минтақаҳои онҳо ҷойгиранд), ки дар натиҷаи ин раванд сарбории шабака ва дискҳо якбора зиёд мешавад. Аммо, дар оянда, дастрасӣ ба маълумот ба таври назаррас суръат мегирад. Илова бар ин, major_compaction якҷоякунии ҳамаи HFiles дар як файл дар дохили минтақаро иҷро мекунад ва инчунин вобаста ба танзимоти ҷадвал маълумотро тоза мекунад. Масалан, шумо метавонед шумораи версияҳои объектро, ки бояд нигоҳ дошта шаванд ё мӯҳлати баъди он аз ҷиҳати ҷисмонӣ нест карда шудани объектро муайян кунед.

Ин тартиб метавонад ба кори HBase таъсири хеле мусбат расонад. Тасвири зер нишон медиҳад, ки чӣ гуна кор дар натиҷаи сабти фаъоли маълумот паст шудааст. Дар ин ҷо шумо мебинед, ки чӣ гуна 40 ришта ба як ҷадвал навишта шудааст ва 40 ришта ҳамзамон маълумотро мехонанд. Навиштани риштаҳо торафт бештар HFiles тавлид мекунанд, ки онҳоро риштаҳои дигар мехонанд. Дар натиҷа, бештар ва бештар маълумотро аз хотира хориҷ кардан лозим аст ва дар ниҳоят GC ба кор шурӯъ мекунад, ки амалан тамоми корро фалаҷ мекунад. Ба кор андохтани компак-цияи асосй боиси тоза кардани хошок ва баркарор гардидани хосилнокии мехнат гардид.

Назария ва амалияи истифодаи HBase
Санҷиш дар 3 DataNode ва 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ришта) анҷом дода шуд. Нусхаи HBase 1.2.0-cdh5.14.2

Қобили зикр аст, ки компактсияи асосӣ дар ҷадвали "зинда" оғоз карда шуд, ки дар он маълумот фаъолона навишта ва хонда мешуд. Дар интернет изҳорот мавҷуд буд, ки ин метавонад ҳангоми хондани маълумот ба посухи нодуруст оварда расонад. Барои тафтиш, раванде оғоз карда шуд, ки маълумоти нав тавлид мекунад ва онро ба ҷадвал навишт. Пас аз он ман дарҳол хондам ва тафтиш кардам, ки оё арзиши натиҷавӣ бо он чизе, ки навишта шудааст, мувофиқат мекунад. Дар ҳоле, ки ин раванд иҷро мешуд, фишурдани асосӣ тақрибан 200 маротиба иҷро карда шуд ва ягон хатогӣ ба қайд гирифта нашудааст. Эҳтимол, мушкилот хеле кам ва танҳо ҳангоми сарбории зиёд пайдо мешавад, аз ин рӯ бехатартар аст, ки равандҳои навиштан ва хонданро тавре, ки ба нақша гирифта шудааст, қатъ кунед ва тозакуниро барои пешгирӣ кардани чунин камшавии GC анҷом диҳед.

Инчунин, фишурдашавии асосӣ ба ҳолати MemStore таъсир намерасонад; барои тоза кардани он ба диск ва фишурдани он, шумо бояд flush (connection.getAdmin().flush(TableName.valueOf(tblName))) истифода баред.

8. Танзимот ва иҷроиш

Тавре ки аллакай зикр гардид, HBase муваффақияти бузургтарини худро дар он ҷо нишон медиҳад, ки ҳангоми иҷрои BulkLoad ба ҳеҷ коре лозим нест. Аммо, ин ба аксари системаҳо ва одамон дахл дорад. Аммо, ин асбоб барои нигоҳ доштани маълумот дар маҷмӯъ дар блокҳои калон мувофиқтар аст, дар ҳоле ки агар ин раванд дархостҳои сершумори хондан ва навиштанро талаб кунад, фармонҳои Гирифтан ва Гузоштани дар боло тавсифшуда истифода мешаванд. Барои муайян кардани параметрҳои оптималӣ, партобҳо бо маҷмӯи гуногуни параметрҳо ва танзимоти ҷадвал анҷом дода шуданд:

  • 10 ришта дар як вақт 3 маротиба пай дар пай оғоз карда шуд (биёед, ин блоки риштаҳо номида мешавад).
  • Вақти кори ҳамаи риштаҳо дар блок ба ҳисоби миёна ҳисоб карда шуд ва натиҷаи ниҳоии кори блок буд.
  • Ҳама риштаҳо бо як ҷадвал кор мекарданд.
  • Пеш аз хар як cap кардани блоки ришта, кофтукови асосй анчом дода шуд.
  • Ҳар як блок танҳо яке аз амалҳои зеринро иҷро кард:

— Гузошта
— Гирифтан
— Гирифтан+Гузоштан

  • Хар як блок 50 000 такрори амалиёти худро ичро кард.
  • Андозаи блоки сабт 100 байт, 1000 байт ё 10000 байт (тасодуфӣ) аст.
  • Блокҳо бо рақамҳои гуногуни калидҳои дархостшуда оғоз карда шуданд (як калид ё 10).
  • Блокҳо дар зери танзимоти гуногуни ҷадвал иҷро карда шуданд. Параметрҳо тағир ёфт:

— BlockCache = фурӯзон ё хомӯш
- BlockSize = 65 KB ё 16 KB
- Қисмҳо = 1, 5 ё 30
— MSLAB = фаъол ё ғайрифаъол

Пас, блок чунин менамояд:

а. Ҳолати MSLAB фаъол / хомӯш карда шуд.
б. Ҷадвале сохта шуд, ки барои он параметрҳои зерин муқаррар карда шуданд: BlockCache = true/nne, BlockSize = 65/16 Kb, Partition = 1/5/30.
в. Компресс ба GZ муқаррар карда шуд.
г. 10 ришта дар як вақт оғоз карда шуд, ки амалиёти 1/10 put/get/get+put дар ин ҷадвал бо сабтҳои 100/1000/10000 байт иҷро карда, 50 дархостро дар як саф иҷро мекунанд (калидҳои тасодуфӣ).
д. Нуқтаи d се маротиба такрор карда шуд.
f. Мухлати кори хамаи риштахо ба хисоби миёна гирифта шуд.

Ҳама комбинацияҳои имконпазир санҷида шуданд. Пешгӯӣ кардан мумкин аст, ки суръат бо афзоиши андозаи рекорд коҳиш хоҳад ёфт ё ғайрифаъол кардани кэш боиси сустшавӣ мегардад. Бо вуҷуди ин, ҳадаф фаҳмидани дараҷа ва аҳамияти таъсири ҳар як параметр буд, бинобар ин маълумоти ҷамъовардашуда ба вуруди функсияи регрессияи хатӣ ворид карда шуданд, ки ин имкон медиҳад, ки аҳамиятро бо истифода аз омори t арзёбӣ кунем. Дар зер натиҷаҳои блокҳои иҷрои амалиёти Put оварда шудаанд. Маҷмӯи пурраи комбинатсияи 2*2*3*2*3 = 144 вариант + 72 тк. баъзехо ду маротиба ичро карда шуданд. Аз ин рӯ, дар маҷмӯъ 216 давр вуҷуд дорад:

Назария ва амалияи истифодаи HBase
Санҷиш дар мини-кластери иборат аз 3 DataNode ва 4 RS (CPU Xeon E5-2680 v4 @ 2.40GHz * 64 ришта) гузаронида шуд. Нусхаи HBase 1.2.0-cdh5.14.2.

Суръати баландтарини воридкунӣ 3.7 сония ҳангоми хомӯш кардани режими MSLAB, дар ҷадвал бо як қисм, бо BlockCache фаъол, BlockSize = 16, сабти 100 байт, 10 дона дар як баста ба даст омад.
Суръати пасттарини воридшавӣ 82.8 сония бо фаъол будани режими MSLAB, дар ҷадвали дорои як қисм, бо BlockCache фаъол, BlockSize = 16, сабтҳои 10000 байт, ҳар як 1 ба даст омад.

Акнун биёед ба модел назар кунем. Мо сифати хуби моделро дар асоси R2 мебинем, аммо комилан равшан аст, ки экстраполяция дар ин ҷо хилофи аст. Рафтори воқеии система ҳангоми тағир додани параметрҳо хаттӣ нахоҳад буд; ин модел на барои пешгӯиҳо, балки барои фаҳмидани он ки дар дохили параметрҳои додашуда чӣ рӯй дод, лозим аст. Масалан, дар ин ҷо мо аз меъёри Студент мебинем, ки параметрҳои BlockSize ва BlockCache барои амалиёти Put аҳамият надоранд (ки умуман хеле пешгӯинашаванда аст):

Назария ва амалияи истифодаи HBase
Аммо далели он, ки зиёд кардани шумораи қисмҳо боиси кам шудани кор мегардад, то ҳадде ғайричашмдошт аст (мо аллакай таъсири мусбати зиёд кардани шумораи қисмҳо бо BulkLoad-ро дидаем), гарчанде ки фаҳмо аст. Аввалан, барои коркард, шумо бояд ба ҷои як минтақа ба 30 минтақа дархост эҷод кунед ва ҳаҷми маълумот он қадар нест, ки ин фоида ба даст орад. Дуюм, вақти умумии кор бо сусттарин RS муайян карда мешавад ва азбаски шумораи DataNodes аз шумораи RS камтар аст, баъзе минтақаҳо макони сифр доранд. Хуб, биёед ба панҷгонаи беҳтарин назар андозем:

Назария ва амалияи истифодаи HBase
Акнун биёед натиҷаҳои иҷрои блокҳои Getро арзёбӣ кунем:

Назария ва амалияи истифодаи HBase
Шумораи қисмҳо аҳамияти худро гум кардааст, ки эҳтимолан бо он шарҳ дода мешавад, ки маълумот хуб нигоҳ дошта шудааст ва кэши хондан параметри муҳимтарин (оморӣ) мебошад. Табиист, ки зиёд кардани шумораи паёмҳо дар дархост низ барои иҷроиш хеле муфид аст. Холҳои беҳтарин:

Назария ва амалияи истифодаи HBase
Хуб, дар ниҳоят, биёед ба модели блоке, ки аввал ба даст овард ва сипас гузорем, бубинем:

Назария ва амалияи истифодаи HBase
Ҳама параметрҳо дар ин ҷо муҳиманд. Ва натиҷаҳои роҳбарон:

Назария ва амалияи истифодаи HBase

9. Санҷиши сарборӣ

Хуб, дар ниҳоят мо як бори кам ё камтар мувофиқро оғоз хоҳем кард, аммо вақте ки шумо чизе барои муқоиса кардан доред, ҳамеша ҷолибтар аст. Дар вебсайти DataStax, таҳиягари калидии Кассандра мавҷуд аст Натиҷаҳо NT як қатор анборҳои NoSQL, аз ҷумла версияи HBase 0.98.6-1. Боркунӣ аз ҷониби 40 ришта, андозаи маълумот 100 байт, дискҳои SSD анҷом дода шуд. Натиҷаи санҷиши амалиёти Хондан-Тағйир додан-Навиштан натиҷаҳои зеринро нишон дод.

Назария ва амалияи истифодаи HBase
То ҷое ки ман фаҳмидам, хониш дар блокҳои 100 сабт анҷом дода шуд ва барои 16 гиреҳи HBase, санҷиши DataStax иҷрои 10 ҳазор амалиёт дар як сонияро нишон дод.

Хушбахтона, кластери мо низ 16 гиреҳ дорад, аммо он қадар "бахт" нест, ки ҳар кадом 64 ядро ​​(ришта) дорад, дар ҳоле ки дар санҷиши DataStax ҳамагӣ 4 адад. Аз тарафи дигар, онҳо дискҳои SSD доранд, дар ҳоле ки мо HDD дорем. ё бештар аз он версияи нави HBase ва истифодаи CPU ҳангоми сарборӣ амалан ба таври назаррас афзоиш наёфт (визуалӣ 5-10 фоиз). Бо вуҷуди ин, биёед кӯшиш кунем, ки ин конфигуратсияро истифода барем. Танзимоти ҷадвали пешфарз, хониш дар диапазони калидӣ аз 0 то 50 миллион ба таври тасодуфӣ анҷом дода мешавад (яъне, ҳар дафъа аслан нав). Дар ҷадвал 50 миллион сабтҳо мавҷуданд, ки ба 64 қисм тақсим шудаанд. Калидҳо бо истифода аз crc32 ҳаш карда мешаванд. Танзимоти ҷадвал пешфарз мебошанд, MSLAB фаъол аст. Оғози 40 ришта, ҳар як ришта маҷмӯи 100 калидҳои тасодуфиро мехонад ва фавран 100 байтҳои тавлидшударо ба ин калидҳо бармегардонад.

Назария ва амалияи истифодаи HBase
Пойгоҳ: 16 DataNode ва 16 RS (CPU Xeon E5-2680 v4 @ 2.40 ГГц * 64 ришта). Нусхаи HBase 1.2.0-cdh5.14.2.

Натиҷаи миёна ба 40 ҳазор амалиёт дар як сония наздиктар аст, ки нисбат ба санҷиши DataStax хеле беҳтар аст. Бо вуҷуди ин, барои мақсадҳои таҷрибавӣ, шумо метавонед шартҳоро каме тағир диҳед. Аз эҳтимол дур нест, ки ҳама корҳо танҳо дар як миз ва инчунин танҳо дар калидҳои беназир анҷом дода шаванд. Фарз мекунем, ки маҷмӯи муайяни калидҳои "гарм" вуҷуд дорад, ки сарбории асосиро тавлид мекунад. Аз ин рӯ, биёед кӯшиш кунем, ки сарбориро бо сабтҳои калонтар (10 КБ), инчунин дар қисмҳои 100, дар 4 ҷадвалҳои гуногун эҷод кунем ва доираи калидҳои дархостшударо то 50 ҳазор маҳдуд созем. Графикаи зер оғоз кардани 40 риштаро нишон медиҳад, ки ҳар як ришта хонда мешавад. маҷмӯи 100 калид ва фавран дар ин калидҳо 10 KB тасодуфӣ менависад.

Назария ва амалияи истифодаи HBase
Пойгоҳ: 16 DataNode ва 16 RS (CPU Xeon E5-2680 v4 @ 2.40 ГГц * 64 ришта). Нусхаи HBase 1.2.0-cdh5.14.2.

Ҳангоми боркунӣ, фишурдани асосӣ якчанд маротиба оғоз карда шуд, тавре ки дар боло нишон дода шудааст, бе ин тартиб, кор тадриҷан паст мешавад, аммо ҳангоми иҷро бори иловагӣ низ ба вуҷуд меояд. Камбудиҳо бо сабабҳои гуногун ба вуҷуд меоянд. Баъзан риштаҳо кор ба анҷом мерасанд ва ҳангоми аз нав оғоз кардани онҳо таваққуф ба амал омад, баъзан замимаҳои тарафи сеюм дар кластер сарборӣ эҷод мекарданд.

Хондан ва фавран навиштан яке аз душвортарин сенарияҳои корӣ барои HBase мебошад. Агар шумо танҳо дархостҳои хурдро пешниҳод кунед, масалан, 100 байт, онҳоро ба бастаҳои 10-50 ҳазор дона муттаҳид кунед, шумо метавонед дар як сония садҳо ҳазор амалҳоро ба даст оред ва вазъият бо дархостҳои танҳо барои хондан монанд аст. Қобили зикр аст, ки натиҷаҳо нисбат ба натиҷаҳои аз ҷониби DataStax гирифташуда ба куллӣ беҳтаранд, пеш аз ҳама аз сабаби дархостҳо дар блокҳои 50 ҳазор.

Назария ва амалияи истифодаи HBase
Пойгоҳ: 16 DataNode ва 16 RS (CPU Xeon E5-2680 v4 @ 2.40 ГГц * 64 ришта). Нусхаи HBase 1.2.0-cdh5.14.2.

10. Хулоса

Ин система хеле чандир танзим шудааст, аммо таъсири шумораи зиёди параметрҳо то ҳол номаълум боқӣ мемонад. Баъзеи онҳо санҷида шуданд, аммо ба маҷмӯи санҷишҳои натиҷавӣ дохил карда нашуданд. Масалан, таҷрибаҳои пешакӣ аҳамияти ночиз будани чунин параметрро ба мисли DATA_BLOCK_ENCODING нишон доданд, ки иттилоотро бо истифода аз арзишҳои ҳуҷайраҳои ҳамсоя рамзгузорӣ мекунад, ки барои маълумоти тасодуфӣ тавлидшуда фаҳмо аст. Агар шумо миқдори зиёди объектҳои такрориро истифода баред, фоида метавонад назаррас бошад. Дар маҷмӯъ, мо метавонем бигӯем, ки HBase таассуроти пойгоҳи хеле ҷиддӣ ва хуб фикркардашударо ба вуҷуд меорад, ки ҳангоми иҷрои амалиёт бо блокҳои бузурги додаҳо метавонад хеле самаранок бошад. Махсусан, агар процессхои хониш ва навиштанро сари вакт аз хам чудо кардан мумкин бошад.

Агар дар назари шумо чизе бошад, ки ба қадри кофӣ ифшо нашуда бошад, ман омодаам ба шумо муфассалтар нақл кунам. Мо шуморо даъват менамоем, ки таҷрибаи худро мубодила кунед ё муҳокима кунед, агар шумо бо чизе розӣ набошед.

Манбаъ: will.com

Илова Эзоҳ