Παράδειγμα ερωτήματος HBase: εντολές put(), get() & scan()
⚡ Έξυπνη Σύνοψη
Οι εντολές HBase put, get και scan είναι οι βασικές εντολές για την εγγραφή και την ανάγνωση δεδομένων, επιτρέποντάς σας να αποθηκεύετε μια τιμή κελιού ανά γραμμή και στήλη, να ανακτάτε μία μόνο γραμμή ή να περιηγείστε σε πολλές γραμμές από το κέλυφος ή Java API.

Εγγραφή δεδομένων στον πίνακα HBase: Shell
Αυτά τα παραδείγματα υποθέτουν ότι το HBase είναι εγκατεστημένο και σε λειτουργία, το κέλυφος HBase είναι ανοιχτό και ένα πίνακας με όνομα guru99 υπάρχει ήδη με τη στήλη «Εκπαίδευση και έργα για οικογένειες».
Η εντολή put χρησιμοποιείται για την αποθήκευση δεδομένων σε έναν πίνακα.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Αυτή η εντολή χρησιμοποιείται για τα ακόλουθα πράγματα:
- Θα βάλει μια «τιμή» κελιού σε έναν καθορισμένο ή καθορισμένο πίνακα ή γραμμή ή στήλη.
- Προαιρετικά, θα συντονίσει μια χρονική σήμανση.
Για παράδειγμα, εδώ τοποθετούμε τιμές στον πίνακα "guru99" κάτω από τη γραμμή r1 και τη στήλη c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Έχουμε τοποθετήσει τρεις τιμές, 10, 15 και 30, στον πίνακα "guru99", όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.
Ας υποθέσουμε ότι ο πίνακας "guru99" έχει μια αναφορά πίνακα, όπως το g. Μπορείτε επίσης να εκτελέσετε την εντολή στην αναφορά πίνακα, ως εξής:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Η έξοδος εμφανίζεται όπως φαίνεται στο παραπάνω στιγμιότυπο οθόνης μετά την τοποθέτηση τιμών στο "guru99".
Διαβάστε δεδομένα από τον πίνακα HBase: Shell
Σε αυτήν την ενότητα, ελέγχουμε τα ακόλουθα Κέλυφος HBase:
- Τιμές που εισάγονται στον πίνακα HBase "guru99".
- Ονόματα στηλών με τις τιμές που υπάρχουν στον πίνακα HBase guru99.
Το παρακάτω αποτέλεσμα σάρωσης παραθέτει κάθε τιμή που εισάγεται στο "guru99", μαζί με τα ονόματα γραμμών και στηλών της:
Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να συμπεράνουμε τα εξής:
- Αν εκτελέσουμε την εντολή "scan" στο κέλυφος HBase, θα εμφανιστούν οι τιμές που έχουν εισαχθεί στο "guru99" ως εξής.
- Στο κέλυφος HBase, θα εμφανιστούν οι τιμές που εισάγονται από τον κώδικά μας, με τα ονόματα των στηλών και των γραμμών.
- Εδώ μπορούμε να δούμε ότι τα ονόματα των στηλών που έχουν εισαχθεί είναι «εκπαίδευση» και «έργα».
- Οι τιμές που εισάγονται είναι "BigData" και "HBase Tutorials" στις προαναφερθείσες στήλες.
Μπορείτε επίσης να χρησιμοποιήσετε την εντολή get για να διαβάσετε δεδομένα από έναν πίνακα.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Εδώ, οι πρόσθετες παράμετροι περιλαμβάνουν τα TIMERANGE (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), TIMESTAMP (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), VERSIONS (ΕΚΔΟΣΕΙΣ) και FILTERS (ΦΙΛΤΡΑ). Χρησιμοποιώντας αυτήν την εντολή, λαμβάνετε μια γραμμή ή τα περιεχόμενα κελιού που υπάρχουν στον πίνακα. Μπορείτε να προσθέσετε πρόσθετες παραμέτρους, όπως TIMESTAMP (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), TIMERANGE (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), VERSIONS (ΕΚΔΟΣΕΙΣ) ή FILTERS (ΦΙΛΤΡΑ), για να ανακτήσετε ένα συγκεκριμένο περιεχόμενο γραμμής ή κελιού. Ο παρακάτω πίνακας συνοψίζει αυτές τις παραμέτρους:
| Παράμετρος | Σκοπός |
|---|---|
| ΧΡΟΝΟΔΙΑΓΡΑΜΜΑ | Επιστρέφει κελιά των οποίων η χρονική σήμανση εμπίπτει σε μια ώρα έναρξης και λήξης. |
| ΧΡΟΝΟΣΗΜΑ | Επιστρέφει μόνο την έκδοση κελιού που είναι αποθηκευμένη σε μια ακριβή χρονική σήμανση. |
| ΕΚΔΟΣΕΙΣ | Ορίζει πόσες εκδόσεις ενός κελιού θα επιστραφούν (η προεπιλογή είναι 1). |
| ΦΙΛΤΡΑ | Εφαρμόζει ένα φίλτρο για να περιορίσει ποιες γραμμές ή στήλες επιστρέφονται. |
| ΣΤΗΛΗ | Περιορίζει το αποτέλεσμα σε συγκεκριμένες οικογένειες στηλών ή προσδιοριστές. |
Ακολουθούν μερικά λειτουργικά παραδείγματα της εντολής get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Για τον πίνακα "guru99", οι τιμές της σειράς r1 και της στήλης c1 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.
hbase> get 'guru99', 'r1'
Για τον πίνακα "guru99", οι τιμές της γραμμής r1 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Για τον πίνακα "guru99", οι τιμές της γραμμής r1 στο χρονικό εύρος ts1 έως ts2 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Για τον πίνακα "guru99", οι τιμές της σειράς r1 και των οικογενειών στηλών c1, c2 και c3 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.
Εγγραφή δεδομένων στον πίνακα HBase: JAVA API
Σε αυτό το βήμα, θα γράψουμε δεδομένα στον πίνακα HBase "guru99".
Αρχικά, πρέπει να γράψουμε κώδικα για την εισαγωγή και ανάκτηση τιμών από το HBase, χρησιμοποιώντας το πρόγραμμα HBaseLoading.java. Για τη δημιουργία και την εισαγωγή τιμών σε έναν πίνακα σε επίπεδο στήλης, ο κώδικας φαίνεται παρακάτω.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το Java κώδικας που δημιουργεί τη διαμόρφωση HBase και εισάγει τιμές στο "guru99":
Από το παραπάνω στιγμιότυπο οθόνης:
- Όταν δημιουργούμε τη διαμόρφωση του HBase, αυτή υποδεικνύει τις διαμορφώσεις που ορίσαμε στα αρχεία hbase-site.xml και hbase-default.xml κατά την εγκατάσταση του HBase.
- Δημιουργία πίνακα “guru99” χρησιμοποιώντας τη μέθοδο HTable.
- Προσθήκη γραμμής 1 στον πίνακα "guru99".
- Καθορισμός των ονομάτων στηλών «εκπαίδευση» και «έργα» και εισαγωγή τιμών στα ονόματα στηλών στην αντίστοιχη γραμμή1. Οι τιμές που εισάγονται εδώ είναι BigData και «Εκπαιδευτικά σεμινάρια HBase».
Διαβάστε δεδομένα από τον πίνακα HBase: Java API
Όποιες τιμές κι αν τοποθετήσαμε στον πίνακα HBase στην παραπάνω ενότητα, εδώ θα ανακτήσουμε και θα εμφανίσουμε αυτές τις τιμές.
Η παρακάτω έξοδος της κονσόλας δείχνει τα δεδομένα που διαβάζονται από τον πίνακα HBase "guru99":
Για την ανάκτηση αποτελεσμάτων που είναι αποθηκευμένα στο "guru99":
- Εδώ θα ανακτήσουμε τις τιμές που είναι αποθηκευμένες στις οικογένειες στηλών, δηλαδή, "εκπαίδευση" και "έργα".
- Χρησιμοποιώντας την εντολή "get", θα ανακτήσουμε τις αποθηκευμένες τιμές στον πίνακα HBase.
- Αποτελέσματα σάρωσης χρησιμοποιώντας την εντολή «σάρωση». Οι τιμές που είναι αποθηκευμένες στη γραμμή 1 θα εμφανιστούν στην κονσόλα.
Μόλις γραφτεί ο κώδικας, εκτελείτε το Java εφαρμογή σαν αυτό:
Κάντε δεξί κλικ στο HBaseLoading.java -> Εκτέλεση ως -> Java Εφαρμογή.
Μετά την εκτέλεση του "HBaseLoading.java", οι τιμές εισάγονται στο "guru99" σε κάθε στήλη στο HBase και στο ίδιο πρόγραμμα μπορεί επίσης να ανακτήσει τιμές.
Εδώ είναι ο πλήρης κώδικας:
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
Σημείωση σχετικά με τις εκδόσεις API: Το παραπάνω παράδειγμα χρησιμοποιεί την κλάση HTable και τη μέθοδο add(), οι οποίες αντικατοπτρίζουν το παλαιότερο API πελάτη HBase. Από την έκδοση 1.0 και μετά, το HTable έχει καταργηθεί. Ο σύγχρονος κώδικας λαμβάνει έναν πίνακα μέσω του ConnectionFactory.createConnection(…).getTable(…) και δημιουργεί ένα Put με addColumn() αντί για add(). Η λογική των put, get και scan παραμένει η ίδια.





