HBase POC-i proov

Selles postituses käsitletakse HBase'i kontseptsiooni tõestuse näidist. HBase'i paremaks mõistmiseks leiate mõistele selge selgituse.

Selles ajaveebis käsitleme HBase'i kontseptsiooni näidise näidist.





Siin on meil andmekogum, nagu alloleval pildil.

Sample_Hbase_Use_case



See andmekogum koosneb üksikasjadest sissetulevate kõnede koguarvu, väljaminevate kõnede ja konkreetsel mobiilinumbril konkreetsel kuupäeval saadetud sõnumite kohta.

Esimene väli tähistab kuupäeva, teine ​​väli tähistab mobiilinumbrit, kolmas väli tähistab sissetulevate kõnede kogu kestust, neljas väli väljuvate kõnede kogu kestust ja viies väli saadetud sõnumite koguarvu.

Nüüd on meie ülesandeks kindlal kuupäeval telefoninumbrilt hankida teave sissetulevate ja väljaminevate kõnede ning saadetud sõnumite kestuse kohta.



Sellisel juhul proovin filtreerida 15 kirjedthMärts 2014. Siin on HBase'i programm selle saavutamiseks.

Allpool on selle täielik kood.

avalik klass proov{

privaatne staatiline Konfiguratsioon konf

staatiline HTable tabel

avalik näidis (Stringitabeli nimi, String colFams) viskab IOException {

konf = HBaseConfiguration. luua ()

createTable (tableName, colFams)

tabel = uus HTable ( konf , tabeliNimi)

}

tühine createTable (Stringitabeli nimi, String colFams) viskab IOException {

HBaseAdmin hbase = uus HBaseAdmin ( konf )

HTableDescriptor desc = uus HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (kirjeldus)

}

avalik staatiline tühine addColumnEntry (stringitabelNimi, stringirida,

String colFamilyName, String colName, String väärtused)

viskab IOException {

bait [] rowKey = baiti. toBytes (rida)

Pane putdata = uus Pane (ridaKlahv)

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

selgitada erinevust muutumatute ja muutumatute objektide vahel.

Baiti. toBytes (väärtused))

tabel .put (putdata)

}

avalik staatiline tühine getAllRecord (Stringitabeli nimi, String startPartialKey,

String endPartialKey) viskab IOException {

proovige {

Skaneeri s

kui (startPartialKey == null || endPartialKey == null )

s = uus Skannimine ()

muud

s = uus Skannimine (baiti. toBytes (startPartialKey),

Baiti. toBytes [endPartialKey]]

ResultScanner ss = tabel .getScanner (id)

HashMapoutputRec = uus HashMap()

String imsi = “”

eest (Tulemus r: ss) {

HashMap keyVal = uus HashMap ()

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

imsi = uus String (kv.getRow ()). Alamstring (10)

keyVal.put ( uus String (kv.getQualifier ()),

uus String (kv.getValue ()))

outputRec.put (imsi, keyVal)

kui (keyVal.size () == 3)

Süsteem. välja .println (võtke + ”” + “Saabuvad minutid:”

+ keyVal.get (“c1 ″) +” Väljuvad minutid: ”

+ keyVal.get (“c2”) + ”Sõnumid:”

mis on java semafor

+ keyVal.get (“c3”))

}

}

} lõpuks {

}

}

