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

Introduzione alle istantanee di Apache HBase, parte 2:Approfondimento

Nella parte 1 di questa serie sugli snapshot HBase di Apache, hai imparato a utilizzare la nuova funzionalità Snapshot e un po' di teoria alla base dell'implementazione. Ora è il momento di approfondire un po' più a fondo i dettagli tecnici.

Cos'è un tavolo?

Una tabella HBase comprende un insieme di informazioni sui metadati e un insieme di coppie chiave/valore:

  • Informazioni tabella :un file manifest che descrive le "impostazioni" della tabella, come famiglie di colonne, codec di compressione e codifica, tipi di filtri bloom e così via.
  • Regioni :Le "partizioni" della tabella sono chiamate regioni. Ogni regione è responsabile della gestione di un insieme contiguo di chiavi/valori e sono definiti da una chiave di inizio e una chiave di fine.
  • WAL/MemStore :prima di scrivere i dati sul disco, i put vengono scritti nel registro di scrittura in anticipo (WAL) e quindi archiviati in memoria fino a quando la pressione della memoria non attiva uno svuotamento del disco. Il WAL fornisce un modo semplice per recuperare le put non scaricate su disco in caso di errore.
  • File H :Ad un certo punto tutti i dati vengono scaricati su disco; un HFile è il formato HBase che contiene la chiave/i valori memorizzati. I file H non sono modificabili ma possono essere eliminati durante la compattazione o l'eliminazione della regione.

