Vodič za dizajn HBase Rowkey

Hbase Rowkey Design Guide



Vodič za dizajn HBase Rowkey

Zašto je Rowkey tako važan

Što je zapravo RowKey?



Često kažemo da je gledanje dizajna HBase stola dobro, samo pogledajte njegov dizajn RowKey. Može se vidjeti status RowKeya u HBaseu. Pa, što je zapravo RowKey? Karakteristike RowKeya su sljedeće:



  • Slično primarnom ključu u MySQL-u, Oracle, koji se koristi za označavanje jedinstvene linije



  • Niz neponavljajućih nizova koje je korisnik u potpunosti odredio

  • Podaci u HBaseu uvijek se sortiraju prema redoslijedu rječnika Rowkey.

Uloga RowKeya

  • Pronađite odgovarajuću regiju putem RowKeyja prilikom čitanja i pisanja podataka



  • Podaci u MemStoreu poredani su u leksikografskom redoslijedu RowKey

  • Podaci u datoteci HFile poredani su u leksikografskom redoslijedu RowKey.

Utjecaj Rowkeyja na upit

Ako je naš RowKey dizajniran kao uid + telefon + ime , tada ovaj dizajn vrlo dobro može podržati sljedeće scenarije:

  • uid = 111 I telefon = 123 I ime = iteblog

  • uid = 111 I telefon = 123

  • uid = 111 I telefon = 12?

  • uid = 111

Scene koje je teško podržati:

  • telefon = 123 I ime = iteblog

  • telefon = 123

  • ime = iteblog

Utjecaj Rowkeyja na podjelu regija

Podaci tablice HBase distribuiraju se u različite regije prema Rowkeyju, a nerazumni dizajn Rowkey rezultirat će Vruća izdanja . Vruće je pitanje što velik broj klijenata izravno pristupa jednom ili nekoliko čvorova klastera, dok su drugi čvorovi u klasteru relativno neaktivni.

Ako želite saznati više o člancima vezanim za Spark, Hadoop ili Hbase, obratite pažnju na javni račun WeChat: iteblog_hadoop

Kao što je gore prikazano, podaci o Regiji pet su puta veći od Regija 2, što će rezultirati većom frekvencijom pristupa za Regiju1, što zauzvrat utječe na druge Regije stroja u kojima se Regija nalazi.

Vještine dizajniranja RowKey

Kako možemo izbjeći gore spomenute vruće probleme? Ovo su tri metode spomenute u ovom poglavlju.

Načini kako izbjeći žarišta - soljenje
Dodavanje soli ovdje nije sol u kriptografiji, već slučajni broj ispred rowkey. Točnije, rowkeyu je dodijeljen slučajni prefiks kako bi se razlikovao od prethodne sorte. Broj dodijeljenih vrsta prefiksa trebao bi biti jednak broju regija za koje želite proširiti podatke u različite regije. Dodavanje soli korisno je ako imate neke žarišne točke redkey koji se više puta pojavljuje u drugim ravnomjerno raspoređenim rkeykey-ima. Razmotrite sljedeći primjer: on širi zahtjev za pisanje na više RegionServera, ali ima neki negativan utjecaj na čitanje.

Ako imate sljedeći ključ retka, svako područje u tablici odgovara svakom slovu u abecedi. Početak s 'a' je ista regija, a 'b' počinje s istom regijom. U tablici su svi koji počinju s 'f' u istoj regiji, a njihov tipka reda izgleda ovako:

foo0001 foo0002 foo0003 foo0004

Ako trebate proširiti gornju regiju na 4 regije. Možete koristiti 4 različite soli: 'a', 'b', 'c', 'd'. Prema ovoj shemi, svaki prefiks slova nalazit će se u drugoj regiji. Nakon dodavanja soli imate sljedeći ključ:

a-foo0003 b-foo0001 c-foo0004 d-foo0002

Dakle, možete pisati u 4 različite regije. U teoriji, ako svi pišu u istu regiju, imat ćete 4 puta veću propusnost.

Ako dodate još jedan redak, on će nasumično dodijeliti jedan od a, b, c, d kao prefiks i završiti postojećom linijom kao rep:

a-foo0003 b-foo0001 c-foo0003 c-foo0004 d-foo0002

Budući da je dodjela slučajna, morate učiniti više ako želite podatke dohvatiti leksikografskim redoslijedom. Dodavanje soli na ovaj način povećava propusnost u vrijeme pisanja, ali postoji dodatni trošak prilikom čitanja.

Načini kako izbjeći žarišta - raspršivanje
Princip raspršivanja je izračunavanje hash vrijednosti RowKey, a zatim spajanje djelomičnog niza hasha s originalnim RowKey. Ovdje spomenuto hash sadrži algoritme kao što su MD5, sha1, sha256 ili sha512. Na primjer, imamo sljedeći RowKey:

