Campione HBase POC



Questo post discute di un esempio di Proof of Concept per HBase. Puoi trovare una chiara spiegazione del concetto per migliorare la tua comprensione di HBase.

In questo blog discuteremo di un esempio di Proof of Concept per HBase.





Qui abbiamo un set di dati come nell'immagine sottostante.

Sample_Hbase_Use_case



Questo set di dati è costituito dai dettagli sulla durata totale delle chiamate in entrata, delle chiamate in uscita e dei messaggi inviati da un determinato numero di cellulare in una data specifica.

Il primo campo rappresenta la data, il secondo campo rappresenta il numero di cellulare, il terzo campo rappresenta la durata totale delle chiamate in arrivo, il quarto campo rappresenta la durata totale delle chiamate in uscita e il quinto campo rappresenta il numero totale di messaggi inviati.

Ora il nostro compito è recuperare le informazioni sulla durata delle chiamate in entrata e in uscita e dei messaggi inviati, da un numero di telefono in una determinata data.



In questo caso d'uso, sto cercando di filtrare i record di 15thMarzo 2014. Ecco un programma HBase per raggiungere questo obiettivo.

Di seguito è riportato il codice completo di esso.

pubblico classe campione{

privato statico Configurazione conf

statico HTable tavolo

pubblico sample (String tableName, String colFams) lanci IOException {

conf = HBaseConfiguration. creare ()

createTable (tableName, colFams)

tavolo = nuovo HTable ( conf , tableName)

}

vuoto createTable (String tableName, String colFams) lanci IOException {

HBaseAdmin hbase = nuovo HBaseAdmin ( conf )

HTableDescriptor desc = nuovo HTableDescriptor (tableName)

HColumnDescriptor meta = nuovo HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

pubblico statico vuoto addColumnEntry (String tableName, String row,

String colFamilyName, String colName, String values)

lanci IOException {

byte [] rowKey = byte. toBytes (riga)

Metti putdata = nuovo Put (rowKey)

putdata.add (Bytes. toBytes (colFamilyName), Bytes. toBytes (colName),

Byte. toBytes (valori))

tavolo .put (putdata)

}

pubblico statico vuoto getAllRecord (String tableName, String startPartialKey,

String endPartialKey) lanci IOException {

provare {

Scansiona s

Se (startPartialKey == nullo || endPartialKey == nullo )

s = nuovo Scansione()

altro

s = nuovo Scansione (Bytes. toBytes (startPartialKey),

Byte. toBytes (endPartialKey))

ResultScanner ss = tavolo .getScanner / i

HashMapoutputRec = nuovo HashMap()

String imsi = ''

per (Risultato r: ss) {

come convertire double in int java

HashMap keyVal = nuovo HashMap ()

per (KeyValue kv: r.raw ()) {

imsi = nuovo Stringa (kv.getRow ()). Sottostringa (10)

keyVal.put ( nuovo Stringa (kv.getQualifier ()),

nuovo Stringa (kv.getValue ()))

outputRec.put (imsi, keyVal)

Se (keyVal.size () == 3)

Sistema. su .println (prendi + '' + 'Minuti in arrivo:'

+ keyVal.get ('c1 ″) +' Minuti in arrivo: '

+ keyVal.get ('c2 ″) +' Messaggi: '

+ keyVal.get ('c3'))

}

}

} infine {

}

}

pubblico statico vuoto main (String [] args) lanci IOException {

String tableName = 'daterecords'

Stringa colFamilyNames = 'i'

campione di prova = nuovo sample (tableName, colFamilyNames)

String fileName = '/ home / cloudera / Desktop / data'

// Questo farà riferimento a una riga alla volta

Linea stringa = nullo

provare {

// FileReader legge i file di testo nella codifica predefinita.

FileReader fileReader = nuovo FileReader (fileName)

// Racchiudi sempre FileReader in BufferedReader.

BufferedReader bufferedReader = nuovo BufferedReader (fileReader)

mentre ((line = bufferedReader.readLine ())! = nullo ) {

String [] values ​​= line.split ('')

addColumnEntry (tableName, valori [0] + '-' + valori [1],

colFamilyNames, 'c1', values ​​[2])

addColumnEntry (tableName, valori [0] + '-' + valori [1],

c ++ come ordinare un array

colFamilyNames, 'c2', values ​​[3])

addColumnEntry (tableName, valori [0] + '-' + valori [1],

colFamilyNames, 'c3', values ​​[4])

}

bufferedReader.close ()

} catturare (FileNotFoundException ex) {

Sistema. su .println ('Impossibile aprire il file‘ '+ fileName +' ‘')

} catturare (IOException ex) {

Sistema. su .println ('Errore durante la lettura del file‘ '+ fileName +' ‘')

// Oppure potremmo semplicemente fare questo:

// ex.printStackTrace ()

}

getAllRecord (tableName, '20140315', '20140316')

}

}

Qui abbiamo creato un oggetto di configurazione, classe HTable e creando la tabella Hbase con nome: daterecords e la famiglia di colonne: io .

In questo caso d'uso, prenderemo la combinazione di data e numero di cellulare separati da '-' come chiave di riga per questa tabella Hbase e le durate delle chiamate in entrata e in uscita ', il numero di messaggi inviati nelle colonne' c1 ', c2 ',' c3 'per la famiglia di colonne' i '.

Abbiamo i dati di input memorizzati nel file system locale di Cloudera. Quindi dobbiamo scrivere Java Logic che legge i dati dal file.

Di seguito è riportata la logica Java.

In questo metodo memorizziamo i dati nella tabella per ogni colonna della famiglia di colonne.

Possiamo controllare i dati memorizzati nella tabella Hbase 'daterecords' utilizzando il comando di scansione.

Riceverai i dati come nell'immagine sottostante.

Ora abbiamo inserito correttamente i dati nella tabella HBase.

Cerchiamo di recuperare i record memorizzati nella tabella di una data particolare.

In questo caso d'uso, stiamo cercando di recuperare i record della Data: 15thMarzo 2014

Per recuperare i record abbiamo creato un metodo

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Il primo parametro rappresenta il nome della tabella, il secondo rappresenta la data di inizio da cui dobbiamo recuperare i dati e il terzo è la data di inizio successiva.

Per esempio:

getAllRecord (tableName, '20140315', '20140316')

Ora capiamo il logica di questo metodo.

Stiamo cercando di scansionare la tabella Hbase utilizzando l'API HBase con l'aiuto di startPartialKey e endPartialKey.

Poiché StartPartialKey e endPartialkey non sono nulli, andrà a altrimenti bloccare ed eseguire la scansione dei record aventi il ​​valore di startPartialKey.

Abbiamo creato un oggetto di Result scanner che memorizza i record scansionati della tabella Hbase e una HashMap per memorizzare l'output che sarà il risultato.

Stiamo creando un oggetto di Result per ottenere l'archivio dati in Result Scanner ed eseguendo un ciclo for.

imsi è la stringa definita per memorizzare il numero di cellulare e keyVal è una mappa hash che memorizza l'output recuperato dalla colonna di un determinato telefono.

Abbiamo dato 20140315-1234567890 come la rowkey alla tabella Hbase. In questo 20140315 rappresenta la data e 1234567890 rappresenta il numero di cellulare.

Poiché richiediamo solo il numero di cellulare, stiamo utilizzando il metodo della sottostringa per recuperarlo.

Stiamo recuperando i dati da r.raw () e archiviandoli in HashMap usando Put.

Infine stiamo cercando di stamparli sulla console.

L'output sarà come nell'immagine sottostante.

Abbiamo recuperato con successo i record della Data: 15thMarzo 2014.