Uzorak HBase POC

Ovaj post govori o uzorku dokaza o konceptu HBase. Možete pronaći jasno objašnjenje koncepta kako biste bolje razumjeli HBase.



Na ovom blogu razgovarat ćemo o primjeru Dokaza koncepta za HBase.



Ovdje imamo skup podataka kao na donjoj slici.

Sample_Hbase_Use_case



Ovaj se skup podataka sastoji od pojedinosti o trajanju ukupnih dolaznih poziva, odlaznih poziva i poruka poslanih s određenog broja mobitela određenog datuma.

Prvo polje predstavlja datum, drugo polje predstavlja broj mobitela, treće polje predstavlja ukupno trajanje dolaznih poziva, četvrto polje predstavlja ukupno trajanje odlaznih poziva, a peto polje predstavlja ukupan broj poslanih poruka.

Sada je naš zadatak prikupiti podatke o trajanju dolaznih i odlaznih poziva i poslanih poruka s telefonskog broja određenog datuma.



U ovom slučaju pokušavam filtrirati zapise od 15thOžujka 2014. Evo HBase programa za postizanje toga.

Ispod je potpuni njegov kod.

javnost razred uzorak{

privatni statički Konfiguracija konf

statički HTable stol

javnost uzorak (StringName table, String colFams) baca IOException {

konf = HBaseConfiguration. stvoriti ()

createTable (tableName, colFams)

stol = novi HTable ( konf , tableName)

}

poništiti createTable (StringName table, String colFams) baca IOException {

HBaseAdmin hbase = novi HBaseAdmin ( konf )

HTableDescriptor desc = novi HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

javnost statički poništiti addColumnEntry (StringName table, Niz reda,

String colFamilyName, String colName, String vrijednosti)

baca IOException {

bajt [] rowKey = Bajtovi. toBytes (red)

Stavite putdata = novi Put (rowKey)

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

Bajtova. toBytes (vrijednosti))

stol .put (putdata)

}

javnost statički poništiti getAllRecord (StringName table, String startPartialKey,

String endPartialKey) baca IOException {

probati {

Skeniraj s

ako (startPartialKey == nula || endPartialKey == nula )

s = novi Skenirati()

drugo

s = novi Skeniranje (bajtova. toBytes (startPartialKey),

Bajtova. toBytes (endPartialKey))

ResultScanner ss = stol .getScanner (s)

HashMapoutputRec = novi HashMap()

Niz imsi = ''

za (Rezultat r: ss) {

HashMap keyVal = novi HashMap ()

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

imsi = novi Niz (kv.getRow ()). Podniz (10)

keyVal.put ( novi Niz (kv.getQualifier ()),

novi Niz (kv.getValue ()))

outputRec.put (imsi, keyVal)

ako (keyVal.size () == 3)

Sustav. van .println (uzmi + '' + 'Dolazne minute:'

+ keyVal.get (“c1 ″) +” Dolazeće minute: ”

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

+ keyVal.get (“c3”))

}

}

} konačno {

}

}

javnost statički poništiti glavni (niz [] argumenti) baca IOException {

Niz tableName = 'daterecords'

Niz colFamilyNames = 'i'

uzorak testa = novi uzorak (tableName, colFamilyNames)

StringName datoteke = “/ home / cloudera / Desktop / data”

// Ovo će upućivati ​​jedan po jedan redak

Linija niza = nula

probati {

// FileReader čita tekstualne datoteke u zadanom kodiranju.

FileReader fileReader = novi Čitač datoteka (fileName)

// Uvijek zamotajte FileReader u BufferedReader.

BufferedReader bufferedReader = novi BufferedReader (datotekaReader)

dok ((linija = puferirani čitač.readLine ())! = nula ) {

Niz [] vrijednosti = line.split ('')

addColumnEntry (tableName, vrijednosti [0] + “-” + vrijednosti [1],

colFamilyNames, “c1”, vrijednosti [2])

addColumnEntry (tableName, vrijednosti [0] + “-” + vrijednosti [1],

colFamilyNames, “c2”, vrijednosti [3])

addColumnEntry (tableName, vrijednosti [0] + “-” + vrijednosti [1],

colFamilyNames, “c3”, vrijednosti [4])

}

bufferReader.close ()

} ulov (FileNotFoundException ex) {

Sustav. van .println ('Nije moguće otvoriti datoteku' '+ Ime datoteke +' '')

} ulov (IOException ex) {

Sustav. van .println ('Pogreška prilikom čitanja datoteke' '+ Ime datoteke +' '')

// Ili bismo mogli samo ovo:

// ex.printStackTrace ()

}

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

}

}

Ovdje smo kreirali objekt Konfiguracije, HTable klase i kreirali Hbase tablicu s imenom: daterecords i obitelj stupaca: ja .

U ovom ćemo slučaju kombinaciju datuma i broja mobitela odvojiti s '-' kao ključ retka za ovu Hbase tablicu i trajanje dolaznih, odlaznih poziva ', broj poruka poslanih kao stupci' c1 ', c2 ',' c3 'za obitelj stupaca' i '.

Ulazne podatke imamo pohranjene u lokalnom datotečnom sustavu Cloudere. Zato moramo napisati Java Logic koja čita podatke iz datoteke.

Ispod je Java logika.

Ovom metodom podatke pohranjujemo u tablicu za svaki stupac obitelji stupaca.

Pomoću naredbe za skeniranje možemo provjeriti podatke pohranjene u 'daterecords' tablice Hbase.

Dobit ćete podatke kao na donjoj slici.

Sada smo uspješno umetnuli podatke u tablicu HBase.

Dohvatimo zapise pohranjene u tablici određenog datuma.

U ovom slučaju korištenja pokušavamo dohvatiti zapise Datum: 15thOžujka 2014

Za preuzimanje zapisa stvorili smo Metodu

getAllRecord (StringName table, String startPartialKey, String endPartialKey)

Prvi parametar predstavlja naziv tablice, drugi predstavlja datum početka od kojeg trebamo doći do podataka, a treći je sljedeći datum početka.

Npr .:

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

Sada da razumijemo logika ove metode.

Pokušavamo skenirati tablicu Hbase pomoću HBase API-ja uz pomoć startPartialKey i endPartialKey.

Kako StartPartialKey i endPartialkey nisu nule, preći će na else block i skenirati zapise koji imaju vrijednost startPartialKey.

Stvorili smo objekt skenera rezultata koji pohranjuje skenirane zapise Hbase tablice i HashMap za pohranu rezultata koji će biti rezultat.

python što je __init__

Stvaramo objekt Rezultata da bismo spremili pohranu podataka u Skener rezultata i izvršavali for petlju.

imsi je niz koji je definiran za pohranu broja mobitela, a keyVal je Hash karta koja pohranjuje izlaz preuzet iz stupca određenog telefona.

Dali smo 20140315-1234567890 kao veslački na tablicu Hbase. U ovom 20140315 predstavlja datum, a 1234567890 predstavlja broj mobitela.

Kako nam je potreban samo mobilni broj, koristimo metodu podniza za njegovo dohvaćanje.

Dohvaćamo podatke iz r.raw () i pohranjujemo ih u HashMap koristeći Put.

Napokon ih pokušavamo ispisati na konzoli.

Izlaz će biti kao na donjoj slici.

Uspješno smo pronašli zapise Datum: 15thOžujka 2014.