Exempel på HBase POC

Det här inlägget diskuterar ett exempel på Proof of Concept för HBase. Du kan hitta en tydlig förklaring av konceptet för att förbättra din förståelse för HBase.

I den här bloggen ska vi diskutera ett exempel på Proof of Concept för HBase.





Här har vi en datamängd som i bilden nedan.

Sample_Hbase_Use_case



Denna datauppsättning består av detaljerna om varaktigheten för totalt inkommande samtal, utgående samtal och meddelanden som skickas från ett visst mobilnummer vid ett visst datum.

Det första fältet representerar datum, det andra fältet representerar mobilnummer, det tredje fältet representerar den totala varaktigheten av inkommande samtal, det fjärde fältet representerar den totala varaktigheten av utgående samtal och det femte fältet representerar det totala antalet skickade meddelanden.

Nu är vår uppgift att hämta informationen om varaktigheten för inkommande och utgående samtal och meddelanden som skickas, från ett telefonnummer på ett visst datum.



I detta användningsfall försöker jag filtrera posterna på 15thMars 2014. Här är ett HBase-program för att uppnå detta.

Nedan är den fullständiga koden för den.

offentlig klass prov{

privat statisk Konfiguration konf

statisk HTable tabell

offentlig exempel (String tableName, String colFams) kastar IOException {

konf = HBaseConfiguration. skapa ()

createTable (tableName, colFams)

tabell = ny HTable ( konf , tabellnamn)

}

tomhet createTable (String tableName, String colFams) kastar IOException {

HBaseAdmin hbase = ny HBaseAdmin ( konf )

HTableDescriptor desc = ny HTableDescriptor (tabellnamn)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

offentlig statisk tomhet addColumnEntry (strängtabellnamn, strängrad,

Sträng colFamilyName, String colName, Strängvärden)

kastar IOException {

byte [] rowKey = Bytes. toBytes (rad)

Sätt putdata = ny Sätt (radKey)

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

Byte. toBytes (värden))

tabell .put (putdata)

}

offentlig statisk tomhet getAllRecord (String tableName, String startPartialKey,

String endPartialKey) kastar IOException {

Prova {

Skanna s

om (startPartialKey == null || endPartialKey == null )

s = ny Skanna()

annan

s = ny Skanna (byte. toBytes (startPartialKey),

Byte. toBytes (endPartialKey))

ResultScanner ss = tabell .getScanner (s)

HashMapoutputRec = ny HashMap()

Sträng imsi = “”

för (Resultat r: ss) {

HashMap keyVal = ny HashMap ()

för (KeyValue kv: r.raw ()) {

imsi = ny Sträng (kv.getRow ()). Substring (10)

keyVal.put ( ny Sträng (kv.getQualifier ()),

ny Sträng (kv.getValue ()))

outputRec.put (imsi, keyVal)

om (keyVal.size () == 3)

Systemet. ut .println (ta + '' + 'Inkommande minuter:'

+ keyVal.get (“c1 ″) +” Kommande minuter: ”

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

+ keyVal.get (“c3”))

}

}

} till sist {

}

}

offentlig statisk tomhet main (String [] args) kastar IOException {

String tableName = “datarecords”

Sträng colFamilyNames = “i”

provtest = ny exempel (tabellnamn, colFamilyNames)

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

// Detta refererar till en rad i taget

Stränglinje = null

Prova {

// FileReader läser textfiler i standardkodningen.

FileReader fileReader = ny FileReader (filnamn)

// Vik alltid FileReader i BufferedReader.

BufferedReader bufferedReader = ny BufferedReader (fileReader)

medan ((line = bufferedReader.readLine ())! = null ) {

Sträng [] värden = line.split (”“)

metodöverbelastning och metodöverstyrning i java

addColumnEntry (tabellnamn, värden [0] + “-” + värden [1],

colFamilyNames, “c1”, värden [2])

addColumnEntry (tabellnamn, värden [0] + “-” + värden [1],

colFamilyNames, “c2”, värden [3])

addColumnEntry (tabellnamn, värden [0] + “-” + värden [1],

colFamilyNames, “c3”, värden [4])

}

bufferedReader.close ()

} fånga (FileNotFoundException ex) {

Systemet. ut .println (“Det går inte att öppna filen‘ ”+ filnamn +“ ‘”)

} fånga (IOException ex) {

Systemet. ut .println (“Fel vid läsning av fil” ”+ filnamn +“ ‘”)

// Eller så kan vi bara göra det här:

// ex.printStackTrace ()

}

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

}

}

Här har vi skapat ett objekt med konfiguration, HTable-klass och skapat Hbase-tabellen med namn: datarekord och kolumnfamiljen: i .

I det här användningsfallet tar vi kombinationen av datum och mobilnummer åtskilda av '-' som radnyckel för denna Hbase-tabell och inkommande, utgående samtalslängd ', antalet meddelanden som skickas som kolumnerna' c1 ',' c2 ',' c3 'för kolumnfamiljen' i '.

Vi har ingångsdata lagrade i Clouderas lokala filsystem. Så vi måste skriva Java Logic som läser data från filen.

Nedan är Java-logiken.

I den här metoden lagrar vi data i tabellen för varje kolumn i kolumnfamiljen.

Vi kan kontrollera de data som är lagrade i Hbase-tabellen ”datarecords” med hjälp av skanningskommandot.

Du kommer att få uppgifterna som i bilden nedan.

Nu har vi infört data i HBase-tabellen framgångsrikt.

Låt oss hämta de poster som är lagrade i tabellen för ett visst datum.

I det här användningsfallet försöker vi hämta posterna för Datum: 15thMars 2014

För att hämta posterna har vi skapat en metod

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Den första parametern representerar tabellnamnet, den andra representerar startdatumet från vilket vi behöver hämta data och det tredje är nästa datum för startdatumet.

T.ex:

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

Låt oss nu förstå logik av denna metod.

Vi försöker skanna Hbase-tabellen med hjälp av HBase API med hjälp av startPartialKey och endPartialKey.

Eftersom StartPartialKey och endPartialkey inte är null går det till annars blockerar och skannar poster som har värdet startPartialKey.

Vi har skapat ett objekt av resultatscannern som lagrar de skannade posterna i Hbase-tabellen och en HashMap för att lagra den utdata som kommer att bli resultatet.

Vi skapar ett objekt för Resultat för att få datalagret i resultatscannern och köra en for-loop.

imsi är strängen som är definierad för att lagra mobilnumret och keyVal är en Hash-karta som lagrar utdata som hämtats från kolumnen för en viss telefon.

Vi har gett 20140315-1234567890 som den radnyckel till Hbase-tabellen. I detta 20140315 representerar datumet och 1234567890 representerar mobilnumret.

Eftersom vi bara behöver mobilnumret använder vi substreringsmetod för att hämta det.

Vi hämtar data från r.raw () och lagrar den i HashMap med Put.

Slutligen försöker vi skriva ut dem på konsolen.

Output kommer att vara som i bilden nedan.

Vi har framgångsrikt hämtat posterna för datumet: 15thMars 2014.