sql >> Databáze >  >> NoSQL >> HBase

Představujeme zásady komprimačních oddílů Apache HBase Medium Object Storage (MOB).

Úvod

Funkce Apache HBase Medium Object Storage (MOB) byla představena HBASE-11339. Tato funkce zlepšuje přístup ke čtení a zápisu s nízkou latencí pro středně velké hodnoty (ideálně od 100 kB do 10 MB na základě našich výsledků testování), takže je vhodná pro ukládání dokumentů, obrázků a dalších středně velkých objektů [1]. Funkce Apache HBase MOB dosahuje tohoto vylepšení oddělením IO cest pro odkazy na soubory a objekty MOB, aplikováním různých politik komprimace na MOB a tím snížením zesílení zápisu vytvořeného komprimací HBase. Objekty MOB jsou uloženy ve speciální oblasti, která se nazývá oblast MOB. Objekty MOB pro jednu tabulku jsou uloženy v oblasti MOB jako soubory MOB, což znamená, že v této oblasti bude mnoho souborů MOB. Viz obrázek 1 z [1] pro architekturu Apache HBase MOB.

Obrázek 1 Apache HBase MOB Architecture

Zpočátku jsou soubory MOB relativně malé (méně než 1 nebo 2 bloky HDFS). Aby se zlepšila účinnost Apache HDFS, jsou soubory MOB pravidelně slučovány do větších souborů pomocí operace zvané komprimace MOB , který je nezávislý na normálním procesu zhutňování. Počáteční verze komprimace MOB přepíše více souborů MOB z určitého dne na větší soubory MOB pro daný den. Aby to bylo jasnější, použijeme níže uvedený příklad souboru. Tabulka t1 má dvě oblasti (r1, r2), má jednu rodinu sloupců (f1) a povoleno MOB. Můžete vidět, že existují dvě předpony; D279186428a75016b17e4df5ea43d080 odpovídá hash hodnotě startovacího klíče pro region r1 a D41d8cd98f00b204e9800998ecf8427e hash hodnotě startovacího klíče pro region r2. Pro region r1 existují dva soubory MOB každý 1. 1. 2016 a 2. 1. 2016 a pro region r2  jsou 3 soubory MOB 1. 1. 2016 v oblasti MOB, což je /hbase/data/ mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1.

>ls  /hbase/data/mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1

D279186428a75016b17e4df5ea43d08020160101 f9d9713ab2fb4a8b825485f6a8acfcd5

D279186428a75016b17e4df5ea43d08020160101 af7713ab2fbf4a8abc5135f6a8467ca8

D279186428a75016b17e4df5ea43d08020160102 9013ab2fceda8b825485f6a8acfcd515

D279186428a75016b17e4df5ea43d08020160102 9a7978013ab2fceda8b825485f6a8acf

D41d8cd98f00b204e9800998ecf8427e20160101 fc94af623c2345f1b241887721e32a48

D41d8cd98f00b204e9800998ecf8427e20160101 d0954af623c2345f1b241887721e3259

D41d8cd98f00b204e9800998ecf8427e20160101 439adf4af623c2345f1b241887721e32

Po komprimaci MOB jsou dva soubory MOB 1. 1. 2016 a 2. 1. 2016 pro region r1 zkomprimovány do jednoho souboru pro každý den. Tři soubory MOB k 1. 1. 2016 pro region r2 jsou zkomprimovány do jednoho souboru.

D279186428a75016b17e4df5ea43d08020160101 f49a9d9713ab2fb4a8b825485f6a8acf

D279186428a75016b17e4df5ea43d08020160102 bc9176d09424e49a9d9065caf9713ab2

D41d8cd98f00b204e9800998ecf8427e20160101 d9cb0954af623c2345f1b241887721e3

Vzhledem k tomu, že lze zkomprimovat pouze soubory MOB ze stejného dne pro určitou oblast, bude minimální vazba souborů MOB v jediném adresáři oblasti MOB pro jednu konkrétní rodinu za jeden rok 365 x počet oblastí. S 1000 regiony bude za 10 let po zhutnění MOB 365 x 1000 x 10, 3,65 milionu souborů a neustále roste! Bohužel má Apache HDFS omezený limit na počet souborů v jednom adresáři [2]. Poté, co počet MOB souborů překročí tento limit HDFS, do tabulky MOB již nelze zapisovat. Výchozí maximální počet souborů v jednom adresáři pro Apache HDFS je 1 milion. U 1000 regionů dosáhne tohoto limitu přibližně za 3 roky. S více regiony dosáhne limitu rychleji.

HBASE-16981 zavádí týdenní a měsíční zásady agregace oddílů zhutňování MOB, aby se tento problém se škálováním počtu souborů MOB zlepšil faktorem 7 nebo ~30.

Návrh týdenních a měsíčních zásad zhutňování MOB (HBASE-16981)

Základní myšlenkou HBASE-16981 je komprimovat MOB soubory za jeden kalendářní týden nebo jeden kalendářní měsíc do menšího počtu větších souborů. Kalendářní týden je definován normou ISO 8601, začíná v pondělí a končí v neděli. Normálně, s týdenní politikou, po zhutnění MOB bude jeden soubor za týden na region; s měsíční politikou bude po zhutnění MOB jeden soubor za měsíc na region. Počet souborů MOB v adresáři regionů MOB pro jednu konkrétní rodinu za jeden rok se sníží na 52 x počet regionů s týdenní politikou a 12 x počet regionů s měsíční politikou. To výrazně snižuje počet souborů MOB po komprimaci.

Počáteční navrhovaný přístup

