2012-02-03 18 views
8

Quasi non so nulla di HBase. Ci scusiamo per le domande di base.Group by In HBase

Immagina di avere una tabella di 100 miliardi di righe con 10 int, una datetime e una colonna di stringhe.

  1. HBase consente di eseguire query su questa tabella e raggruppare il risultato in base alla chiave (anche una chiave composta)?
  2. In caso affermativo, deve eseguire una mappa/ridurre il lavoro ad esso?
  3. Come si alimenta la query?
  4. È possibile che in generale HBase esegua query simili in tempo reale su una tabella?

risposta

12

L'aggregazione dei dati in HBase si interseca con la necessità di "analisi in tempo reale". Anche se HBase non è stato progettato per questo tipo di funzionalità, ne è necessaria una grande quantità. Quindi il numero di modi per farlo è/sarà sviluppato.
1): Registrare la tabella HBase come tabella esterna in Hive e fare aggregazioni. I dati saranno accessibili tramite l'API HBase che non è così efficiente. Configuring Hive with Hbase questa è una discussione su come può essere fatto. È il modo più efficace per raggruppare i dati HBase. Ciò implica l'esecuzione di lavori MR, ma da HHive, non da HBase.
2) È possibile scrivere il proprio lavoro MR lavorando con i dati HBase che si trovano in HFiles nell'HDFS. Sarà il modo più efficiente, ma non semplice e i dati elaborati sarebbero in qualche modo obsoleti. È molto efficiente in quanto i dati non verranno trasferiti tramite l'API HBase, ma saranno accessi direttamente da HDFS in modo sequenziale.
3) La prossima versione di HBase conterrà coprocessori che sarebbero in grado di aggregare all'interno di regioni specifiche. Si può presumere che siano una sorta di stored procedure nella parola RDBMS.
4) In memoria, il lavoro MR interregionale che verrà parralelizzato in un nodo è anche pianificato nelle future versioni di HBase. Consentirà un'elaborazione analitica un po 'più avanzata dei coprocessori.

+0

Grazie per la risposta. Se vado con l'opzione 2, ci sarà tutto il costo necessario per avviare e gestire un M/R dal lancio di Map/Redcude a shufffle e sort e cosa no. Come può essere in tempo reale come? – iCode

+0

Inoltre, se ho bisogno di farlo oggi, la risposta è che non esiste ancora un modo pratico per farlo? Poiché 1 è lento, 3 e 4 sono futuri e 2 è incerto? – iCode

+0

Sì, la mia risposta significa che oggi non c'è modo di farlo in tempo reale. Quando sarà disponibile la prossima versione (chiamata release dei coprocessori) avremo aggregazioni di tempo realt a livello di regione. –

5

LETTURE RANDOM VELOCI = dati PREPARATIVI seduti in HBase! Usa HBase per quello che è ...

1. uno spazio per riporre un sacco di dati.
2. Un luogo da cui è possibile eseguire letture super veloci.
3. Un luogo in cui SQL non ti farà nulla di buono (usa java).

Sebbene sia possibile leggere i dati da HBase e fare tutti i tipi di aggregati direttamente nelle strutture dati Java prima di restituire il risultato aggregato, è meglio lasciare il calcolo su mapreduce. Dalle tue domande, sembra che tu voglia che i dati di origine per il calcolo siedano in HBase. In questo caso, il percorso che si desidera eseguire è avere HBase come dati di origine per un lavoro di ridimensionamento della mappa. Fare calcoli su questo e restituire i dati aggregati. Ma poi di nuovo, perché dovresti leggere da Hbase per eseguire un lavoro di mapreduce? Lasciare i dati seduti alle tabelle HDFS/Hive ed eseguire i lavori di mapreduce su di essi THEN carica i dati nelle tabelle Hbase "pre-preparati" in modo da poter eseguire letture casuali super veloci da esso.

1

Una volta ottenuti i dati preaggregati in HBase, è possibile utilizzare Crux http://github.com/sonalgoyal/crux per eseguire ulteriori drill, slice e dadi dei dati HBase. Crux supporta chiavi composite e semplici, con filtri avanzati e group by.