HBase
 sql >> Database >  >> NoSQL >> HBase

Presentazione delle politiche di partizione di compattazione MOB (Medium Object Storage) di Apache HBase

Introduzione

La funzione Apache HBase Medium Object Storage (MOB) è stata introdotta da HBASE-11339. Questa funzione migliora l'accesso in lettura e scrittura a bassa latenza per valori di dimensioni moderate (idealmente da 100.000 a 10 MB in base ai risultati dei nostri test), rendendolo adatto per l'archiviazione di documenti, immagini e altri oggetti di dimensioni moderate [1]. La funzione Apache HBase MOB ottiene questo miglioramento separando i percorsi IO per i riferimenti ai file e gli oggetti MOB, applicando diverse politiche di compattazione ai MOB e riducendo così l'amplificazione di scrittura creata dalle compattazioni di HBase. Gli oggetti MOB sono archiviati in una regione speciale, chiamata regione MOB. Gli oggetti MOB per una tabella vengono archiviati nell'area MOB come file MOB, il che significa che ci saranno molti file MOB in questa regione. Si prega di vedere la Figura 1 da [1] per l'architettura MOB Apache HBase.

Figura 1 Architettura MOB Apache HBase

Inizialmente, i file MOB sono relativamente piccoli (meno di 1 o 2 blocchi HDFS). Per migliorare l'efficienza di Apache HDFS, i file MOB vengono periodicamente uniti in file più grandi tramite un'operazione chiamata compattazione MOB , che è indipendente dal normale processo di compattazione. La versione iniziale della compattazione MOB riscrive i file MOB multipli di un determinato giorno in file MOB più grandi per quel giorno. Usiamo l'elenco di file di esempio di seguito per renderlo più chiaro. La tabella t1 ha due regioni (r1, r2), ha una famiglia di colonne (f1) e MOB abilitato. Puoi vedere che ci sono due prefissi; D279186428a75016b17e4df5ea43d080 corrisponde al valore hash della chiave di avvio per la regione r1 e D41d8cd98f00b204e9800998ecf8427e al valore hash della chiave di avvio per la regione r2. Per la regione r1, ci sono due file MOB ciascuno il 1/1/2016 e il 2/1/2016, e per la regione r2, ci sono 3 file MOB il 1/1/2016 sotto la regione MOB, che è /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

Dopo la compattazione MOB, due file MOB in data 01/01/2016 e 2/01/2016 per la regione r1 vengono compattati in un file per ogni giorno. Tre file MOB in data 1/1/2016 per la regione r2 vengono compressi in un unico file.

D279186428a75016b17e4df5ea43d08020160101 f49a9d9713ab2fb4a8b825485f6a8acf

D279186428a75016b17e4df5ea43d08020160102 bc9176d09424e49a9d9065caf9713ab2

D41d8cd98f00b204e9800998ecf8427e20160101 d9cb0954af623c2345f1b241887721e3

Poiché solo i file MOB dello stesso giorno per una regione possono essere compattati insieme, il limite minimo di file MOB nella directory della singola regione MOB per una famiglia specifica in un anno sarà 365 x numero di regioni. Con 1000 regioni, in 10 anni, ci saranno 365 x 1000 x 10, 3,65 milioni di file dopo la compattazione MOB e continua a crescere! Sfortunatamente, Apache HDFS ha un limite di memoria limitato per il numero di file in una directory [2]. Dopo che il numero di file MOB supera questo limite HDFS, la tabella MOB non è più scrivibile. Il numero massimo predefinito di file in una directory per Apache HDFS è 1 milione. Per 1000 regioni, raggiungerà questo limite in circa 3 anni. Con più regioni, raggiungerà il limite più velocemente.

HBASE-16981 introduce criteri di aggregazione della partizione di compattazione MOB settimanali e mensili per migliorare questo problema di ridimensionamento del conteggio dei file MOB di fattori rispettivamente di 7 o ~30.

Progettazione di politiche di partizione di compattazione MOB settimanali e mensili (HBASE-16981)

L'idea di base di HBASE-16981 consiste nel compattare i file MOB in una settimana di calendario o in un mese di calendario in un numero inferiore di file più grandi. La settimana di calendario è definita dalla ISO 8601, inizia il lunedì e termina la domenica. Normalmente, con la politica settimanale, dopo la compattazione MOB ci sarà un file a settimana per regione; con la politica mensile, dopo la compattazione MOB ci sarà un file al mese per regione. Il numero di file MOB nella directory della regione MOB per una specifica famiglia in un anno sarà ridotto a 52 x numero di regioni con politica settimanale e 12 x numero di regioni con politica mensile. Ciò riduce notevolmente il numero di file MOB dopo la compattazione.

L'approccio proposto iniziale