avalik staatiline tühine peamine (stringi [] argumendid) viskab IOException {

StringitabelNimi = “daterecords”

String colFamilyNames = 'i'

proovikatse = uus näidis (tabeliNimi, colFamilyNames)

String fileName = '/ kodu / cloudera / töölaud / andmed'

// See viitab ühele reale korraga

Stringjoon = null

proovige {

// FileReader loeb tekstifaile vaikekodeeringus.

FileReader fileReader = uus FileReader (failinimi)

// Paki FileReader alati puhverdatud lugerisse.

BufferedReader bufferedReader = uus BufferedReader (fileReader)

samas ((rida = bufferedReader.readLine ())! = null ) {

Stringi [] väärtused = line.split ('')

addColumnEntry (tabeliNimi, väärtused [0] + “-” + väärtused [1],

colFamilyNames, “c1”, väärtused [2])

addColumnEntry (tabeliNimi, väärtused [0] + “-” + väärtused [1],

colFamilyNames, “c2”, väärtused [3])

addColumnEntry (tabeliNimi, väärtused [0] + “-” + väärtused [1],

colFamilyNames, “c3”, väärtused [4])

}

bufferedReader.close ()

} saak (FileNotFoundException ex) {

Süsteem. välja .println ('Faili ei õnnestu avada' + failinimi + '' ')

} saak (IOException ex) {

Süsteem. välja .println („Viga faili lugemisel” + failinimi + „” ”)

// Või võiksime lihtsalt seda teha:

// ex.printStackTrace ()

}

getAllRecord (tabeli nimi, „20140315”, „20140316”)

}

}

Siin oleme loonud objekti Konfiguratsioon, HTable-klassi ja Hbase'i tabeli nimega: daterecords ja veergude perekond: i .

Sellisel juhul võtame selle Hbase'i tabeli rea võtmeks kuupäeva ja mobiiltelefoni numbri, mis on eraldatud tähega - - ning sissetulevate ja väljaminevate kõnede kestused, veergudena 'c1' saadetud sõnumite arvu c2 ',' c3 'veeruperekonna i jaoks.

Sisendandmed on meil salvestatud Cloudera lokaalsesse failisüsteemi. Seega peame kirjutama Java Logicu, mis loeb failist andmeid.

Allpool on Java loogika.

Selles meetodis salvestame andmed iga veerupere veeru tabelisse.

Hbase'i tabelis ‘daterecords’ salvestatud andmeid saame kontrollida skannimiskäsu abil.

Andmed saate nagu alloleval pildil.

Nüüd oleme andmed edukalt HBase'i tabelisse sisestanud.

Leidkem konkreetse kuupäeva tabelisse salvestatud kirjed.

Sellisel juhul proovime hankida kuupäeva kirjed: 15thMärts 2014

Kirjete hankimiseks oleme loonud meetodi

getAllRecord (Stringitabeli nimi, String startPartialKey, String endPartialKey)

Esimene parameeter tähistab tabeli nime, teine ​​tähistab alguskuupäeva, millest alates peame andmed hankima, ja kolmas on järgmine alguskuupäev.

Näiteks:

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

Nüüd andke meile mõista loogika selle meetodi

Püüame Hbase'i tabelit skannida, kasutades HBase API-d rakenduste startPartialKey ja endPartialKey abil.

Kuna StartPartialKey ja endPartialkey pole nullid, lähevad need mujale, et blokeerida ja skannida kirjed, mille väärtus on startPartialKey.

Oleme loonud tulemuste skanneri objekti, mis salvestab tabeli Hbase skannitud kirjed ja HashMapi tulemuse saamiseks.

Loome tulemuse skanneri andmehoidla saamiseks tulemuse objekti ja käivitame for loopi.

imsi on string, mis on määratletud mobiiltelefoninumbri salvestamiseks, ja keyVal on Hash Map, mis salvestab konkreetse telefoni veerust saadud väljundi.

Oleme andnud 20140315-1234567890 nagu rea võtmega Hbase'i tabeli juurde. Selles 20140315 tähistab kuupäeva ja 1234567890 tähistab mobiiltelefoni numbrit.

oota ja teavita javas

Kuna vajame ainult mobiilinumbrit, kasutame selle hankimiseks alamstringimeetodit.

Otsime andmeid r.raw () -st ja salvestame need Pushi abil HashMap-i.

Lõpuks proovime need konsoolile printida.

Väljund on selline nagu alloleval pildil.

Oleme kuupäeva kirjed edukalt kätte saanud: 15thMärts 2014.