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.
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
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.