HBase POC pavyzdys



Šiame įraše aptariamas pavyzdinis HBase koncepcijos įrodymas. Norėdami geriau suprasti „HBase“, galite rasti aiškų šios sąvokos paaiškinimą.

Šiame tinklaraštyje aptarsime pavyzdinį „HBase“ koncepcijos įrodymą.





Čia mes turime duomenų rinkinį, kaip parodyta žemiau esančiame paveikslėlyje.

Sample_Hbase_Use_case



Šį duomenų rinkinį sudaro išsami informacija apie visų gaunamų skambučių, išeinančių skambučių trukmę ir pranešimus, išsiųstus iš konkretaus mobiliojo telefono numerio tam tikrą dieną.

Pirmasis laukas nurodo datą, antrasis - mobiliojo telefono numerį, trečiasis - bendrą gaunamų skambučių trukmę, ketvirtasis - bendrą išeinančių skambučių trukmę, o penktasis - bendrą išsiųstų pranešimų skaičių.

Dabar mūsų užduotis yra iš tam tikros datos gauti telefono informaciją iš gaunamų ir siunčiamų skambučių bei išsiųstų pranešimų trukmės.



Šiuo naudojimo atveju bandau filtruoti 15 įrašustūkst2014 m. Kovo mėn. Štai HBase programa, kaip tai pasiekti.

Žemiau yra visas jo kodas.

