Δείγμα HBase POC



Αυτή η ανάρτηση συζητά για ένα δείγμα Proof of Concept για HBase. Μπορείτε να βρείτε μια σαφή εξήγηση της έννοιας για να κατανοήσετε καλύτερα το HBase.

Σε αυτό το blog θα συζητήσουμε για ένα δείγμα Proof of Concept για HBase.





Εδώ έχουμε ένα σύνολο δεδομένων όπως στην παρακάτω εικόνα.

Sample_Hbase_Use_case



Αυτό το σύνολο δεδομένων αποτελείται από λεπτομέρειες σχετικά με τη διάρκεια των συνολικών εισερχόμενων κλήσεων, εξερχόμενων κλήσεων και των μηνυμάτων που αποστέλλονται από έναν συγκεκριμένο αριθμό κινητού τηλεφώνου σε μια συγκεκριμένη ημερομηνία.

Το πρώτο πεδίο αντιπροσωπεύει την ημερομηνία, το δεύτερο πεδίο αντιπροσωπεύει τον αριθμό κινητού, το τρίτο πεδίο αντιπροσωπεύει τη συνολική διάρκεια των εισερχόμενων κλήσεων, το τέταρτο πεδίο αντιπροσωπεύει τη συνολική διάρκεια των εξερχόμενων κλήσεων και το πέμπτο πεδίο αντιπροσωπεύει τον συνολικό αριθμό των μηνυμάτων που αποστέλλονται.

Τώρα το καθήκον μας είναι να ανακτήσουμε τις πληροφορίες για τη διάρκεια των εισερχόμενων και εξερχόμενων κλήσεων και μηνυμάτων που αποστέλλονται, από έναν αριθμό τηλεφώνου σε μια συγκεκριμένη ημερομηνία.



Σε αυτήν την περίπτωση χρήσης, προσπαθώ να φιλτράρω τα αρχεία των 15ουΜάρτιος 2014. Εδώ είναι ένα πρόγραμμα HBase για να το επιτύχετε.

Παρακάτω είναι ο πλήρης κωδικός του.

δημόσιο τάξη δείγμα{

ιδιωτικός στατικός Διαμόρφωση μεταφ

στατικός HTable τραπέζι

δημόσιο δείγμα (String tableName, String colFams) ρίχνει IOException {

μεταφ = Διαμόρφωση HBase. δημιουργώ ()

createTable (tableName, colFams)

τραπέζι = νέος HTable ( μεταφ , Όνομα πίνακα)

}

κενός createTable (String tableName, String colFams) ρίχνει IOException {

HBaseAdmin hbase = νέος HBaseAdmin ( μεταφ )

HTableDescriptor desc = νέος HTableDescriptor (όνομα πίνακα)

HColumnDescriptor meta = νέος HColumnDescriptor (colFams.getBytes ())

desc.addFamily (μετα)

hbase.createTable (περιγραφή)

}

δημόσιο στατικός κενός addColumnEntry (Όνομα συμβολοσειράς, σειρά συμβολοσειράς,

String colFamilyName, String colName, String τιμές)

ρίχνει IOException {

ψηφιόλεξη [] rowKey = Bytes. toBytes (σειρά)

Βάλτε putdata = νέος Βάλτε (rowKey)

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

Bytes. toBytes (αξίες))

τραπέζι .put (putdata)

}

δημόσιο στατικός κενός getAllRecord (String tableName, String startPartialKey,

Συμβολοσειρά endPartialKey) ρίχνει IOException {

δοκιμάστε {

Σάρωση

αν (startPartialKey == μηδενικό || endPartialKey == μηδενικό )

s = νέος Σάρωση()

αλλού

s = νέος Σάρωση (Bytes) toBytes (startPartialKey),

Bytes. toBytes (endPartialKey))

Παράδειγμα επίκλησης μεθόδου απομακρυσμένης java

ResultScanner ss = τραπέζι .getScanner (ες)

HashMapέξοδοςRec = νέος HashMap()

Συμβολοσειρά imsi = ''

Για (Αποτέλεσμα r: ss) {

HashMap keyVal = νέος HashMap ()

Για (KeyValue kv: r.raw ()) {

imsi = νέος String (kv.getRow ()). Substring (10)

keyVal.put ( νέος Συμβολοσειρά (kv.getQualifier ()),

νέος Συμβολοσειρά (kv.getValue ()))

outputRec.put (imsi, keyVal)

αν (keyVal.size () == 3)

Σύστημα. έξω .println (πάρτε + '' + 'Εισερχόμενα λεπτά:'

+ keyVal.get ('c1 ″) +' Επόμενα λεπτά: '

+ keyVal.get ('c2 ″) +' Μηνύματα: '

+ keyVal.get ('c3'))

}

}

} τελικά {

}

}

δημόσιο στατικός κενός main (String [] args) ρίχνει IOException {

String tableName = 'daterecords'

String colFamilyNames = 'i'

ρηχό αντίγραφο και βαθύ αντίγραφο σε java

δοκιμή δείγματος = νέος δείγμα (tableName, colFamilyNames)

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

// Αυτό θα αναφέρεται σε μία γραμμή κάθε φορά

Γραμμή συμβολοσειράς = μηδενικό

δοκιμάστε {

// Το FileReader διαβάζει αρχεία κειμένου στην προεπιλεγμένη κωδικοποίηση.

FileReader fileReader = νέος FileReader (όνομα αρχείου)

// Ανακαλύψτε πάντα το FileReader στο BufferedReader.

BufferedReader bufferedReader = νέος BufferedReader (αρχείοReader)

ενώ ((γραμμή = bufferedReader.readLine ())! = μηδενικό ) {

Συμβολοσειρά [] τιμές = line.split ('')

addColumnEntry (όνομα πίνακα, τιμές [0] + '-' + τιμές [1],

colFamilyNames, 'c1', τιμές [2])

addColumnEntry (όνομα πίνακα, τιμές [0] + '-' + τιμές [1],

colFamilyNames, 'c2', τιμές [3])

addColumnEntry (όνομα πίνακα, τιμές [0] + '-' + τιμές [1],

colFamilyNames, 'c3', τιμές [4])

}

bufferedReader.close ()

} σύλληψη (Αρχείο FileNotFoundException ex) {

Σύστημα. έξω .println ('Αδυναμία ανοίγματος αρχείου' '+ Όνομα αρχείου +' '')

} σύλληψη (Πρώην IOException) {

Σύστημα. έξω .println ('Σφάλμα ανάγνωσης αρχείου' '+ Όνομα αρχείου +' '')

// Ή θα μπορούσαμε απλώς να το κάνουμε αυτό:

ποια είναι η μέθοδος tostring στο java

// ex.printStackTrace ()

}

getAllRecord (Όνομα πίνακα, '20140315', '20140316')

}

}

