Domanda

Per favore mi dica come HBase partizioni tavolo dall'altra parte regionservers.

Per esempio, diciamo che le mie chiavi di fila sono interi da 0 a 10M e ho 10 regionservers.
Questo significa che prima regionserver memorizza tutte le righe con i tasti con i valori 0 - 10M, secondo 1M - 2M, terzo 2M-3M, ... decimo 9M -? 10M

Vorrei che la mia chiave di fila per essere timestamp, ma caso più query si applicherebbe a tutte le date, tutte le query saranno trattati da un solo regionserver, è vero?

O forse questi dati sarebbero diffuse in modo diverso?
O forse posso in qualche modo creare più regioni di me server regione, quindi (secondo dato esempio) del server 1 avrebbe tasti da 0 - 0,5m e 3M - 3,5m, in questo modo i miei dati sarebbero diffusione più allo stesso modo, è questo possibile?


Aggiorna

Ho appena scoperto che non c'è possibilità hbase.hregion.max.filesize, pensi che questo possa risolvere il mio problema?

È stato utile?

Soluzione

WRT il partizionamento, si può leggere Lars' post del blog su architettura o di carta BigTable di Google di HBase che HBase "cloni".

Se la chiave riga è solo un timestamp, allora sì la regione con i tasti più grandi saranno sempre colpito con nuove richieste (dal momento che una regione è servita solo da un singolo server regione).

Vuoi utilizzare timestamp al fine di fare scansioni brevi? Se è così, prendere in considerazione la salatura le chiavi (ricerca su Google per quanto Mozilla ha fatto con Sorocco).

Può il prefisso il timestamp con qualsiasi ID? Ad esempio, se si richiede solo i dati per utenti specifici, fare precedere il TS con l'ID utente e vi darà una distribuzione del carico molto migliore.

In caso contrario, quindi utilizzare gli UUID o qualsiasi altra cosa che casualmente distribuire le chiavi.

A proposito di hbase.hregion.maxfilesize

Impostazione della MaxFileSize su quel tavolo (che si può fare con il guscio), non lo rende che ogni regione è esattamente X MB (dove X è il valore impostato) grande. Quindi diciamo che le chiavi di fila sono tutti i timestamp, il che significa che ogni nuova chiave riga è più grande di quello precedente. Questo significa che sarà sempre essere inserito nella regione con il tasto di fine vuota (l'ultima). Ad un certo punto, uno dei file crescerà più grande di MaxFileSize (attraverso compattazioni), e quella regione sarà divisa intorno alla metà. I tasti inferiori saranno nella propria regione, i tasti più alti in un'altra. Ma dal momento che la nuova chiave di riga è sempre più grande della precedente, questo significa che si scrivono solo a quella nuova regione (e così via).

tl;. Dr anche se si dispone di più di 1.000 regioni, con questo schema la regione con i più grandi tasti fila sarà sempre ottenere le scritture, il che significa che il server che ospita regione diventerà un collo di bottiglia

Altri suggerimenti

Option hbase.hregion.max.filesize che è di serie 256 MB di default dimensione massima regione, dopo aver raggiunto questa regione limite viene diviso. Questo significa che i miei dati saranno conservati in più regioni di 256MB e, eventualmente, uno più piccolo.
Quindi

  

Vorrei che la mia chiave di fila per essere timestamp, ma caso più query si applicherebbe a tutte le date, tutte le query saranno trattati da un solo regionserver, è vero?

Questo non è vero, perché i dati più recenti saranno divisi anche in regioni di dimensioni 256 MB e memorizzati su diversi regionservers.

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