Prøve HBase POC

Dette indlæg diskuterer om et eksempel på et bevis på koncept til HBase. Du kan finde en klar forklaring på konceptet for at forbedre din forståelse af HBase.



I denne blog vil vi diskutere et eksempel på et bevis på koncept til HBase.



Her har vi et datasæt som i nedenstående billede.

Sample_Hbase_Use_case



Dette datasæt består af detaljerne om varigheden af ​​de samlede indgående opkald, udgående opkald og de beskeder, der sendes fra et bestemt mobilnummer på en bestemt dato.

Det første felt repræsenterer dato, det andet felt repræsenterer mobilnummer, det tredje felt repræsenterer den samlede varighed af indgående opkald, det fjerde felt repræsenterer den samlede varighed af udgående opkald, og det femte felt repræsenterer det samlede antal sendte meddelelser.

Nu er vores opgave at hente oplysningerne om varigheden af ​​indgående og udgående opkald og beskeder sendt fra et telefonnummer på en bestemt dato.



I dette brugstilfælde prøver jeg at filtrere posterne på 15thMarts 2014. Her er et HBase-program for at opnå dette.

Nedenfor er den komplette kode for det.

offentlig klasse prøve{

privat statisk Konfiguration konf

statisk HTable bord

javascript-begivenhedsliste med eksempler

offentlig prøve (streng tabelnavn, streng colFams) kaster IOException {

konf = HBaseConfiguration. skab ()

createTable (tabelnavn, colFams)

bord = ny HTable ( konf , tabelnavn)

}

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

HBaseAdmin hbase = ny HBaseAdmin ( konf )

HTableDescriptor desc = ny HTableDescriptor (tabelnavn)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

offentlig statisk ugyldig addColumnEntry (streng tabelnavn, streng række,

String colFamilyName, String colName, Strengværdier)

kaster IOException {

byte [] rowKey = Bytes. toBytes (række)

Put putdata = ny Put (rækkeKey)

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

Bytes. toBytes (værdier))

bord .put (putdata)

}

offentlig statisk ugyldig getAllRecord (String tableName, String startPartialKey,

String endPartialKey) kaster IOException {

prøve {

Scan s

hvis (startPartialKey == nul || endPartialKey == nul )

s = ny Scanning()

andet

s = ny Scan (Bytes. 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. ud .println (tag + ”” + “Indkommende minutter:”

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

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

+ keyVal.get (“c3”))

}

}

} langt om længe {

}

}

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

String tableName = “daterecords”

String colFamilyNames = “i”

prøve test = ny prøve (tabelnavn, colFamilyNames)

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

// Dette refererer til en linje ad gangen

Strenglinje = nul

prøve {

// FileReader læser tekstfiler i standardkodningen.

FileReader fileReader = ny FileReader (filnavn)

// Pak altid FileReader i BufferedReader.

BufferedReader bufferedReader = ny BufferedReader (fileReader)

hvordan man bruger goto i python

mens ((line = bufferedReader.readLine ())! = nul ) {

Streng [] værdier = line.split (”“)

addColumnEntry (tabelnavn, værdier [0] + “-” + værdier [1],

colFamilyNames, “c1”, værdier [2])

addColumnEntry (tabelnavn, værdier [0] + “-” + værdier [1],

colFamilyNames, “c2”, værdier [3])

addColumnEntry (tabelnavn, værdier [0] + “-” + værdier [1],

colFamilyNames, “c3”, værdier [4])

}

bufferedReader.close ()

} fangst (FileNotFoundException ex) {

System. ud .println (“Kan ikke åbne fil‘ ”+ filnavn +“ ‘”)

} fangst (IOException ex) {

System. ud .println (“Fejl ved læsning af fil‘ ”+ filnavn +“ ‘”)

// Eller vi kunne bare gøre dette:

// ex.printStackTrace ()

}

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

}

}

Her har vi oprettet et objekt med konfiguration, HTable-klasse og oprettelse af Hbase-tabel med navn: daterecords og kolonnefamilien: jeg .

I dette brugstilfælde tager vi kombinationen af ​​dato og mobilnummer adskilt af '-' som række for denne Hbase-tabel og de indgående, udgående opkaldsvarigheder ', antallet af meddelelser sendt som kolonnerne' c1 ',' c2 ',' c3 'for kolonnefamilien' i '.

Vi har inputdataene gemt i det lokale filsystem i Cloudera. Så vi er nødt til at skrive Java Logic, der læser dataene fra filen.

tableau hvordan man opretter et sæt

Nedenfor er Java-logikken.

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

Vi kan kontrollere de data, der er gemt i Hbase-tabellen 'daterecords' ved hjælp af scanningskommandoen.

Du modtager dataene som vist i nedenstående billede.

Nu har vi indsat dataene i HBase-tabellen med succes.

Lad os hente de poster, der er gemt i tabellen med en bestemt dato.

I dette brugstilfælde forsøger vi at hente posterne for datoen: 15thMarts 2014

For at hente poster har vi oprettet en metode

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Den første parameter repræsenterer tabelnavnet, den anden repræsenterer startdatoen, hvorfra vi skal hente dataene, og den tredje er den næste dato for startdatoen.

For eksempel:

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

Lad os nu forstå logik af denne metode.

Vi forsøger at scanne Hbase-tabellen ved hjælp af HBase API ved hjælp af startPartialKey og endPartialKey.

Da StartPartialKey og endPartialkey ikke er nul, går den til ellers at blokere og scanne poster, der har værdien af ​​startPartialKey.

Vi har oprettet et objekt fra resultatscanneren, der gemmer de scannede poster i Hbase-tabellen og et HashMap til at gemme det output, der bliver resultatet.

Vi opretter et objekt med Resultat for at få datalageret i resultatscanneren og udføre en for-loop.

imsi er den streng, der er defineret til at gemme mobilnummeret, og keyVal er et Hash-kort, der gemmer output hentet fra kolonnen på en bestemt telefon.

Vi har givet 20140315-1234567890 som den rowkey til Hbase-tabellen. I dette 20140315 repræsenterer datoen og 1234567890 repræsenterer mobilnummeret.

Da vi kun har brug for mobilnummeret, bruger vi substreringsmetode til at hente det.

Vi henter dataene fra r.raw () og gemmer dem i HashMap ved hjælp af Put.

Endelig forsøger vi at udskrive dem på konsollen.

Outputtet vil være som i nedenstående billede.

Vi har med held hentet optegnelserne over datoen: 15thMarts 2014.