Εδώ έχουμε δημιουργήσει ένα αντικείμενο Configuration, HTable class και δημιουργήσαμε τον Hbase Table με όνομα: αρχεία δεδομένων και η οικογένεια στηλών: Εγώ .

Σε αυτήν την περίπτωση χρήσης, θα πάρουμε τον συνδυασμό ημερομηνίας και αριθμού κινητού διαχωρισμένου με το σύμβολο «-» ως πλήκτρο σειράς για αυτόν τον πίνακα Hbase και τις διαρκείς εξερχόμενες, εξερχόμενες κλήσεις », τον αριθμό των μηνυμάτων που αποστέλλονται ως στήλες« c1 »,» c2 ',' c3 'για την οικογένεια στηλών' i '.

Έχουμε αποθηκεύσει τα δεδομένα εισόδου στο τοπικό σύστημα αρχείων της Cloudera. Πρέπει λοιπόν να γράψουμε Java Logic που διαβάζει τα δεδομένα από το αρχείο.

Παρακάτω είναι η λογική Java.

Σε αυτήν τη μέθοδο αποθηκεύουμε τα δεδομένα στον πίνακα για κάθε στήλη της οικογένειας στηλών.

Μπορούμε να ελέγξουμε τα δεδομένα που είναι αποθηκευμένα στον πίνακα Hbase «daterecords» χρησιμοποιώντας την εντολή σάρωσης.

Θα λάβετε τα δεδομένα όπως στην παρακάτω εικόνα.

Τώρα έχουμε εισαγάγει τα δεδομένα στον Πίνακα HBase με επιτυχία.

Ας ανακτήσουμε τις εγγραφές που είναι αποθηκευμένες στον Πίνακα συγκεκριμένης ημερομηνίας.

Σε αυτήν την περίπτωση χρήσης, προσπαθούμε να ανακτήσουμε τα αρχεία της ημερομηνίας: 15ουΜάρτιος 2014

Για να ανακτήσετε τα αρχεία που έχουμε δημιουργήσει μια Μέθοδο

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Η πρώτη παράμετρος αντιπροσωπεύει το όνομα του πίνακα, το δεύτερο αντιπροσωπεύει την ημερομηνία έναρξης από την οποία πρέπει να ανακτήσουμε τα δεδομένα και η τρίτη είναι η επόμενη ημερομηνία έναρξης.

Π.χ:

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

Τώρα ας καταλάβουμε το λογική αυτής της μεθόδου.

Προσπαθούμε να σαρώσουμε τον Πίνακα Hbase χρησιμοποιώντας το HBase API με τη βοήθεια του startPartialKey και του endPartialKey.

Καθώς το StartPartialKey και το endPartialkey δεν είναι μηδενικά, θα μεταβούν σε άλλο μπλοκ και θα σαρώσουν τις εγγραφές που έχουν την τιμή του startPartialKey.

Έχουμε δημιουργήσει ένα αντικείμενο σαρωτή αποτελεσμάτων που αποθηκεύει τις σαρωμένες εγγραφές του πίνακα Hbase και ένα HashMap για να αποθηκεύσει την έξοδο που θα είναι αποτέλεσμα.

Δημιουργούμε ένα αντικείμενο Result για να αποκτήσουμε την αποθήκευση δεδομένων στο Result Scanner και να εκτελέσουμε ένα loop for.

imsi είναι η συμβολοσειρά που ορίζεται για την αποθήκευση του αριθμού κινητού και το keyVal είναι ένας χάρτης Hash που αποθηκεύει την έξοδο που ανακτήθηκε από τη στήλη ενός συγκεκριμένου τηλεφώνου.

Έχουμε δώσει 20140315-1234567890 ως το κλειδί στον πίνακα Hbase. Σε αυτό το 20140315 αντιπροσωπεύει την ημερομηνία και 1234567890 αντιπροσωπεύει τον αριθμό κινητού.

Καθώς απαιτούμε μόνο τον αριθμό κινητού, χρησιμοποιούμε τη μέθοδο substring για να τον ανακτήσουμε.

Ανακτούμε τα δεδομένα από το r.raw () και τα αποθηκεύουμε στο HashMap χρησιμοποιώντας το Put.

Τέλος προσπαθούμε να τα εκτυπώσουμε στην κονσόλα.

Η έξοδος θα είναι όπως στην παρακάτω εικόνα.

Ανακτήσαμε με επιτυχία τα αρχεία της Ημερομηνίας: 15ουΜάρτιος 2014.