2011-10-21 6 views
5

Se voglio inserire in una tabella:Esiste un numero di versione massimo in hbase?

row | fam:qualifier | timestamp | value 
1 | foo:bar | 12345 | 2 
1 | foo:bar | 12346 | 3 
1 | foo:bar | 12347 | 2 
1 | foo:bar | 12348 | 1 
. 
. 
. 
1 | foo:bar | 123410 | 2 

posso specificare nel HBase sborsare il numero massimo di versione per avere fom una riga specifica, ma quando ho specificare per esempio '100' solo 4 me tornare Versioni ... C'è un massimo?

risposta

11

restituisce solo 4 versioni perché la famiglia colonna è impostata per memorizzare un massimo di 4 versioni.

Se si desidera memorizzare più versioni è necessario modificare il CF. Utilizzando la shell HBase:

hbase> alter 'table_foo', {NAME => 'column_fam_foo', VERSIONS => 100} 

L'impostazione predefinita per le versioni Max è 1 *:

http://hbase.apache.org/book/schema.versions.html

* sembra che il valore predefinito per le versioni max è stato cambiato da 3 a 1 ad un certo punto.

2

la risposta è in parte ragione. Non è vero: hbase STORES tre versioni. Prova vedi sotto. Vero: è possibile impostare la quantità massima di versioni che HBase restituisce attraverso

alter 'marketdata', NAME => 'field', VERSIONS => 100 

Ma per ora supponiamo, non ho cambiato la variabile di versione.

ho dieci voci nella mia HBase, con timestamp da 0 a 9. Il timestamp più recente è:

hbase(main):025:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask'}         
COLUMN        CELL                     
field:ask      timestamp=9,   value=0.9940174211042572             
1 row(s) in 0.0590 seconds 

hbase(main):026:0> 

I valori di data e ora da 1 a 5 che vengono visualizzati sono:

hbase(main):027:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,5], VERSIONS=>5} 
COLUMN        CELL                     
field:ask      timestamp=4, value=0.530618878519702             
field:ask      timestamp=3, value=0.051028316270589014             
field:ask      timestamp=2,  value=0.11949750640509116             
3 row(s) in 0.0130 seconds 

hbase(main):028:0> 

... e quando ho impostato il mio timestamp di fine su 10, mostra ancora solo le ultime tre versioni PRIMA di quel timestamp e sopprime i precedenti:

hbase(main):028:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,10], VERSIONS=>5} 
COLUMN        CELL                     
field:ask      timestamp=9,  value=0.9940174211042572             
field:ask      timestamp=8,  value=0.6941263513176372             
field:ask      timestamp=7,  value=0.1814043435754933             
3 row(s) in 0.0400 seconds 

hbase(main):029:0> 
+1

attendere, quindi come si può vedere la versione 4,3,2 e 9,8,7 se hbase sta memorizzando solo 3 versioni? Forse la shell restituisce solo 3, per qualsiasi motivo, ma sembra che tu abbia "provato" che ci sono più versioni. La vera risposta è anche più complicata a causa del modo in cui hbase cancella le versioni: in realtà non lo è. Se elimini esplicitamente i dati, aggiungerà una pietra tombale e non vedrai alcun dato prima della pietra tombale. Tutti gli altri dati saranno disponibili (e tutti i dati saranno archiviati) fino al successivo maggiore compattamento che riscriverà il file di archivio e manterrà solo il numero corretto di versioni. – David

+0

Ciao David, si downvoted basa su una risposta a cura di codingFoo. – user1052080

+2

Questa risposta è ancora un po 'fuorviante. Quello che ti manca è il problema di compattazione. Quando HBase memorizza un valore, lo aggiunge al file. Non cancella mai i dati.Per implementare l'eliminazione, si aggiunge una pietra tombale che dice essenzialmente che un valore dovrebbe essere ignorato. Ora, quando arriva una compattazione, il file verrà riscritto, e né vecchie versioni né versioni cancellate verranno riscritte sul nuovo file. Quindi, c'è una finestra temporale in cui sarà possibile vedere le vecchie versioni, ma quella finestra temporale è limitata e non si dovrebbe fare affidamento sulle versioni precedenti. – David

0

Concetto di versione è strettamente mantenuta a livello di famiglia di colonna. È un parametro configurabile.

  columnFamily.setMaxVersions(required version); 

Più versioni si hanno, mentre aumenta la possibilità di leggere i dati da più aumenti di HFiles.

Il modo migliore sarebbe mantenere la versione minima e incapsulare i dati in un singolo blob.

Problemi correlati