V tomto blogu probereme ukázku Proof of Concept pro HBase.
Zde máme datovou sadu jako na obrázku níže.
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)
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.