HBase POC minta



Ez a bejegyzés a HBase koncepciójának igazolásának mintájáról szól. Világos magyarázatot találhat a koncepcióról, hogy jobban megértse a HBase-t.

Ebben a blogban a HBase koncepciójának bizonyítékát tárgyaljuk.





Itt van egy adatkészletünk, mint az alábbi képen.

Sample_Hbase_Use_case



Ez az adatkészlet az összes bejövő hívás, kimenő hívás időtartamának részleteiből és egy adott dátumon egy adott mobilszámról küldött üzenetekből áll.

Az első mező a dátumot jelenti, a második mező a mobil számot, a harmadik mező a bejövő hívások teljes időtartamát, a negyedik mező a kimenő hívások teljes időtartamát, az ötödik mező pedig a küldött üzenetek teljes számát jelenti.

Most az a feladatunk, hogy a bejövő és kimenő hívások és az elküldött üzenetek időtartamára vonatkozó információkat lekérjük egy adott dátumú telefonszámról.



Ebben a használati esetben a 15 rekordjait próbálom szűrnith2014. március. Itt van egy HBase program ennek elérésére.

Az alábbiakban a teljes kódot találja.

nyilvános osztály minta{

java karakterlánc több elválasztót osztott fel

magán statikus Konfiguráció konf

statikus HTable asztal

nyilvános minta (String tableName, String colFams) dob IOException {

konf = HBaseConfiguration. teremt ()

createTable (tableName, colFams)

asztal = új HTable ( konf , tableName)

}

üres createTable (String tableName, String colFams) dob IOException {

HBaseAdmin hbase = új HBaseAdmin ( konf )

HTableDescriptor desc = új HTableDescriptor (tableName)

HColumnDescriptor meta = új HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

nyilvános statikus üres addColumnEntry (Karakterlánc táblanév, Karakterlánc sor,

String colFamilyName, String colName, String értékek)

dob IOException {

byte [] rowKey = Bájt. toBytes (sor)

Tedd putdata = új Tegye (rowKey)

putdata.add (Bájt. toBytes (colFamilyName), bájtok. toBytes (colName),

Bájt. toBytes (értékek))

asztal .put (putdata)

}

nyilvános statikus üres getAllRecord (String táblanév, String startPartialKey,

String endPartialKey) dob IOException {

próbálja meg {

Scan s

ha (startPartialKey == nulla || endPartialKey == nulla )

s = új Letapogatás()

más

s = új Szkennelés (bájtok. toBytes (startPartialKey),

Bájt. toBytes (endPartialKey))

ResultScanner ss = asztal .getScanner

HashMapoutputRec = új HashMap()

Karakterlánc imsi = “”

mert (R: ss eredmény) {

HashMap keyVal = új HashMap ()

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

imsi = új Karakterlánc (kv.getRow ()). Sztring (10)

keyVal.put ( új Karakterlánc (kv.getQualifier ()),

új Karakterlánc (kv.getValue ()))

outputRec.put (imsi, keyVal)

ha (keyVal.size () == 3)

Rendszer. ki .println (vegye + ”” + “Bejövő percek:”

+ keyVal.get (“c1 ″) +” Kimenő percek: ”

+ keyVal.get (“c2 ″) +” Üzenetek: ”

+ keyVal.get („c3”))

}

}

} végül {

}

}

nyilvános statikus üres main (Karakterlánc [] dob IOException {

String tableName = “daterecords”

String colFamilyNames = „i”

minta teszt = új minta (táblaNév, colFamilyNames)

String fileName = “/ home / cloudera / Desktop / data”

// Ez egyszerre csak egy sorra fog hivatkozni

Vonósor = nulla

próbálja meg {

// A FileReader beolvassa a szöveges fájlokat az alapértelmezett kódolásban.

FileReader fileReader = új FileReader (fájlnév)

// A FileReadert mindig csomagolja a BufferedReader fájlba.

BufferedReader bufferedReader = új BufferedReader (fileReader)

míg ((sor = bufferedReader.readLine ())! = nulla ) {

Karakterlánc [] értékek = line.split ('“)

addColumnEntry (táblanév, értékek [0] + „-” + értékek [1],

colFamilyNames, „c1”, [2] értékek)

addColumnEntry (táblanév, értékek [0] + „-” + értékek [1],

colFamilyNames, „c2”, [3] értékek)

addColumnEntry (táblanév, értékek [0] + „-” + értékek [1],

colFamilyNames, „c3”, értékek [4])

}

bufferedReader.close ()

} fogás (FileNotFoundException ex) {

Rendszer. ki .println ('Nem lehet megnyitni a fájlt' '+ fájlnév +' '')

} fogás (IOException ex) {

Rendszer. ki .println (“Hiba a fájl olvasásakor” ”+ fájlnév +“ ’”)

// Vagy megtehetnénk ezt:

// ex.printStackTrace ()

}

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

}

}

Itt hoztunk létre egy Konfiguráció, HTable osztály objektumot, és létrehoztuk a Hbase táblát névvel: adatlapok és az oszlopcsalád: én .

Ebben a használati esetben a dátum és a mobilszám - - elválasztásával - kombinációját vesszük sor kulcsként ehhez a Hbase táblázathoz, és a bejövő, kimenő hívás időtartamát, a küldött üzenetek számát pedig a „c1” oszlopokként. c2 ”,„ c3 ”az„ i ”oszlopcsaládhoz.

A bemeneti adatokat a Cloudera helyi fájlrendszerében tároljuk. Tehát meg kell írnunk a Java Logic-ot, amely beolvassa az adatokat a fájlból.

Az alábbiakban látható a Java logika.

Ebben a módszerben az adatokat az oszlopcsalád minden oszlopának táblájában tároljuk.

A szkennelés paranccsal ellenőrizhetjük a Hbase tábla „daterecords” tárolt adatait.

Az adatokat az alábbi képen látható módon kapja meg.

Most sikeresen beillesztettük az adatokat a HBase táblába.

Töltsük le egy adott dátum táblázatában tárolt rekordokat.

Ebben a használati esetben megpróbáljuk lekérni a Date: 15 rekordjaitth2014. március

A rekordok lekéréséhez létrehoztunk egy metódust

getAllRecord (String táblanév, String startPartialKey, String endPartialKey)

Az első paraméter a tábla nevét, a második a kezdő dátumot jelenti, amelytől kezdve be kell szereznünk az adatokat, a harmadik pedig a következő dátumot jelenti.

Például:

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

Most értsük meg a logika ennek a módszernek.

A Hbase táblázatot a HBase API használatával próbáljuk beolvasni a startPartialKey és az endPartialKey segítségével.

Mivel a StartPartialKey és az endPartialkey nem nullák, ezért egy másik blokkolja és beolvassa a startPartialKey értékű rekordokat.

hadoop fejlesztői szerepek és felelősségek

Létrehoztunk egy Result scanner objektumot, amely tárolja a Hbase tábla beolvasott rekordjait és egy HashMap-ot az eredmény kimenetének tárolásához.

Létrehozunk egy Eredmény objektumot az adattároló beolvasására az Eredmény szkennerbe, és végrehajtunk egy for ciklust.

Az imsi a karakterlánc, amely a mobilszám tárolására van definiálva, a keyVal pedig egy hash térkép, amely az adott telefon oszlopából kapott kimenetet tárolja.

Adtunk 20140315-1234567890 mint a soros kulcs a Hbase asztalhoz. Ebben a 20140315 a dátumot, az 1234567890 pedig a mobil számot jelenti.

Mivel csak a mobilszámra van szükségünk, a lekéréshez szubsztring módszert használunk.

Az adatokat lekérjük az r.raw () fájlból, és a Put használatával tároljuk a HashMap-ban.

Végül megpróbáljuk kinyomtatni őket a konzolra.

A kimenet az alábbi képen látható lesz.

Sikeresen lekértük a Dátum rekordjait: 15th2014. március.