Když dojde ke zhutnění MOB, HBase master vybere a agreguje soubory MOB během jednoho kalendářního měsíce nebo jednoho kalendářního týdne do menšího počtu větších souborů. V závislosti na tom, jak často dochází ke komprimaci MOB, je možné, že soubory budou komprimovány vícekrát. Jako příklad řekněme, že operace zhutňování MOB probíhá denně s měsíční zásadou agregace. V den 1 komprimace MOB komprimuje všechny soubory za den 1 do jednoho souboru. V den 2 komprimace MOB komprimuje soubor ze dne 1 a soubory ze dne 2 do nového souboru; v den 3 komprimace MOB zkomprimuje soubor ze dne 2 a soubory ze dne 3 do nového souboru, pokračuje až do posledního dne v měsíci. V tomto případě jsou soubory ze dne 1 zkomprimovány více než 30krát, a tak se množství IO zápisu zesiluje více než 30x.

Cílem návrhu Apache HBase MOB je snížit zesílení zápisu vytvořené komprimací MOB. Tento naivní přístup maří cíl designu.

Konečný implementovaný přístup

Aby se překonal nedostatek původně navrhovaného přístupu, je v HBASE-16981 přijato postupné zhutňování MOB pro nové týdenní a měsíční zásady. Obrázek 2 ukazuje, jak to funguje s měsíční politikou, podobně to funguje pro týdenní politiku.

Obrázek 2 Postupné zhutňování MOB s měsíční politikou

Jak ukazuje obrázek 2, ke zhutnění MOB dojde 15. 11. 2016. Soubory v aktuálním kalendářním týdnu jsou komprimovány na základě denního oddílu s nakonfigurovaným prahem MOB. Na obrázku 2 jsou soubory pro 14. 11. 2016 slisovány dohromady a soubory pro 15. 11. 2016 jsou slisovány dohromady. Soubory v minulých kalendářních týdnech aktuálního měsíce jsou komprimovány na základě týdenního oddílu s týdenním prahem (konfigurováno-MOB-threshold x 7). Na obrázku 2 jsou soubory od 1.11.2016 do 6.11.2016 slisovány dohromady a soubory od 7.11.2016 do 13.11.2016 jsou slisovány dohromady. Soubory v minulých měsících jsou komprimovány na základě měsíčního oddílu s měsíčním prahem (konfigurováno-MOB-threshold x 28). Na obrázku 2 jsou soubory od 1. 10. 2016 do 31. 10. 2016 slisovány dohromady. Jak si můžete všimnout, první kalendářní týden v listopadu 2016 je od 31.10.2016 do 6.11.2016. Vzhledem k tomu, že 31. 10. 2016 je minulý měsíc, soubory pro tento den jsou komprimovány na základě měsíčního oddílu, takže pro týdenní oddíl zbývá pouze 6 dní (11. 1. 2016 ~ 6. 11. 2016). Po zhutnění existuje 5 souborů, pokud je správně nakonfigurován práh zhutnění MOB a velikost dávky zhutnění MOB.

S tímto designem procházejí soubory MOB 2-stupňovým nebo 3-stupňovým zhutněním. V každé fázi se použije denní oddíl, týdenní oddíl nebo měsíční oddíl se zvyšujícím se prahem zhutnění MOB. Soubory MOB jsou během své životnosti zkomprimovány maximálně 3x normálně s měsíční politikou a maximálně 2x normálně s týdenní politikou.

Další podrobnosti o designu naleznete v [3].

Využití

Ve výchozím nastavení je zásada oddílu komprimace MOB denní. Chcete-li použít týdenní nebo měsíční politiku, byl pro rodinu sloupců MOB přidán nový atribut MOB_COMPACT_PARTITION_POLICY. Uživatel může nastavit tento atribut při vytváření tabulky z prostředí HBase.

>create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly’}

Uživatel může také změnit MOB_COMPACT_PARTITION_POLICY existující tabulky z prostředí HBase.

>alter 't1', {NAME => 'f1', MOB_COMPACT_PARTITION_POLICY => 'monthly'}

Pokud se zásada změní z denní na týdenní nebo měsíční nebo z týdenní na měsíční, další komprimace MOB znovu zkomprimuje soubory MOB, které byly komprimovány pomocí předchozí zásady. Pokud se zásada změní z měsíčního nebo týdenního na denní nebo z měsíčního na týdenní, již zkomprimované soubory MOB s předchozí zásadou nebudou znovu komprimovány s novou zásadou.

Závěr

HBASE-16981 řeší problém se změnou velikosti souborů pomocí Apache HBase MOB. Bude k dispozici ve verzi Apache HBase 2.0.0. CDH podporuje Apache HBase MOB v CDH 5.4.0+. HBASE-16981 je zpětně portován a bude dostupný v CDH 5.11.0.

Poděkování

Zvláštní poděkování patří Jingcheng Du a Anoop Sam John za pomoc při návrhu a kontrole HBASE-16981, Jonathanu Hsiehovi a Seanu Busbeyovi za recenzi blogu.

Odkazy

[1] https://clouderatemp.wpengine.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/

[2] https://clouderatemp.wpengine.com/blog/2009/02/the-small-files-problem/

[3] https://issues.apache.org/jira/browse/HBASE-16981


  1. MongoDB:Jedinečný klíč ve vloženém dokumentu

  2. Hledání hodnot pomocí částečného názvu klíče v Redis Sorted Set

  3. Jak automatizovat a spravovat MongoDB pomocí ClusterControl

  4. Jak uložit a načíst relaci z Redis