Vzorec HBase POC



Ta objava govori o vzorčnem dokazu koncepta za HBase. Za boljše razumevanje HBase lahko najdete jasno razlago koncepta.

V tem blogu bomo razpravljali o vzorčnem dokazu koncepta za HBase.





Tu imamo nabor podatkov kot na spodnji sliki.

Sample_Hbase_Use_case



Ta nabor podatkov vsebuje podrobnosti o trajanju skupnih dohodnih klicev, odhodnih klicev in sporočil, poslanih z določene številke mobilnega telefona na določen datum.

Prvo polje predstavlja datum, drugo polje predstavlja mobilno številko, tretje polje predstavlja skupno trajanje dohodnih klicev, četrto polje predstavlja skupno trajanje odhodnih klicev, peto polje pa skupno število poslanih sporočil.

Zdaj je naša naloga pridobiti podatke o trajanju dohodnih in odhodnih klicev in poslanih sporočil s telefonske številke na določen datum.



V tem primeru poskušam filtrirati zapise 15thMarec 2014. Tukaj je program HBase, da to dosežemo.

Spodaj je celotna koda tega.

javnosti razred vzorec{

zasebno statična Konfiguracija conf

statična HTable tabela

javnosti vzorec (String tableName, String colFams) meti IOException {

conf = HBaseConfiguration. ustvariti ()

createTable (tableName, colFams)

tabela = novo HTable ( conf , tableName)

}

praznino createTable (String tableName, String colFams) meti IOException {

HBaseAdmin hbase = novo HBaseAdmin ( conf )

HTableDescriptor desc = novo HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

javnosti statična praznino addColumnEntry (StringName tabele, Vrstica niza,

String colFamilyName, String colName, String values)

meti IOException {

bajt [] rowKey = bajti. toBytes (vrstica)

Put puttata = novo Put (rowKey)

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

kaj je metoda tostring v javi

Bajti. toBytes (vrednote))

tabela .put (putdata)

}

javnosti statična praznino getAllRecord (String tableName, String startPartialKey,

String endPartialKey) meti IOException {

poskusite {

Optično branje s

če (startPartialKey == nič || endPartialKey == nič )

s = novo Optično branje ()

drugače

s = novo Scan (Bytes. toBytes (startPartialKey),

Bajti. toBytes (endPartialKey))

ResultScanner ss = tabela .getScanner (s)

HashMapoutputRec = novo HashMap()

Niz imsi = ''

za (Rezultat r: ss) {

HashMap keyVal = novo HashMap ()

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

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

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

novo Niz (kv.getValue ()))

outputRec.put (imsi, keyVal)

če (keyVal.size () == 3)

Sistem. ven .println (vzemite + ”” + “Dohodne minute:”

+ keyVal.get (“c1 ″) +” Prihajajoče minute: ”

+ keyVal.get (“c2 ″) +” Sporočila: ”

+ keyVal.get (“c3”))

}

}

} končno {

}

}

javnosti statična praznino glavni (niz [] argumenti) meti IOException {

String tableName = 'daterecords'

Niz colFamilyNames = 'i'

test vzorca = novo vzorec (tableName, colFamilyNames)

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

// To se bo nanašalo na eno vrstico naenkrat

Vrstica v nizu = nič

poskusite {

// FileReader bere besedilne datoteke v privzetem kodiranju.

FileReader fileReader = novo FileReader (imeDatoteke)

// FileReader vedno zavij v BufferedReader.

BufferedReader novo BufferedReader (datotekaReader)

medtem ((vrstica = bufferedReader.readLine ())! = nič ) {

Vrednost niza [] = line.split (”“)

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

kako uporabljati spyder python -

colFamilyNames, “c1”, vrednosti [2])

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

colFamilyNames, “c2”, vrednosti [3])

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

colFamilyNames, “c3”, vrednosti [4])

}

bufferedReader.close ()

} ulov (FileNotFoundException ex) {

Sistem. ven .println ('Datoteke' '+ FileName +' '' ni mogoče odpreti)

} ulov (IOException ex) {

Sistem. ven .println ('Napaka pri branju datoteke' '+ ime datoteke +' '')

// Ali pa bi lahko to storili:

// ex.printStackTrace ()

}

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

}

}

Tu smo ustvarili objekt Configuration, razred HTable in ustvarili tabelo Hbase z imenom: daterecords in družina stolpcev: jaz .

V tem primeru bomo kombinacijo datuma in številke mobilnega telefona ločili z '-' kot ključ vrstice za to tabelo Hbase in trajanje dohodnih, odhodnih klicev ', število sporočil poslanih kot stolpca' c1 ' c2 ',' c3 'za družino stolpcev' i '.

Vhodne podatke imamo shranjene v lokalnem datotečnem sistemu Cloudera. Zato moramo napisati Java Logic, ki bere podatke iz datoteke.

Spodaj je logika Java.

Pri tej metodi podatke shranjujemo v tabelo za vsak stolpec družine stolpcev.

kaj je spremenljivo in nespremenljivo

Podatke, shranjene v tabeli Hbase 'daterecords', lahko preverimo z ukazom za skeniranje.

Podatke boste prejeli kot na spodnji sliki.

Zdaj smo podatke uspešno vstavili v tabelo HBase.

Pridobimo zapise, shranjene v tabeli določenega datuma.

V tem primeru poskušamo pridobiti zapise datuma: 15thMarec 2014

Za pridobivanje zapisov smo ustvarili metodo

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Prvi parameter predstavlja ime tabele, drugi predstavlja začetni datum, od katerega moramo pridobiti podatke, tretji pa je naslednji datum začetnega datuma.

Npr .:

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

Zdaj pa razumimo logiko te metode.

Tabelo Hbase poskušamo pregledati z uporabo API-ja HBase s pomočjo startPartialKey in endPartialKey.

Ker StartPartialKey in endPartialkey nista nuli, bosta blokirala else in skenirala zapise z vrednostjo startPartialKey.

Ustvarili smo objekt optičnega bralnika rezultatov, ki shrani optično prebrane zapise tabele Hbase in HashMap za shranjevanje rezultatov, ki bodo rezultat.

Ustvarjamo objekt rezultata, da shranimo podatke v optični bralnik rezultatov in izvedemo zanko for.

imsi je niz, ki je definiran za shranjevanje mobilne številke, keyVal pa je zemljevid razpršitve, ki shranjuje izhodne podatke, pridobljene iz stolpca določenega telefona.

Dali smo 20140315-1234567890 kot rowkey v tabelo Hbase. V tem letu 20140315 predstavlja datum in 1234567890 predstavlja mobilno številko.

Ker potrebujemo samo mobilno številko, za njeno uporabo uporabljamo metodo podniz.

Podatke pridobivamo iz r.raw () in jih shranjujemo v HashMap z uporabo Put.

Končno jih poskušamo natisniti na konzolo.

Izhod bo enak spodnji sliki.

Uspešno smo pridobili zapise o datumu: 15thMarec 2014.