foo0001 foo0002 foo0003 foo0004

Koristimo md5 za izračunavanje hash vrijednosti ovih RowKeys, a zatim uzimamo prvih 6 bitova i originalni RowKey da bismo dobili novi RowKey:

95f18cfoo0001 6ccc20foo0002 b61d00foo0003 1a7475foo0004

Prednosti i nedostaci: Cjelokupni skup podataka može se slomiti do određene mjere, ali na primjer nije pogodan za skeniranje, koristimo md5 algoritam za izračunavanje md5 vrijednosti Rowkeya, a zatim presrećemo prvih nekoliko nizova. podniza (MD5 (ID uređaja), 0, x) + ID uređaja, gdje je x općenito 5 ili 6.

Načini za izbjegavanje žarišta - Obrtanje
Princip okretanja unatrag je preokretanje fiksne duljine ili svih tipki. Na primjer, imamo sljedeći URL i kao RowKey:

flink.iteblog.com www.iteblog.com carbondata.iteblog.com def.iteblog.com

Ti URL-ovi zapravo pripadaju istom imenu domene, ali budući da su prethodni različiti, podaci se ne pohranjuju zajedno. Možemo ga preokrenuti na sljedeći način:

moc.golbeti.knilf moc.golbeti.www moc.golbeti.atadnobrac moc.golbeti.fed

Nakon toga se podaci ovih URL-ova mogu sastaviti.

Duljina tipke RowKey
RowKey može biti bilo koji niz maksimalne duljine 64 KB (jer Duljina retka zauzima 2 bajta). Što je kraće preporučeno, to je bolje iz sljedećih razloga:

  • Datoteka trajnosti podataka HFile pohranjuje se prema KeyValue. Ako je tipka retka predugačka, poput više od 100 bajtova, 1000w redaka podataka, svijetli tipka retka zauzet će 100 * 1000w = 1 milijardu bajtova, što je blizu 1G podataka. Veliki utjecaj na učinkovitost pohrane HFile

  • MemStore će neke podatke predmemorirati. Ako je polje rowkey predugo, učinkovito korištenje memorije će se smanjiti, a sustav ne može predmemorirati više podataka, što će smanjiti učinkovitost pretraživanja.

  • Trenutno je operativni sustav 64-bitni sustav, s 8 bajtova poravnate memorije, kontroliranim na 16 bajtova, i cijeli broj više od 8 bajtova iskorištava najbolje značajke operativnog sustava.

Analiza slučaja dizajna RowKey

Klasa trgovanja Dizajn Rowkey

  • Ispitajte povijest transakcija prodavatelja za određeno vremensko razdoblje
    prodavačId + vremenska oznaka + narudžba

  • Ispitajte povijest transakcija kupca za određeno vremensko razdoblje
    ID kupca + vremenska oznaka + ID narudžbe

  • Upit prema broju narudžbe
    narudžba br

  • Ako trgovac proda puno proizvoda, možete dizajnirati Rowkey za brzo pretraživanje.
    sol + prodavačId + vremenska oznaka Gdje je sol slučajan broj.
    može podržati scenu:

    • Skeniranje pune tablice

    • Upit prodavačaId

    • Upit prodavača ID + vremenska oznaka

Kontrola financijskog rizika Rowkey dizajn

Upitajte podatke o korisničkoj slici korisnika

  • prefiks + uid

  • prefiks + idcard

  • prefiks + tele

Gdje je prefiks = substr (md5 (uid), 0, x), x traje 5-6. Uid, idcard i tele predstavljaju korisnikov jedinstveni identifikator, ID karticu i broj mobitela.

Umrežavanje automobila Dizajn Rowkey

  • Ispitajte povijest transakcija automobila u određenom vremenskom rasponu
    carId + vremenska oznaka

  • U seriji ima previše automobila, što uzrokuje žarišta
    prefiks + carId + vremenska oznaka Gdje je prefiks = substr (md5 (uid), 0, x)

Upit za nedavne podatke

Pitajte najnoviji zapis korisnika ili ga pitajte za određeni vremenski period. Dizajn RowKey je sljedeći:
uid + Long.Max_Value - vremenska oznaka
Podržana scena

  • Zatražite najnoviji zapis korisnika
    Skeniraj [uid] startRow [uid] [000000000000] stopRow [uid] [Long.Max_Value - vremenska oznaka]

  • Ispitajte korisnikov zapis o radu tijekom određenog vremenskog razdoblja
    Skeniraj [uid] startRow [uid] [Long.Max_Value - startTime] stopRow [uid] [Long.Max_Value - endTime]