Vzorka HBase POC



Tento príspevok pojednáva o ukážke Dôkazu koncepcie pre HBase. Môžete nájsť jasné vysvetlenie tohto konceptu, aby ste lepšie pochopili HBase.

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.

Sample_Hbase_Use_case



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)

HashMapoutputRec = Nový 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.