Voorbeeld HBase POC



Dit bericht bespreekt een voorbeeld van een proof of concept voor HBase. U kunt een duidelijke uitleg van het concept vinden om uw begrip van HBase te verbeteren.

In deze blog bespreken we een voorbeeld van een Proof of Concept voor HBase.





Hier hebben we een dataset zoals in de onderstaande afbeelding.

Sample_Hbase_Use_case



Deze dataset bestaat uit de details over de duur van de totale inkomende oproepen, uitgaande oproepen en de berichten die vanaf een bepaald mobiel nummer op een specifieke datum zijn verzonden.

Het eerste veld staat voor de datum, het tweede veld staat voor het mobiele nummer, het derde veld staat voor de totale duur van inkomende oproepen, het vierde veld staat voor de totale duur van uitgaande oproepen en het vijfde veld staat voor het totale aantal verzonden berichten.

binair naar decimaal converter java

Nu is het onze taak om de informatie over de duur van inkomende en uitgaande oproepen en verzonden berichten op te halen van een telefoonnummer op een bepaalde datum.



In dit geval probeer ik de records van 15 te filterenthMaart 2014. Hier is een HBase-programma om dit te bereiken.

Hieronder staat de volledige code ervan.

openbaar klasse monster{

privaat statisch Configuratie conf

statisch HTabel tafel

openbaar sample (String tableName, String colFams) gooit IOException {

conf = HBaseConfiguration. creëren ()

createTable (tableName, colFams)

tafel = nieuw HTabel ( conf , tafel naam)

}

leegte createTable (String tableName, String colFams) gooit IOException {

HBaseAdmin hbase = nieuw HBaseAdmin ( conf )

HTableDescriptor desc = nieuw HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (desc)

}

openbaar statisch leegte addColumnEntry (String tableName, String row,

String colFamilyName, String colName, String-waarden)

gooit IOException {

byte [] rowKey = Bytes. toBytes (rij)

Zet putdata = nieuw Put (rowKey)

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

Bytes. toBytes (waarden))

tafel .put (putdata)

}

