Eksempel på HBase POC



Dette innlegget diskuterer om et utvalg Proof of Concept for HBase. Du kan finne en klar forklaring på konseptet for å bedre forståelsen av HBase.

I denne bloggen skal vi diskutere et utvalg Proof of Concept for HBase.





Her har vi et datasett som i bildet nedenfor.

Sample_Hbase_Use_case



Dette datasettet består av detaljene om varigheten av totale innkommende samtaler, utgående samtaler og meldingene som sendes fra et bestemt mobilnummer på en bestemt dato.

Det første feltet representerer dato, det andre feltet representerer mobilnummer, det tredje feltet representerer den totale varigheten av innkommende anrop, det fjerde feltet representerer den totale varigheten av utgående samtaler, og det femte feltet representerer det totale antallet sendte meldinger.

Nå er vår oppgave å hente informasjonen om varigheten av innkommende og utgående samtaler og sendte meldinger, fra et telefonnummer på en bestemt dato.



I dette brukstilfellet prøver jeg å filtrere postene på 15thMars 2014. Her er et HBase-program for å oppnå dette.

Nedenfor er den fullstendige koden for den.

offentlig klasse prøve{

privat statisk Konfigurasjon konf

statisk HTable bord

offentlig sample (String tableName, String colFams) kaster IOException {

konf = HBaseConfiguration. skape ()

createTable (tableName, colFams)

bord = ny HTable ( konf , tabellnavn)

}

tomrom createTable (String tableName, String colFams) kaster IOException {

HBaseAdmin hbase = ny HBaseAdmin ( konf )

HTableDescriptor desc = ny HTableDescriptor (tabellnavn)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

offentlig statisk tomrom addColumnEntry (streng tabellnavn, streng rad,

Streng colFamilyName, String colName, Strengverdier)

kaster IOException {

byte [] rowKey = Bytes. toBytes (rad)

Sett putdata = ny Put (rowKey)

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

Bytes. toBytes (verdier))

bord .put (putdata)

}

offentlig statisk tomrom getAllRecord (String tableName, String startPartialKey,

String endPartialKey) kaster IOException {

prøve {

Skann s

hvis (startPartialKey == null || endPartialKey == null )

s = ny Skann ()

ellers

s = ny Skann (byte. toBytes (startPartialKey),

Bytes. toBytes (endPartialKey))

ResultScanner ss = bord .getScanner (s)

HashMapoutputRec = ny HashMap()

String imsi = “”

til (Resultat r: ss) {

HashMap keyVal = ny HashMap ()

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

imsi = ny Streng (kv.getRow ()). Substring (10)

keyVal.put ( ny Streng (kv.getQualifier ()),

ny Streng (kv.getValue ()))

outputRec.put (imsi, keyVal)

hvis (keyVal.size () == 3)

System. ute .println (ta + ”” + “Innkommende minutter:”

+ keyVal.get (“c1 ″) +” Kommende minutter: ”

+ keyVal.get (“c2 ″) +” Meldinger: ”

javascript får størrelsen på matrisen

+ keyVal.get (“c3”))

}

}

} til slutt {

}

}

offentlig statisk tomrom main (String [] args) kaster IOException {

String tableName = “daterecords”

String colFamilyNames = “i”

prøvetest = ny prøve (tabellnavn, kolFamilienavn)

String fileName = “/ home / cloudera / Desktop / data”

// Dette vil referere til en linje om gangen

Strenglinje = null

prøve {

// FileReader leser tekstfiler i standardkodingen.

FileReader fileReader = ny FileReader (filnavn)

def __init __ (selv):

// Pakk alltid FileReader i BufferedReader.

BufferedReader bufferedReader = ny BufferedReader (fileReader)

samtidig som ((linje = bufferedReader.readLine ())! = null ) {

Streng [] -verdier = line.split (”“)

addColumnEntry (tabellnavn, verdier [0] + “-” + verdier [1],

colFamilyNames, “c1”, verdier [2])

addColumnEntry (tabellnavn, verdier [0] + “-” + verdier [1],

colFamilyNames, “c2”, verdier [3])

addColumnEntry (tabellnavn, verdier [0] + “-” + verdier [1],

colFamilyNames, “c3”, verdier [4])

}

bufferedReader.close ()

} å fange (FileNotFoundException ex) {

System. ute .println (“Kan ikke åpne filen‘ ”+ filnavn +“ ‘”)

} å fange (IOException ex) {

System. ute .println (“Feil ved lesing av fil‘ ”+ filnavn +“ ‘”)

// Eller vi kan bare gjøre dette:

// ex.printStackTrace ()

}

getAllRecord (tabellnavn, “20140315”, “20140316”)

}

}

Her har vi opprettet et objekt med konfigurasjon, HTable-klasse og oppretting av Hbase-tabellen med navn: datarekorder og kolonnefamilien: Jeg .

I dette tilfellet tar vi kombinasjonen av dato og mobilnummer atskilt med '-' som radnøkkel for denne Hbase-tabellen og innkommende, utgående samtalevarighet ', antall meldinger sendt som kolonnene' c1 ',' c2 ',' c3 'for kolonnefamilien' i '.

Vi har inndataene lagret i det lokale filsystemet til Cloudera. Så vi må skrive Java Logic som leser dataene fra filen.

Nedenfor er Java-logikken.

I denne metoden lagrer vi dataene i tabellen for hver kolonne i kolonnefamilien.

Vi kan sjekke dataene som er lagret i Hbase-tabellen ‘daterecords’ ved hjelp av skannekommandoen.

Du vil motta dataene som på bildet nedenfor.

Nå har vi satt inn dataene i HBase-tabellen med hell.

La oss hente postene som er lagret i tabellen for en bestemt dato.

I dette brukstilfellet prøver vi å hente postene til Datoen: 15thMars 2014

For å hente postene har vi opprettet en metode

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Den første parameteren representerer tabellnavnet, den andre representerer startdatoen som vi trenger for å hente dataene fra, og den tredje er neste dato for startdatoen.

F.eks .:

getAllRecord (tabellnavn, “20140315”, “20140316”)

La oss nå forstå logikk av denne metoden.

Vi prøver å skanne Hbase-tabellen ved å bruke HBase API ved hjelp av startPartialKey og endPartialKey.

Ettersom StartPartialKey og endPartialkey ikke er null, vil den gå til ellers blokkere og skanne postene som har verdien av startPartialKey.

Vi har opprettet et objekt av resultatscanneren som lagrer de skannede postene i Hbase-tabellen og et HashMap for å lagre utdataene som blir resultatet.

Vi oppretter et objekt for Resultat for å få datalageret til resultatscanneren og utføre en for loop.

imsi er strengen som er definert for å lagre mobilnummeret og keyVal er et Hash-kart som lagrer utdata hentet fra kolonnen til en bestemt telefon.

Vi har gitt 20140315-1234567890 som strekkast til Hbase-tabellen. I denne 20140315 representerer datoen og 1234567890 representerer mobilnummeret.

Siden vi bare trenger mobilnummeret, bruker vi substringsmetode for å hente det.

Vi henter dataene fra r.raw () og lagrer dem i HashMap ved å bruke Put.

Endelig prøver vi å skrive dem ut på konsollen.

Utgangen vil være som i bildet nedenfor.

Vi har med hell hentet postene til datoen: 15thMars 2014.