Quando si verifica la compattazione MOB, HBase master seleziona e aggrega i file MOB entro un mese di calendario o una settimana di calendario in un numero inferiore di file più grandi. A seconda della frequenza con cui si verifica la compattazione MOB, è possibile che i file vengano compattati più volte. Ad esempio, supponiamo che l'operazione di compattazione MOB avvenga quotidianamente con una politica di aggregazione mensile. Il giorno 1, la compattazione MOB compatta tutti i file per il giorno 1 in un unico file. Il giorno 2, la compattazione MOB compatta il file dal giorno 1 ei file dal giorno 2 in un nuovo file; il giorno 3, la compattazione MOB compatta il file dal giorno 2 ei file dal giorno 3 in un nuovo file, che continua fino all'ultimo giorno del mese. In questo caso, i file del giorno 1 vengono compattati più di 30 volte e quindi amplifica la quantità di I/O in scrittura di oltre 30 volte.

L'obiettivo di progettazione di Apache HBase MOB è ridurre l'amplificazione in scrittura creata dalla compattazione MOB. Questo approccio ingenuo vanifica l'obiettivo del design.

L'approccio finale implementato

Al fine di superare la carenza dell'approccio proposto iniziale, la compattazione MOB in fasi viene adottata per le nuove politiche settimanali e mensili in HBASE-16981. La figura 2 mostra come funziona con la politica mensile, funziona in modo simile per la politica settimanale.

Figura 2 Staging della compattazione MOB con policy mensile

Come mostra la Figura 2, la compattazione MOB avviene il 15/11/2016. I file nella settimana di calendario corrente vengono compattati in base alla partizione giornaliera con soglia MOB configurata. Nella figura 2, i file per il 14/11/2016 vengono compattati insieme e i file per il 15/11/2016 vengono compattati insieme. I file nelle ultime settimane di calendario del mese corrente vengono compattati in base alla partizione settimanale con soglia settimanale (soglia MOB configurata x 7). Nella figura 2, i file dal 01/11/2016 al 6/11/2016 vengono compattati insieme e i file dal 7/11/2016 al 13/11/2016 vengono compattati insieme. I file degli ultimi mesi vengono compattati in base alla partizione mensile con soglia mensile (soglia MOB configurata x 28). Nella figura 2, i file dal 1/10/2016 al 31/10/2016 sono compattati insieme. Come si può notare, la prima settimana di calendario di novembre 2016 va dal 31/10/2016 al 6/11/2016. Dal momento che il 31/10/2016 è l'ultimo mese, i file per quel giorno vengono compattati in base alla partizione mensile, lasciando solo 6 giorni per la partizione settimanale (01/11/2016 ~ 6/11/2016). Dopo la compattazione, sono presenti 5 file se la soglia di compattazione MOB e la dimensione batch di compattazione MOB sono configurate in modo appropriato.

Con questo design, i file MOB passano attraverso compattazioni a 2 o 3 stadi. In ogni fase, vengono applicate partizione giornaliera, partizione settimanale o partizione mensile con soglia di compattazione MOB crescente. I file MOB vengono compattati al massimo 3 volte normalmente con criteri mensili e al massimo 2 volte normalmente con criteri settimanali nel corso della loro vita.

Per maggiori dettagli sul design, vedere [3].

Utilizzo

Per impostazione predefinita, la politica di partizione di compattazione MOB è giornaliera. Per applicare la politica settimanale o mensile, è stato aggiunto un nuovo attributo MOB_COMPACT_PARTITION_POLICY per la famiglia di colonne MOB. L'utente può impostare questo attributo durante la creazione di una tabella dalla shell HBase.

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

L'utente può anche modificare il MOB_COMPACT_PARTITION_POLICY della tabella esistente dalla shell HBase.

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

Se la politica cambia da giornaliera a settimanale o mensile, o da settimanale a mensile, la successiva compattazione MOB ricompatta i file MOB che sono stati compattati con la politica precedente. Se la polizza cambia da mensile o settimanale a giornaliera, o da mensile a settimanale, i file MOB già compattati con la polizza precedente non verranno ricompattati con la nuova polizza.

Conclusione

HBASE-16981 risolve il problema di ridimensionamento del numero di file con Apache HBase MOB. Sarà disponibile nella versione Apache HBase 2.0.0. CDH supporta Apache HBase MOB in CDH 5.4.0+. HBASE-16981 è sottoposto a backport e sarà disponibile in CDH 5.11.0.

Ringraziamenti

Un ringraziamento speciale a Jingcheng Du e Anoop Sam John per l'aiuto nella progettazione e revisione di HBASE-16981, Jonathan Hsieh e Sean Busbey per la revisione del blog.

Riferimenti

[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