V tomto blogu si povieme niečo o ukážke Proof of Concept pre HBase.
Máme tu množinu údajov, ako na obrázku nižšie.
Táto sada dát pozostáva z podrobností o trvaní celkového počtu prichádzajúcich hovorov, odchádzajúcich hovorov a správ odoslaných z konkrétneho čísla mobilného telefónu v konkrétny deň.
Prvé pole predstavuje dátum, druhé pole predstavuje číslo mobilného telefónu, tretie pole predstavuje celkovú dĺžku prichádzajúcich hovorov, štvrté pole predstavuje celkovú dĺžku odchádzajúcich hovorov a piate pole predstavuje celkový počet odoslaných správ.
Našou úlohou je teraz načítať informácie o dĺžke prichádzajúcich a odchádzajúcich hovorov a odoslaných správ z telefónneho čísla v konkrétny deň.
V tomto prípade použitia sa snažím filtrovať záznamy 15thMarec 2014. Na dosiahnutie tohto cieľa je tu program HBase.
Nižšie je uvedený jeho úplný kód.
verejné trieda vzorka{
súkromné statický Konfigurácia konf
statický HTabuľka stôl
verejné sample (Reťazec tableName, Reťazec colFams) hodí IOException {
konf = HBaseConfiguration. vytvoriť ()
createTable (tableName, colFams)
stôl = Nový HTable ( konf , tableName)
}
neplatný createTable (String tableName, String colFams) hodí IOException {
HBaseAdmin hbase = Nový HBaseAdmin ( konf )
Popis HTableDescriptor = Nový HTableDescriptor (tableName)
HColumnDescriptor meta = Nový HColumnDescriptor (colFams.getBytes ())
desc.addFamily (meta)
hbase.createTable (desc)
}
verejné statický neplatný addColumnEntry (reťazec tableName, riadok reťazca,
Reťazec colFamilyName, Reťazec colName, Reťazcové hodnoty)
hodí IOException {
bajt [] rowKey = bajty. toBytes (riadok)
Vložte putdata = Nový Put (rowKey)
putdata.add (bajty. toBytes (colFamilyName), bajty. toBytes (colName),
Bajty toBytes (hodnoty))
stôl .put (putdata)
}
verejné statický neplatný getAllRecord (reťazec tableName, reťazec startPartialKey,
Reťazec endPartialKey) hodí IOException {
skús {
mergesort v c ++
Scan s
ak (startPartialKey == nulový || endPartialKey == nulový )
s = Nový Skenovať ()
inak
s = Nový Skenovať (bajty. toBytes (startPartialKey),
Bajty toBytes (endPartialKey))
ResultScanner ss = stôl .getScanner (y)
HashMap
Reťazec imsi = “”
pre (Výsledok r: ss) {
HashMap keyVal = Nový HashMap ()
pre (KeyValue kv: r.raw ()) {
imsi = Nový Reťazec (kv.getRow ()). Podreťazec (10)
keyVal.put ( Nový Reťazec (kv.getQualifier ()),
Nový Reťazec (kv.getValue ()))
outputRec.put (imsi, keyVal)
ak (keyVal.size () == 3)
Systém. von .println (trvať + '' + 'Prichádzajúce minúty:'
+ keyVal.get (“c1 ″) +” Odchádzajúce minúty: ”
+ keyVal.get (“c2 ″) +” Správy: ”
+ keyVal.get („c3“))
}
}
} konečne {
}
}
verejné statický neplatný main (String [] args) hodí IOException {
Reťazec tableName = “dátové záznamy”
Reťazec colFamilyNames = “i”
vzorový test Nový sample (nazov_tabulky, colFamilyNames)
Reťazec fileName = “/ home / cloudera / Desktop / data”
// Toto bude odkazovať po jednom riadku
Riadok reťazca = nulový
skús {
// FileReader číta textové súbory v predvolenom kódovaní.
FileReader fileReader = Nový FileReader (názov súboru)
// FileReader vždy zabaľte do BufferedReader.
BufferedReader bufferedReader = Nový BufferedReader (fileReader)
zatiaľ čo ((riadok = bufferedReader.readLine ())! = nulový ) {
Hodnoty reťazca [] = line.split (”“)
addColumnEntry (názov tabuľky, hodnoty [0] + „-“ + hodnoty [1],
colFamilyNames, “c1”, hodnoty [2])
addColumnEntry (názov tabuľky, hodnoty [0] + „-“ + hodnoty [1],
colFamilyNames, “c2”, hodnoty [3])
addColumnEntry (názov tabuľky, hodnoty [0] + „-“ + hodnoty [1],
colFamilyNames, “c3”, hodnoty [4])
}
bufferedReader.close ()
} chytiť (FileNotFoundException ex) {
Systém. von .println („Nemožno otvoriť súbor„ “+ názov súboru +„ „“)
prevodník binárnych čísel na desatinné čísla
} chytiť (Výnimka IOException) {
Systém. von .println („Chyba pri čítaní súboru“ „+ názov súboru +“ „“)
// Alebo by sme mohli urobiť toto:
// ex.printStackTrace ()
}
getAllRecord (názov tabuľky, „20140315“, „20140316“)
}
}
Tu sme vytvorili objekt konfigurácie, triedy HTable a vytvorenie tabuľky Hbase s názvom: dátové záznamy a rodina stĺpcov: i .
V tomto prípade použitia budeme brať kombináciu dátumu a čísla mobilu oddeleného znakom „-“ ako kľúč riadku pre túto tabuľku Hbase a trvanie prichádzajúcich a odchádzajúcich hovorov, počet správ odoslaných ako stĺpce „c1“, c2 ',' c3 'pre rodinu stĺpcov' i '.
Vstupné údaje máme uložené v lokálnom súborovom systéme Cloudera. Musíme teda napísať Java Logic, ktorý číta dáta zo súboru.
Nižšie je uvedená logika Java.
V tejto metóde ukladáme údaje do tabuľky pre každý stĺpec rodiny stĺpcov.
Údaje uložené v tabuľke dátových záznamov Hbase môžeme skontrolovať pomocou príkazu skenovania.
Dostanete údaje ako na nasledujúcom obrázku.
Teraz sme úspešne vložili údaje do tabuľky HBase.
Obnovme záznamy uložené v Tabuľke konkrétneho dátumu.
V tomto prípade použitia sa pokúšame načítať záznamy o Date: 15thMarca 2014
Na získanie záznamov sme vytvorili Metódu
getAllRecord (reťazec tableName, reťazec startPartialKey, reťazec endPartialKey)
Prvý parameter predstavuje názov tabuľky, druhý predstavuje začiatočný dátum, od ktorého potrebujeme údaje načítať, a tretí predstavuje ďalší dátum začiatočného dátumu.
Napr .:
getAllRecord (tableName, „20140315“, „20140316“)
Teraz pochopme logika tejto metódy.
Snažíme sa skenovať Hbase tabuľku pomocou HBase API pomocou startPartialKey a endPartialKey.
Pretože StartPartialKey a endPartialkey nemajú hodnotu null, prejde na else blokovanie a skenovanie záznamov s hodnotou startPartialKey.
Vytvorili sme objekt skenera výsledkov, ktorý ukladá naskenované záznamy tabuľky Hbase a HashMap na ukladanie výstupu, ktorý bude výsledkom.
Vytvárame objekt výsledku, aby sme dostali úložisko dát do skenera výsledkov a vykonali cyklus for.
imsi je reťazec, ktorý je definovaný na uloženie čísla mobilného telefónu, a keyVal je mapa hash, ktorá ukladá výstup načítaný zo stĺpca konkrétneho telefónu.
Dali sme 20140315-1234567890 ako veslovač k tabuľke Hbase. V tomto 20140315 predstavuje dátum a 1234567890 predstavuje číslo mobilného telefónu.
Pretože požadujeme iba mobilné číslo, používame na jeho získanie metódu podreťazca.
Načítavame údaje z r.raw () a ukladáme ich do HashMap pomocou Put.
Nakoniec sa ich pokúšame vytlačiť na konzolu.
Výstup bude ako na nasledujúcom obrázku.
Úspešne sme získali záznamy o dátume: 15thMarca 2014.