L'attuale versione (4.2) di CDH — la distribuzione 100% open source di Cloudera di Apache Hadoop e progetti correlati (incluso Apache HBase) — ha introdotto una nuova funzionalità HBase, recentemente approdata nel trunk, che consente a un amministratore di scattare un'istantanea di un determinato tabella.
Prima di CDH 4.2, l'unico modo per eseguire il backup o clonare una tabella era utilizzare Copy/Export Table oppure, dopo aver disabilitato la tabella, copiare tutti gli hfile in HDFS. Copia/Esporta tabella è un insieme di strumenti che utilizza MapReduce per scansionare e copiare la tabella, ma con un impatto diretto sulle prestazioni del server regionale. La disabilitazione della tabella interrompe tutte le letture e le scritture, il che sarà quasi sempre inaccettabile.
Al contrario, gli snapshot HBase consentono a un amministratore di clonare una tabella senza copie di dati e con un impatto minimo sui server della regione. L'esportazione dello snapshot in un altro cluster non influisce direttamente su nessuno dei server della regione; export è solo un distcp con un po' di logica in più.
Di seguito sono riportati alcuni casi d'uso per gli snapshot HBase:
- Recupero da errori utente/applicazione
- Ripristina/Ripristina da uno stato sicuro noto.
- Visualizza le istantanee precedenti e unisci selettivamente la differenza nella produzione.
- Salva uno snapshot subito prima di un importante aggiornamento o modifica dell'applicazione.
- Audit e/o rapporti sulle visualizzazioni dei dati in un momento specifico
- Acquisisci dati mensili a fini di conformità.
- Esegui rapporti di fine giornata/mese/trimestre.
- Test dell'applicazione
- Verifica le modifiche allo schema o all'applicazione su dati simili a quelli in produzione da uno snapshot e poi eliminalo. Ad esempio:eseguire uno snapshot, creare una nuova tabella dal contenuto dello snapshot (schema più dati) e manipolare la nuova tabella modificando lo schema, aggiungendo e rimuovendo righe e così via. (La tabella originale, lo snapshot e la nuova tabella rimangono reciprocamente indipendenti.)
- Scarico del lavoro
- Fai uno snapshot, esportalo in un altro cluster ed esegui i tuoi lavori MapReduce. Poiché lo snapshot di esportazione opera a livello HDFS, non rallenti il tuo cluster HBase principale tanto quanto fa CopyTable.
Cos'è un'istantanea?
Uno snapshot è un insieme di informazioni sui metadati che consente a un amministratore di tornare a uno stato precedente della tabella. Uno snapshot non è una copia della tabella; è solo un elenco di nomi di file e non copia i dati. Un ripristino completo dello snapshot significa tornare allo "schema della tabella" precedente e recuperare i dati precedenti perdendo tutte le modifiche apportate dall'acquisizione dello snapshot.
Operazioni
- Scatta uno snapshot: questa operazione tenta di acquisire uno snapshot su una tabella specificata. L'operazione potrebbe non riuscire se le regioni si spostano durante il bilanciamento, la divisione o l'unione.
- Clone uno snapshot: questa operazione crea una nuova tabella utilizzando lo stesso schema e con gli stessi dati presenti nello snapshot specificato. Il risultato di questa operazione è una nuova tabella completamente funzionante che può essere modificata senza alcun impatto sulla tabella originale o sullo snapshot.
- Ripristina uno snapshot: questa operazione riporta lo schema della tabella e i dati allo stato dello snapshot. (Nota:questa operazione annulla tutte le modifiche apportate dall'acquisizione dell'istantanea.)
- Elimina uno snapshot: questa operazione rimuove uno snapshot dal sistema, liberando spazio su disco non condiviso, senza influire sui cloni o altri snapshot.
- Esportare uno snapshot: questa operazione copia i dati e i metadati dello snapshot in un altro cluster. L'operazione coinvolge solo HDFS, quindi non c'è comunicazione con il Master o i Region Server, e quindi il cluster HBase può essere inattivo.
Istantanea a copia zero, ripristino, clonazione
La principale differenza tra uno snapshot e un CopyTable/ExportTable è che le operazioni di snapshot scrivono solo metadati. Non ci sono enormi copie di dati coinvolte.
Uno dei principali principi di progettazione di HBase è che una volta che un file è stato scritto, non verrà mai modificato. Avere file immutabili significa che uno snapshot tiene solo traccia dei file utilizzati al momento dell'operazione di snapshot e durante una compattazione è responsabilità dello snapshot informare il sistema che il file non deve essere eliminato ma invece deve essere archiviato.
Lo stesso principio si applica a un'operazione di clonazione o ripristino. Poiché i file non sono modificabili, viene creata una nuova tabella con solo "collegamenti" ai file a cui fa riferimento lo snapshot.
Export Snapshot è l'unica operazione che richiede una copia dei dati, poiché l'altro cluster non ha i file di dati.
Esporta istantanea e copia/esporta tabella
A parte le migliori garanzie di coerenza che uno snapshot può fornire rispetto a un processo di copia/esportazione, la differenza principale tra l'esportazione di uno snapshot e la copia/esportazione di una tabella è che ExportSnapshot opera a livello HDFS. Ciò significa che i server master e regionali non sono coinvolti in queste operazioni. Di conseguenza, non vengono create cache non necessarie per i dati e non vengono attivate ulteriori pause del GC a causa del numero di oggetti creati durante il processo di scansione. L'impatto sulle prestazioni del cluster HBase deriva dal carico di lavoro aggiuntivo della rete e del disco sperimentato dai DataNode.
Shell HBase:operazioni di snapshot
Conferma che il supporto per le istantanee è attivato controllando se hbase.snapshot.enabled
proprietà in hbase-site.xml è impostata su true. Per acquisire un'istantanea di una tabella specificata, utilizza l'snapshot
comando. (Non vengono eseguite copie di file)
hbase> snapshot ‘tableName’, ‘snapshotName’
Per elencare tutte le istantanee, usa list_snapshot
comando. visualizzerà il nome dello snapshot, la tabella di origine e la data e l'ora di creazione.
hbase> list_snapshots SNAPSHOT TABLE + CREATION TIME TestSnapshot TestTable (Mon Feb 25 21:13:49 +0000 2013)
Per rimuovere un'istantanea, usa delete_snapshot
comando. La rimozione di uno snapshot non influisce sulle tabelle clonate o su altri snapshot successivi acquisiti.
hbase> delete_snapshot 'snapshotName'
Per creare una nuova tabella da uno snapshot specifico (clone), usa clone_snapshot
comando. Non vengono eseguite copie dei dati, quindi non finirai per utilizzare il doppio dello spazio per gli stessi dati.
hbase> clone_snapshot 'snapshotName', 'newTableName'
Per sostituire lo schema/i dati della tabella corrente con il contenuto di un'istantanea specificata, utilizza restore_snapshot
comando.
hbase> restore_snapshot 'snapshotName'
Per esportare uno snapshot esistente in un altro cluster, utilizza ExportSnapshot
attrezzo. L'esportazione non influisce sul carico di lavoro di RegionServers, funziona a livello HDFS e devi specificare una posizione HDFS (l'hbase.rootdir dell'altro cluster).
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot SnapshotName -copy-to hdfs:///srv2:8082/hbase
Limiti attuali
Le istantanee si basano su alcuni presupposti e attualmente ci sono un paio di strumenti che non sono completamente integrati con la nuova funzionalità:
- L'unione di regioni referenziate da uno snapshot provoca la perdita di dati sullo snapshot e sulle tabelle clonate.
- Il ripristino di una tabella con la replica attiva per la tabella ripristinata finisce con i due cluster non sincronizzati. La tabella non viene ripristinata sulla replica.
Conclusione
Attualmente la funzione snapshot include tutte le funzionalità di base richieste, ma c'è ancora molto lavoro da fare, tra cui metriche, integrazione dell'interfaccia utente Web, ottimizzazioni dell'utilizzo del disco e altro ancora.
Per ulteriori informazioni su come configurare HBase e utilizzare gli snapshot, consulta la documentazione.
Matteo Bertozzi è un Software Engineer nel team Platform e un committer HBase.