Näyte HBase POC



Tämä viesti käsittelee HBase-konseptinäytteestä. Löydät selkeän selityksen konseptista, jotta ymmärrät paremmin HBasea.

Tässä blogissa keskustelemme näytteestä HBase-konseptista.





Täällä meillä on tietojoukko kuten alla olevassa kuvassa.

Sample_Hbase_Use_case



Tämä tietojoukko koostuu yksityiskohdista saapuvien puhelujen, lähtevien puhelujen ja tietystä matkapuhelinnumerosta tiettynä päivänä lähetettyjen viestien kestosta.

Ensimmäinen kenttä edustaa päivämäärää, toinen kenttä edustaa matkapuhelinnumeroa, kolmas kenttä edustaa saapuvien puheluiden kokonaiskestoa, neljäs kenttä edustaa lähtevien puhelujen kokonaiskestoa ja viides kenttä edustaa lähetettyjen viestien kokonaismäärää.

Nyt tehtävämme on noutaa saapuvien ja lähtevien puheluiden ja lähetettyjen viestien kestoa koskevat tiedot puhelinnumerosta tiettynä päivänä.



Tässä käyttötapauksessa yritän suodattaa 15: n tietueetthMaaliskuussa 2014. Tässä on HBase-ohjelma tämän saavuttamiseksi.

Alla on sen täydellinen koodi.