openbaar statisch leegte getAllRecord(String tableName, String startPartialKey,

String endPartialKey) gooit IOException {

proberen {

Scan s

als (startPartialKey == nul || endPartialKey == nul )

s = nieuw Scannen()

anders

s = nieuw Scannen (bytes. toBytes (startPartialKey),

Bytes. toBytes (endPartialKey))

ResultScanner ss = tafel .getScanner (s)

Hash kaartoutputRec = nieuw Hash kaart()

String imsi = ''

voor (Resultaat r: ss) {

HashMap keyVal = nieuw Hash kaart()

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

imsi = nieuw Tekenreeks (kv.getRow ()). Substring (10)

keyVal.put ( nieuw Tekenreeks (kv.getQualifier ()),

nieuw Tekenreeks (kv.getValue ()))

outputRec.put (imsi, keyVal)

als (keyVal.size () == 3)

Systeem. uit .println (neem + '' + 'Inkomende minuten:'

+ keyVal.get ('c1 ″) +' Uitgaande minuten: '

+ keyVal.get ('c2 ″) +' Berichten: '

+ keyVal.get ('c3'))

}

}

hoe u eclips instelt

} Tenslotte {

}

}

openbaar statisch leegte main (String [] args) gooit IOException {

String tableName = 'daterecords'

String colFamilyNames = 'i'

voorbeeldtest = nieuw voorbeeld (tableName, colFamilyNames)

String fileName = '/ home / cloudera / Desktop / data'

// Dit verwijst naar één regel tegelijk

String lijn = nul

proberen {

// FileReader leest tekstbestanden in de standaardcodering.

FileReader fileReader = nieuw FileReader (bestandsnaam)

// Wikkel FileReader altijd in BufferedReader.

BufferedReader bufferedReader = nieuw BufferedReader (fileReader)

terwijl ((line = bufferedReader.readLine ())! = nul ) {

String [] waarden = line.split ('')

addColumnEntry (tabelnaam, waarden [0] + '-' + waarden [1],

colFamilyNames, 'c1', waarden [2])

addColumnEntry (tabelnaam, waarden [0] + '-' + waarden [1],

colFamilyNames, 'c2', waarden [3])

addColumnEntry (tabelnaam, waarden [0] + '-' + waarden [1],

colFamilyNames, 'c3', waarden [4])

}

bufferedReader.close ()

} vangst (Ex FileNotFoundException) {

Systeem. uit .println ('Kan bestand‘ ”+ bestandsnaam +‘ ‘niet openen)

} vangst (IOException ex) {

Systeem. uit .println ('Fout bij lezen van bestand‘ '+ bestandsnaam +' ‘')

// Of we kunnen dit gewoon doen:

// ex.printStackTrace ()

}

getAllRecord (tableName, '20140315', '20140316')

}

}

Hier hebben we een object van Configuratie, HTable-klasse gemaakt en de Hbase-tabel met naam gemaakt: daterecords en de kolomfamilie: ik .

In dit geval nemen we de combinatie van datum en mobiel nummer gescheiden door '-' als rijsleutel voor deze Hbase-tabel en de inkomende, uitgaande gespreksduur ', het aantal verzonden berichten als de kolommen' c1 ',' c2 ',' c3 'voor de kolomfamilie' i '.

We hebben de invoergegevens opgeslagen in het lokale bestandssysteem van Cloudera. We moeten dus Java Logic schrijven dat de gegevens uit het bestand leest.

Hieronder vindt u de Java-logica.

Bij deze methode slaan we de gegevens op in de tabel voor elke kolom van de kolomfamilie.

We kunnen de gegevens die zijn opgeslagen in de Hbase-tabel ‘daterecords’ controleren met behulp van de scanopdracht.

U ontvangt de gegevens zoals in de onderstaande afbeelding.

Nu hebben we de gegevens met succes in de HBase-tabel ingevoegd.

Laten we de records ophalen die zijn opgeslagen in de tabel met een bepaalde datum.

In dit geval proberen we de records van de Datum: 15 op te halenthmaart 2014

Om de records op te halen hebben we een methode gemaakt

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

De eerste parameter vertegenwoordigt de tabelnaam, de tweede staat voor de startdatum van waaruit we de gegevens moeten ophalen en de derde is de volgende startdatum.

Bijv .:

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

Laten we nu de logica van deze methode.

We proberen de Hbase-tabel te scannen met behulp van HBase API met behulp van startPartialKey en endPartialKey.

Aangezien StartPartialKey en endPartialkey niet nul zijn, zal het naar else block gaan en de records scannen met de waarde van startPartialKey.

We hebben een object van Result-scanner gemaakt dat de gescande records van de Hbase-tabel opslaat en een HashMap om de uitvoer op te slaan die het resultaat zal zijn.

We maken een object van Result om de gegevensopslag in de Result Scanner op te halen en voeren een for-lus uit.

imsi is de tekenreeks die is gedefinieerd om het mobiele nummer op te slaan en keyVal is een hashkaart die de uitvoer opslaat die is opgehaald uit de kolom van een bepaalde telefoon.

We hebben gegeven 20140315-1234567890 als de rowkey naar de Hbase-tafel. Hierin staat 20140315 voor de datum en 1234567890 voor het mobiele nummer.

Omdat we alleen het mobiele nummer nodig hebben, gebruiken we de substring-methode om het op te halen.

We halen de gegevens op van de r.raw () en slaan deze op in de HashMap door Put te gebruiken.

Ten slotte proberen we ze op de console af te drukken.

hoe u een pakket aanmaakt

De uitvoer is zoals in de onderstaande afbeelding.

We hebben met succes de records van de Datum: 15 opgehaaldthMaart 2014.