come creare una copia di una tabella in HBase sullo stesso cluster? o, come servire le richieste utilizzando stato originale pur operando su uno stato di lavoro

StackOverflow https://stackoverflow.com/questions/3504626

Domanda

C'è un modo efficace per creare una copia della struttura della tabella + dati in HBase, nello stesso cluster? Ovviamente la tabella di destinazione dovrebbe avere un nome diverso. Quello che ho trovato finora:

  1. Il processo di CopyTable, che è stato descritto come uno strumento per la copia di dati tra diversi cluster HBase. Penso che sarebbe supportare il funzionamento intra-cluster, ma non hanno alcuna conoscenza su se è stato progettato per gestire questo scenario in modo efficiente.

  2. Utilizzare i posti di lavoro di importazione esportazione +. Facendo che suona come un hack, ma visto che sono nuovo a HBase forse che potrebbe essere una soluzione reale?

Alcuni di voi potrebbe chiedere per questo che sto cercando di fare questo. Il mio scenario è che ho milioni di oggetti che hanno bisogno di accedere a, in uno stato di "istantanea", se volete. C'è un processo batch che esegue tutti i giorni che aggiorna molti di questi oggetti. Se qualche passo in questo processo batch non riesce, ho bisogno di essere in grado di "rollback" allo stato originale. Non solo, durante l'elaborazione batch ho bisogno di essere in grado di servire le richieste allo stato originale.

Quindi il flusso di corrente è che io duplicare la tabella originale di una copia di lavoro, continuo a servire le richieste utilizzando la tabella originale, mentre aggiorno la copia di lavoro. Se il completamento del processo in batch con successo ho notificare tutti i miei servizi di utilizzare la nuova tabella, altrimenti ho appena scartare la nuova tabella.

Questo ha funzionato benissimo con BDB ma io sono in un intero nuovo mondo di veramente grandi quantità di dati ora quindi potrei essere prendendo l'approccio sbagliato. Se qualcuno ha qualche suggerimento di modelli dovrei usare, invece, sono più che benvenuti. : -)

È stato utile?

Soluzione

Tutti i dati in HBase ha una certa data e ora. Si può fare legge (Ottiene e scansioni) con un parametro che indica che si desidera la versione più recente dei dati di un dato timestamp. Una cosa che si potrebbe fare sarebbe quella di è quello di fare la tua legge al server le vostre richieste utilizzando questo parametro che indica un momento prima dell'inizio del processo batch. Una volta che il completamento del lotto, urtare la timestamp lettura fino allo stato attuale.

Un paio di cose da stare attenti, se si prende questo approccio:

    tavoli
  • HBase sono configurati per memorizzare le più recenti versioni N di una determinata cella. Se si sovrascrive i dati nella cella con N valori più recenti, allora si perde il valore più vecchio durante la prossima compattazione. (È inoltre possibile configurare per un TTL per scadere le cellule, ma che non abbastanza suonare come corrisponde al tuo caso).
  • Allo stesso modo, se si eliminano i dati come parte del processo, allora non sarà in grado di leggerlo dopo il prossimo compattazione.

Quindi, se non si fa questione elimina come parte del processo batch, e non si scrive più versioni degli stessi dati che esiste già nella tabella che è stato configurato per salvare, è possibile mantenere servire vecchie richieste fuori della stessa tabella che si sta aggiornando. Questo vi dà effettivamente una fotografia istantanea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top