(Nota:per ulteriori informazioni sul percorso di scrittura HBase, dai un'occhiata al post del blog Percorso di scrittura HBase.)

Cos'è un'istantanea?

Uno snapshot è un insieme di informazioni sui metadati che consente all'amministratore di tornare a uno stato precedente della tabella in cui è stato acquisito. Uno snapshot non è una copia della tabella; il modo più semplice per pensarci è come un insieme di operazioni per tenere traccia dei metadati (informazioni tabella e regioni) e dei dati (HFiles, memstore, WAL). Nessuna copia dei dati è coinvolta durante l'operazione di snapshot.

  • Istantanee offline :Il caso più semplice per scattare un'istantanea è quando una tabella è disabilitata. La disabilitazione di una tabella significa che tutti i dati vengono scaricati sul disco e non vengono accettate scritture o letture. In questo caso, fare uno snapshot è solo questione di esaminare i metadati della tabella e gli HFile su disco e mantenere un riferimento ad essi. Il master esegue questa operazione e il tempo richiesto è determinato principalmente dal tempo richiesto dal namenode HDFS per fornire l'elenco dei file.
  • Istantanee online :nella maggior parte dei casi, tuttavia, le tabelle sono abilitate e ogni server della regione gestisce le richieste di immissione e ricezione. In questo caso il master riceve la richiesta di snapshot e chiede a ciascun server di regione di acquisire uno snapshot delle regioni di cui è responsabile.

La comunicazione tra i server master e regionali avviene tramite Apache ZooKeeper utilizzando una transazione simile a un commit in due fasi. Il Master crea uno znode che significa "prepara lo snapshot". Ciascun server di regione elaborerà la richiesta e preparerà lo snapshot per le regioni dalla tabella di cui è responsabile. Una volta terminato, aggiungono un sottonodo allo znode di richiesta di preparazione con il significato "Ho finito".

Una volta che tutti i server della regione hanno riportato il loro stato, il master crea un altro znode che significa "Commit snapshot"; ogni server della regione finalizzerà lo snapshot e riporterà lo stato come prima dell'adesione al nodo. Una volta che tutti i server della regione hanno segnalato, il master finalizzerà lo snapshot e contrassegnerà l'operazione come completata. Nel caso in cui un server regionale segnali un errore, il master creerà un nuovo znode utilizzato per trasmettere il messaggio di interruzione.

Poiché il server della regione elabora continuamente nuove richieste, casi d'uso diversi potrebbero richiedere modelli di coerenza diversi. Ad esempio, qualcuno potrebbe essere interessato a uno snapshot sciatto senza i nuovi dati nel MemStore, qualcun altro potrebbe desiderare uno snapshot completamente coerente che richieda il blocco delle scritture per un po' e così via.

Per questo motivo, la procedura per acquisire uno snapshot sul server della regione è collegabile. Attualmente, l'unica implementazione presente è "Flush Snapshot", che esegue uno svuotamento prima di acquisire uno snapshot e garantisce solo la coerenza delle righe. In futuro potrebbero essere implementate altre procedure con politiche di coerenza diverse.

Nel caso in linea, il tempo necessario per acquisire uno snapshot è limitato dal tempo richiesto dal server della regione più lento per eseguire l'operazione di snapshot e riportare l'esito positivo al master. Questa operazione è solitamente dell'ordine di pochi secondi.

Archiviazione

Come abbiamo visto prima, gli HFiles sono immutabili. Questo ci consente di evitare di copiare i dati durante le operazioni di istantanea o clonazione, ma durante la compattazione vengono rimossi e sostituiti da una versione compattata. In questo caso, se hai uno snapshot o una tabella clonata che fa riferimento a uno di quei file, invece di eliminarli vengono spostati in una posizione di "archivio". Se elimini uno snapshot e nessun altro fa riferimento ai file a cui fa riferimento lo snapshot, quei file verranno eliminati.

Clonazione e ripristino delle tabelle

Gli snapshot possono essere visti come una soluzione di backup in cui possono essere utilizzati per ripristinare/ripristinare una tabella dopo un errore dell'utente o dell'applicazione, ma la funzione snapshot può consentire molto di più di un semplice backup e ripristino. Dopo aver clonato una tabella da uno snapshot, puoi scrivere un lavoro MapReduce o una semplice applicazione per unire selettivamente le differenze, o ciò che ritieni importante, nella produzione. Un altro caso d'uso è che puoi testare le modifiche allo schema o gli aggiornamenti dei dati senza dover aspettare ore per una copia della tabella e senza finire con molti dati duplicati sul disco.

Clone una tabella da un'istantanea

Quando un amministratore esegue un'operazione di clonazione, una nuova tabella con lo schema della tabella presente nello snapshot viene creata pre-divisa con le chiavi di inizio/fine nelle informazioni sulle regioni dello snapshot. Una volta creati i metadati della tabella, invece di copiare i dati, viene utilizzato lo stesso trucco dello snapshot. Poiché gli HFiles sono immutabili, viene creato solo un riferimento al file sorgente; ciò consente all'operazione di evitare copie di dati e consente di modificare il clone senza influire sulla tabella di origine o sullo snapshot. L'operazione di clonazione viene eseguita dal master.

Ripristina una tabella da un'istantanea

L'operazione di ripristino è simile all'operazione di clonazione; puoi pensarlo come eliminare la tabella e clonarla dall'istantanea. L'operazione di ripristino riporta i vecchi dati presenti nello snapshot rimuovendo dalla tabella tutti i dati che non si trovano anche nello snapshot e anche lo schema della tabella viene ripristinato a quello dello snapshot. Sotto il cofano, il ripristino viene implementato eseguendo una differenza tra lo stato della tabella e l'istantanea, rimuovendo i file che non sono presenti nell'istantanea e aggiungendo riferimenti a quelli nell'istantanea ma non presenti nello stato corrente. Anche il descrittore della tabella viene modificato per riflettere lo "schema" della tabella al momento dell'istantanea. L'operazione di ripristino viene eseguita dal master e la tabella deve essere disabilitata.

Futuri

Attualmente, l'implementazione dello snapshot include tutte le funzionalità di base richieste. Come abbiamo visto, i nuovi criteri di coerenza degli snapshot per gli snapshot online possono fornire maggiore flessibilità, coerenza o miglioramenti delle prestazioni. Una migliore gestione dei file può ridurre il carico sul nodo dei nomi HDFS e migliorare la gestione dello spazio su disco. Inoltre, le metriche, l'interfaccia utente Web (tonalità) e altro sono nell'elenco delle cose da fare.

Conclusione

Gli snapshot HBase aggiungono nuove funzionalità come il "coordinamento delle procedure" utilizzato dallo snapshot online o lo snapshot copy-on-write, il ripristino e i cloni.

Le istantanee forniscono un'alternativa migliore e più rapida alle soluzioni di "backup" e "clonazione" fatte a mano basate su distcp o CopyTable. Tutte le operazioni di snapshot (istantanee, ripristino, clonazione) non comportano copie dei dati, con il risultato di snapshot più rapidi della tabella e risparmio di spazio su disco.

Per ulteriori informazioni su come abilitare e utilizzare gli snapshot, fare riferimento al documento di gestione operativa di HBase.

Matteo Bertozzi è un Software Engineer nel team Platform e un HBase Committer.