Na ovom blogu razgovarat ćemo o primjeru Dokaza koncepta za HBase.
Ovdje imamo skup podataka kao na donjoj slici.
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)
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.