julkinen luokassa näyte{

yksityinen staattinen Kokoonpano konf

staattinen HTable pöytä

julkinen näyte (String tableName, String colFams) heittää IOException {

konf = HBaseConfiguration. luoda ()

createTable (tableName, colFams)

pöytä = Uusi HTable ( konf , taulukonNimi)

}

mitätön createTable (String tableName, String colFams) heittää IOException {

HBaseAdmin hbase = Uusi HBaseAdmin ( konf )

HTableDescriptor desc = Uusi HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

julkinen staattinen mitätön addColumnEntry (Merkkijonotaulukon nimi, Merkkijono rivi,

String colFamilyName, String colName, String-arvot)

heittää IOException {

tavu [] rowKey = tavua. tavua (rivi)

Laita putdata = Uusi Laita (rowKey)

putdata.add (tavua. tavua (colFamilyName), tavua. tavua (colName),

Tavua. tavua (arvot))

pöytä .put (putdata)

}

julkinen staattinen mitätön getAllRecord (String-taulukon nimi, String startPartialKey,

Merkkijono endPartialKey) heittää IOException {

yrittää {

Scan s

jos (startPartialKey == tyhjä || endPartialKey == tyhjä )

s = Uusi Skannata()

muu

s = Uusi Skannaa (tavua. tavua (startPartialKey),

Tavua. tavua (endPartialKey))

ResultScanner ss = pöytä .getScanner (s)

HashMapoutputRec = Uusi HashMap()

Merkkijono imsi = “”

varten (Tulos r: ss) {

HashMap keyVal = Uusi HashMap ()

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

imsi = Uusi Merkkijono (kv.getRow ()). Merkkijono (10)

keyVal.put ( Uusi Merkkijono (kv.getQualifier ()),

Uusi Merkkijono (kv.getValue ()))

outputRec.put (imsi, keyVal)

jos (keyVal.size () == 3)

Järjestelmä. ulos .println (ota + ”” + ”Saapuvat minuutit:”

+ keyVal.get (“c1 ″) +” Tulevat minuutit: ”

+ keyVal.get (“c2 ″) +” Viestit: ”

+ keyVal.get (“c3”))

}

hakkeroinnin hyvät ja huonot puolet

}

} lopulta {

}

}

julkinen staattinen mitätön main (Merkkijono [] argumentti) heittää IOException {

String tableName = “päivämäärät”

String colFamilyNames = “i”

näytetesti = Uusi näyte (tableName, colFamilyNames)

String fileName = “/ koti / cloudera / Työpöytä / data”

// Tämä viittaa yhteen riviin kerrallaan

Merkkijono = tyhjä

yrittää {

// FileReader lukee tekstitiedostot oletuskoodauksessa.

FileReader fileReader = Uusi FileReader (tiedostonimi)

// Kääri FileReader aina BufferedReaderiin.

Puskuroitu lukija puskuroitu lukija = Uusi Puskuroitu lukija (fileReader)

sillä aikaa ((rivi = puskuroituReader.readLine ())! = tyhjä ) {

Merkkijono [] arvot = rivi.split ('')

addColumnEntry (taulukonNimi, arvot [0] + “-” + arvot [1],

colFamilyNames, “c1”, arvot [2])

addColumnEntry (taulukonNimi, arvot [0] + “-” + arvot [1],

colFamilyNames, “c2”, arvot [3])

addColumnEntry (taulukonNimi, arvot [0] + “-” + arvot [1],

colFamilyNames, “c3”, arvot [4])

}

puskuroituReader.close ()

} ottaa kiinni (FileNotFoundException ex) {

Järjestelmä. ulos .println ('Tiedostoa ei voi avata' + tiedostonimi + ''')

} ottaa kiinni (IOException ex) {

Järjestelmä. ulos .println ('Virhe tiedoston lukemisessa' '+ tiedostonimi +' '')

// Tai voisimme vain tehdä tämän:

// ex.printStackTrace ()

}

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

}

}

Tässä olemme luoneet objektin Configuration, HTable-luokan ja Hbase-taulukon nimeltä: päivämäärät ja sarakeperhe: i .

Tässä käyttötapauksessa otamme päivämäärän ja matkapuhelinnumeron yhdistelmän, jotka on erotettu '-': lla tämän Hbase-taulukon rivinävaimena ja saapuvien, lähtevien puhelujen kestoina, lähetettyjen viestien lukumääränä sarakkeina 'c1'. c2 ',' c3 'sarakeperheelle' i '.

Meillä on syötetiedot tallennettu Clouderan paikalliseen tiedostojärjestelmään. Joten meidän on kirjoitettava Java Logic, joka lukee tiedot tiedostosta.

Alla on Java-logiikka.

Tässä menetelmässä tallennamme tiedot sarakeperheen jokaisen sarakkeen taulukkoon.

Voimme tarkistaa Hbase-taulukkoon ”daterecords” tallennetut tiedot skannauskomennolla.

Saat tiedot kuten alla olevassa kuvassa.

Nyt olemme lisänneet tiedot HBase-taulukkoon onnistuneesti.

Haetaan tietyn päivämäärän taulukkoon tallennetut tietueet.

Tässä käyttötapauksessa yritämme noutaa päivämäärän tietueet: 15thMaaliskuu 2014

Tietueiden noutamiseksi olemme luoneet menetelmän

getAllRecord (String-taulukon nimi, String startPartialKey, String endPartialKey)

kuinka kirjoittaa tostring-menetelmä

Ensimmäinen parametri edustaa taulukon nimeä, toinen edustaa alkamispäivää, josta alkaen meidän on haettava tiedot, ja kolmas on seuraava alkamispäivä.

Esim:

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

Anna nyt ymmärtää logiikka tämän menetelmän.

Yritämme skannata Hbase-taulukkoa käyttämällä HBase-sovellusliittymää startPartialKey- ja endPartialKey-ohjelmien avulla.

Koska StartPartialKey ja endPartialkey eivät ole nollia, se siirtyy muuhun estoon ja skannaa tietueet, joiden arvo on startPartialKey.

Olemme luoneet Result scanner -objektin, joka tallentaa Hbase-taulukon skannatut tietueet ja HashMap-toiminnon tuloksen tallentamiseksi.

Luomme tuloksen objektin tietovaraston saamiseksi tulosskanneriin ja suoritamme for-silmukan.

imsi on merkkijono, joka on määritetty matkapuhelinnumeron tallentamiseen, ja keyVal on Hash Map, joka tallentaa tietyn puhelimen sarakkeesta haetun lähdön.

Olemme antaneet 20140315-1234567890 kuten rivinavain Hbase-taulukkoon. Tässä 20140315 edustaa päivämäärää ja 1234567890 edustaa matkapuhelinnumeroa.

Koska tarvitsemme vain matkapuhelinnumeron, käytämme sen alahakumenetelmää.

Haemme tietoja r.raw (): sta ja tallennamme ne HashMapiin Putin avulla.

Lopuksi yritämme tulostaa ne konsolille.

Tulos on kuten alla olevassa kuvassa.

Olemme onnistuneesti hakeneet päivämäärän tietueet: 15thMaaliskuu 2014.