visuomenės klasė pavyzdys{

privatus statinis Konfigūracija konf

statinis „HTable“ stalo

visuomenės pavyzdys (String tableName, String colFams) metimai IOException {

konf = HBaseConfiguration. sukurti ()

nustatyti java classpath linux

createTable (tableName, colFams)

stalo = naujas „HTable“ ( konf , tableName)

}

tuštuma createTable (String tableName, String colFams) metimai IOException {

HBaseAdmin hbase = naujas „HBaseAdmin“ ( konf )

HTableDescriptor desc = naujas „HTableDescriptor“ (tableName)

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

desc.addFamily (meta)

hbase.createTable (aprašymas)

}

visuomenės statinis tuštuma addColumnEntry (eilutės lentelės pavadinimas, eilutės eilutė,

String colFamilyName, String colName, String reikšmės)

metimai IOException {

baitas [] rowKey = Baitai. toBaitai (eilutė)

Įdėkite putdata = naujas Įdėti (rowKey)

putdata.add (Baitai. toBaitai (colFamilyName), baitai. toBaitai (colName),

Baitai. toBaitai (vertės))

stalo .put (putdata)

}

visuomenės statinis tuštuma getAllRecord (String tableName, String startPartialKey,

String endPartialKey) metimai IOException {

bandyti {

Nuskaitymo s

jei (startPartialKey == niekinis || endPartialKey == niekinis )

s = naujas Nuskaityti ()

Kitas

s = naujas Nuskaityti (baitai. toBaitai (startPartialKey),

Baitai. toBaitai („endPartialKey“)

„ResultScanner ss =“ stalo .getScanner (-ai)

„HashMap“outputRec = naujas „HashMap“()

String imsi = “”

dėl (Rezultatas r: ss) {

HashMap keyVal = naujas „HashMap“ ()

dėl (KeyValue kv: r.raw ()) {

imsi = naujas Stygos (kv.getRow ()). Substring (10)

keyVal.put ( naujas Stygos (kv.getQualifier ()),

naujas Eilutė (kv.getValue ()))

outputRec.put (imsi, keyVal)

jei (keyVal.size () == 3)

Sistema. išėjo .println(imsi + ” ” + “Incoming minutes:”

+ keyVal.get („c1 ″) +“ Išeinančios minutės: “

+ keyVal.get („c2 ″) +“ Pranešimai: “

+ keyVal.get („c3“))

}

}

} pagaliau {

}

}

visuomenės statinis tuštuma pagrindinis (styginiai [] argumentai) metimai IOException {

String tableName = „daterecords“

String colFamilyNames = „aš“

mėginio bandymas = naujas pavyzdys (tableName, colFamilyNames)

String fileName = “/ namai / cloudera / darbalaukis / duomenys”

// Tai bus nuoroda po vieną eilutę

Styginių linija = niekinis

bandyti {

// FileReader nuskaito tekstinius failus numatytuoju kodavimu.

FileReader fileReader = naujas „FileReader“ (failo pavadinimas)

// Visada suvyniokite „FileReader“ į „BufferedReader“.

BufferedReader bufferedReader = naujas „BufferedReader“ („fileReader“)

kol ((eilutė = bufferedReader.readLine ())! = niekinis ) {

Eilučių [] reikšmės = line.split („“)

addColumnEntry (tableName, reikšmės [0] + „-“ + reikšmės [1],

colFamilyNames, „c1“, reikšmės [2])

addColumnEntry (tableName, reikšmės [0] + „-“ + reikšmės [1],

colFamilyNames, „c2“, vertės [3])

addColumnEntry (tableName, reikšmės [0] + „-“ + reikšmės [1],

colFamilyNames, „c3“, reikšmės [4])

}

bufferedReader.close ()

} pagauti („FileNotFoundException ex“) {

Sistema. išėjo .println („Nepavyko atidaryti failo“ + failo vardas + „’ “)

} pagauti (IOException ex) {

Sistema. išėjo .println („Klaida skaitant failą“ “+ failo vardas +„ ““)

// Arba mes galime tai padaryti:

// ex.printStackTrace ()

}

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

}

}

Čia sukūrėme konfigūracijos objektą, „HTable“ klasę ir „Hbase“ lentelę su pavadinimu: datos įrašai ir stulpelių šeima: i .

Šiuo atveju datos ir mobiliojo telefono numerio, skirto „-“ derinį, skirsime kaip „Hbase“ lentelės eilutės raktą ir gaunamų, siunčiamų skambučių trukmę “, išsiųstų pranešimų skaičių kaip stulpelius„ c1 “ c2 “,„ c3 “- stulpelių šeimai„ i “.

Mes turime įvesties duomenis, saugomus „Cloudera“ vietinėje failų sistemoje. Taigi turime parašyti „Java Logic“, kuri nuskaito duomenis iš failo.

Žemiau pateikiama „Java“ logika.

Šiuo metodu duomenis saugome kiekvieno stulpelių šeimos stulpelio lentelėje.

Naudodami nuskaitymo komandą, mes galime patikrinti duomenis, saugomus „Hbase“ lentelėje „daterecords“.

Duomenis gausite, kaip parodyta žemiau.

Dabar sėkmingai įterpėme duomenis į „HBase“ lentelę.

Paimkime įrašus, saugomus konkrečios datos lentelėje.

Šiuo naudojimo atveju mes bandome atkurti „Data“ įrašus: 15tūkst2014 m. Kovo mėn

Norėdami gauti įrašus, mes sukūrėme metodą

„getAllRecord“ (String tableName, String startPartialKey, String endPartialKey)

Pirmasis parametras nurodo lentelės pavadinimą, antrasis - pradžios datą, nuo kurios turime gauti duomenis, o trečiasis yra kita pradžios datos data.

Pvz .:

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

Dabar leiskite mums suprasti logika šio metodo.

Mes bandome nuskaityti „Hbase“ lentelę naudodami „HBase“ API naudodami „startPartialKey“ ir „endPartialKey“.

Kadangi „StartPartialKey“ ir „endPartialkey“ nėra niekiniai, jie bus užblokuoti ir nuskaityti įrašus, kurių vertė yra startPartialKey.

Mes sukūrėme „Result“ skaitytuvo objektą, kuriame saugomi nuskaityti „Hbase“ lentelės įrašai ir „HashMap“, kad būtų išsaugota gautas rezultatas.

Mes kuriame „Result“ objektą, kad gautume duomenų saugyklą „Result Scanner“ ir vykdytume „for loop“.

„imsi“ yra eilutė, apibrėžta saugoti mobiliojo telefono numerį, o „keyVal“ yra maišos žemėlapis, kuriame saugoma išvestis, gauta iš konkretaus telefono stulpelio.

Mes davėme 20140315-1234567890 kaip eilės klavišas prie „Hbase“ stalo. Šiame 20140315 nurodoma data, o 1234567890 - mobiliojo telefono numeris.

Kadangi mums reikalingas tik mobiliojo telefono numeris, jam gauti naudojame substringo metodą.

Duomenis gauname iš „r.raw“ () ir saugome „HashMap“ naudodami „Put“.

Galiausiai bandome juos atsispausdinti ant konsolės.

Rezultatas bus toks, koks pateiktas žemiau.

java yra-santykiai

Mes sėkmingai gavome įrašus apie datą: 15tūkst2014 m. Kovo mėn.