Ukázka HBase POC



Tento příspěvek pojednává o ukázce Proof of Concept pro HBase. Můžete najít jasné vysvětlení konceptu, abyste lépe porozuměli HBase.

V tomto blogu probereme ukázku Proof of Concept pro HBase.





Zde máme datovou sadu jako na obrázku níže.

Sample_Hbase_Use_case



Tato datová sada se skládá z podrobností o délce celkového příchozího volání, odchozího hovoru a zpráv odeslaných z konkrétního čísla mobilního telefonu k určitému datu.

První pole představuje datum, druhé pole představuje číslo mobilního telefonu, třetí pole představuje celkovou dobu příchozích hovorů, čtvrté pole představuje celkovou dobu odchozích hovorů a páté pole představuje celkový počet odeslaných zpráv.

Nyní je naším úkolem získat informace o délce příchozích a odchozích hovorů a odeslaných zpráv z telefonního čísla k určitému datu.



V tomto případě použití se snažím filtrovat záznamy 15thBřezen 2014. K dosažení tohoto cíle je zde program HBase.

Níže je uveden kompletní kód.

veřejnost třída vzorek{

soukromé statický Konfigurace konf

statický HT stůl

veřejnost sample (String tableName, String colFams) hodí IOException {

konf = HBaseConfiguration. vytvořit ()

createTable (tableName, colFams)

stůl = Nový HTable ( konf , tableName)

}

prázdnota createTable (String tableName, String colFams) hodí IOException {

HBaseAdmin hbase = Nový HBaseAdmin ( konf )

Popis HTableDescriptor = Nový HTableDescriptor (název_tabulky)

HColumnDescriptor meta = Nový HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

veřejnost statický prázdnota addColumnEntry (řetězec název_tabulky, řádek řetězce,

String colFamilyName, String colName, String values)

hodí IOException {

byte [] rowKey = bajty. toBytes (řádek)

Vložte putdata = Nový Put (rowKey)

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

Bajty toBytes (hodnoty))

stůl .put (putdata)

}

veřejnost statický prázdnota getAllRecord (String tableName, String startPartialKey,

Řetězec endPartialKey) hodí IOException {

Snaž se {

mergesort v c ++

Scan s

-li (startPartialKey == nula || endPartialKey == nula )

s = Nový Skenovat()

jiný

s = Nový Skenovat (bajty. toBytes (startPartialKey),

Bajty toBytes (endPartialKey))

ResultScanner ss = stůl .getScanner (y)

HashMapoutputRec = Nový HashMap()

Řetězec imsi = “”

pro (Výsledek r: ss) {

HashMap keyVal = Nový HashMap ()

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

imsi = Nový Řetězec (kv.getRow ()). Podřetězec (10)

keyVal.put ( Nový Řetězec (kv.getQualifier ()),

Nový Řetězec (kv.getValue ()))

outputRec.put (imsi, keyVal)

-li (keyVal.size () == 3)

Systém. ven .println (trvat + '' + 'Příchozí minuty:'

+ keyVal.get („c1 ″) +„ Odchozí minuty: “

+ keyVal.get (“c2 ″) +” Zprávy: ”

+ keyVal.get („c3“))

}

}

} Konečně {

}

}

veřejnost statický prázdnota main (String [] args) hodí IOException {

Řetězec tableName = “datové záznamy”

Řetězec colFamilyNames = “i”

test vzorku Nový sample (název_tabulky, colFamilyNames)

Řetězcový název souboru = „/ home / cloudera / Desktop / data“

// Toto bude odkazovat po jednom řádku

Řetězcová čára = nula

Snaž se {

// FileReader čte textové soubory ve výchozím kódování.

FileReader fileReader = Nový FileReader (název souboru)

// FileReader vždy zabalte do BufferedReaderu.

BufferedReader bufferedReader = Nový BufferedReader (fileReader)

zatímco ((řádek = bufferedReader.readLine ())! = nula ) {

String [] values ​​= line.split (”“)

addColumnEntry (název_tabulky, hodnoty [0] + „-“ + hodnoty [1],

colFamilyNames, “c1”, hodnoty [2])

addColumnEntry (název_tabulky, hodnoty [0] + „-“ + hodnoty [1],

colFamilyNames, “c2”, hodnoty [3])

addColumnEntry (název_tabulky, hodnoty [0] + „-“ + hodnoty [1],

colFamilyNames, “c3”, hodnoty [4])

}

bufferedReader.close ()

} úlovek (FileNotFoundException ex) {

Systém. ven .println („Nelze otevřít soubor„ “+ název souboru +„ „“)

pole php print_r

} úlovek (Výjimka IOException) {

Systém. ven .println („Chyba při čtení souboru“ „+ název souboru +“ „“)

// Nebo bychom mohli udělat toto:

// ex.printStackTrace ()

}

getAllRecord (název_tabulky, „20140315“, „20140316“)

}

}

Zde jsme vytvořili objekt konfigurace, třídy HTable a vytvoření tabulky Hbase s názvem: datové záznamy a rodina sloupců: i .

V tomto případě použití budeme brát kombinaci data a mobilního čísla odděleného znakem „-“ jako klíč řádku pro tuto tabulku Hbase a trvání příchozích a odchozích hovorů, počet zpráv odeslaných jako sloupce „c1“, „ c2 ',' c3 'pro rodinu sloupců' i '.

Máme vstupní data uložená v místním systému souborů Cloudera. Musíme tedy napsat logiku Java, která čte data ze souboru.

Níže je logika Java.

V této metodě ukládáme data do tabulky pro každý sloupec rodiny sloupců.

Můžeme zkontrolovat data uložená v tabulce datových záznamů Hbase pomocí příkazu skenování.

Obdržíte údaje jako na následujícím obrázku.

Nyní jsme úspěšně vložili data do tabulky HBase.

Načtěte záznamy uložené v tabulce konkrétního data.

V tomto případě použití se pokoušíme načíst záznamy o Date: 15thBřezna 2014

K načtení záznamů jsme vytvořili Metodu

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

První parametr představuje název tabulky, druhý představuje počáteční datum, od kterého potřebujeme načíst data, a třetí je další datum počátečního data.

Např:

getAllRecord (název_tabulky, „20140315“, „20140316“)

Nyní pochopme logika této metody.

Snažíme se skenovat tabulku Hbase pomocí rozhraní HBase API pomocí startPartialKey a endPartialKey.

Protože StartPartialKey a endPartialkey nejsou null, přejde to do jiného bloku a prohledá záznamy, které mají hodnotu startPartialKey.

Vytvořili jsme objekt skeneru výsledků, který ukládá naskenované záznamy tabulky Hbase a HashMap pro uložení výstupu, který bude výsledkem.

Vytváříme objekt výsledku, abychom získali úložiště dat ve skeneru výsledků a provedli smyčku for.

imsi je řetězec, který je definován pro uložení mobilního čísla a keyVal je Hash Map, který ukládá výstup získaný ze sloupce konkrétního telefonu.

Dali jsme 20140315-1234567890 jako veslice k tabulce Hbase. V tomto 20140315 představuje datum a 1234567890 představuje číslo mobilního telefonu.

Protože vyžadujeme pouze mobilní číslo, používáme k jeho získání metodu podřetězce.

Načítáme data z r.raw () a ukládáme je do HashMap pomocí Put.

Nakonec se je snažíme vytisknout na konzoli.

Výstup bude jako na následujícím obrázku.

Úspěšně jsme načetli záznamy o Date: 15thBřezna 2014.