HBase-Abfragebeispiel: put()-, get()- und scan()-Befehle
⚡ Intelligente Zusammenfassung
Die HBase-Befehle put, get und scan sind die Kernbefehle zum Schreiben und Lesen von Daten. Sie ermöglichen es Ihnen, einen Zellenwert zeilen- und spaltenweise zu speichern, eine einzelne Zeile abzurufen oder viele Zeilen über die Shell oder die Benutzeroberfläche zu durchsuchen. Java API.
Daten in die HBase-Tabelle schreiben: Shell
Diese Beispiele setzen voraus, dass HBase installiert und läuftDie HBase-Shell ist geöffnet, und ein Tabelle mit dem Namen guru99 Existiert bereits in der Spalte „Familien, Bildung und Projekte“.
Der Befehl „put“ dient zum Speichern von Daten in einer Tabelle.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Dieser Befehl wird für folgende Zwecke verwendet:
- Es wird einen Zellwert in eine definierte oder angegebene Tabelle, Zeile oder Spalte einfügen.
- Optional wird ein Zeitstempel hinzugefügt.
Zum Beispiel tragen wir hier Werte in die Tabelle „guru99“ in Zeile r1 und Spalte c1 ein:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Wir haben in der Tabelle „guru99“ drei Werte, 10, 15 und 30, eingetragen, wie im folgenden Screenshot dargestellt.
Angenommen, die Tabelle „guru99“ enthält eine Tabellenreferenz, beispielsweise g. Sie können den Befehl auch auf die Tabellenreferenz anwenden, etwa so:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Nach Eingabe der Werte in „guru99“ erscheint die Ausgabe wie im obigen Screenshot dargestellt.
Daten aus der HBase-Tabelle lesen: Shell
In diesem Abschnitt überprüfen wir Folgendes: HBase-Shell:
- Werte, die in die HBase-Tabelle „guru99“ eingefügt werden.
- Spaltennamen mit den in der HBase-Tabelle guru99 vorhandenen Werten.
Die unten stehende Scan-Ausgabe listet jeden in „guru99“ eingefügten Wert zusammen mit seinen Zeilen- und Spaltennamen auf:
Aus dem obigen Screenshot lässt sich Folgendes schließen:
- Wenn wir den Befehl „scan“ in der HBase-Shell ausführen, werden die in „guru99“ eingefügten Werte wie folgt angezeigt.
- In der HBase-Shell werden die von unserem Code eingefügten Werte zusammen mit den Spalten- und Zeilennamen angezeigt.
- Hier sehen wir, dass die Spaltennamen „Bildung“ und „Projekte“ lauten.
- In die genannten Spalten wurden die Werte „BigData“ und „HBase Tutorials“ eingefügt.
Mit dem Befehl „get“ können Sie auch Daten aus einer Tabelle lesen.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Zu den zusätzlichen Parametern gehören TIMESTAMP, TIMESTAMP, VERSIONS und FILTERS. Mit diesem Befehl erhalten Sie eine Zeile oder den Inhalt einer Zelle aus der Tabelle. Sie können weitere Parameter wie TIMESTAMP, TIMERANGE, VERSIONS oder FILTERS hinzufügen, um eine bestimmte Zeile oder einen bestimmten Zelleninhalt abzurufen. Die folgende Tabelle fasst diese Parameter zusammen:
| Parameter | Zweck |
|---|---|
| ZEITSPANNE | Gibt Zellen zurück, deren Zeitstempel innerhalb eines Start- und Endzeitpunkts liegt. |
| TIMESTAMP | Gibt nur die Zellversion zurück, die zu einem bestimmten Zeitpunkt gespeichert wurde. |
| VERSIONEN | Legt fest, wie viele Versionen einer Zelle zurückgegeben werden sollen (Standardwert ist 1). |
| FILTER | Wendet einen Filter an, um die zurückgegebenen Zeilen oder Spalten einzuschränken. |
| SPALTE | Beschränkt das Ergebnis auf bestimmte Spaltenfamilien oder Qualifizierer. |
Hier sind einige durchgerechnete Beispiele für den Befehl „get“:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Für die Tabelle „guru99“ werden mit diesem Befehl die Werte der Zeile r1 und Spalte c1 angezeigt, wie im folgenden Screenshot dargestellt.
hbase> get 'guru99', 'r1'
Mit diesem Befehl werden die Werte der Zeile r1 der Tabelle „guru99“ angezeigt.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Mit diesem Befehl werden für die Tabelle „guru99“ die Werte der Zeile r1 im Zeitbereich ts1 bis ts2 angezeigt.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Mit diesem Befehl werden für die Tabelle „guru99“ die Werte der Zeile r1 und der Spaltenfamilien c1, c2 und c3 angezeigt.
Daten in die HBase-Tabelle schreiben: JAVA API
In diesem Schritt schreiben wir Daten in die HBase-Tabelle „guru99“.
Zuerst müssen wir Code schreiben, um Werte in HBase einzufügen und abzurufen. Dazu verwenden wir das Programm HBaseLoading.java. Um Werte auf Spaltenebene in eine Tabelle einzufügen, verwenden Sie den unten gezeigten Code.
Der untenstehende Screenshot zeigt die Java Code, der die HBase-Konfiguration erstellt und Werte in „guru99“ einfügt:
Aus dem obigen Screenshot:
- Wenn wir die HBase-Konfiguration erstellen, verweist sie auf die Konfigurationen, die wir während der HBase-Installation in den Dateien hbase-site.xml und hbase-default.xml festgelegt haben.
- Erstellung der Tabelle „guru99“ mithilfe der HTable-Methode.
- Zeile 1 wird der Tabelle „guru99“ hinzugefügt.
- Die Spaltennamen „education“ und „projects“ werden angegeben und in der jeweiligen Zeile 1 Werte in die Spaltennamen eingefügt. Die hier eingefügten Werte sind: Bigdata und „HBaseTutorials“.
Daten aus HBase-Tabelle lesen: Java API
Die Werte, die wir im vorherigen Abschnitt in die HBase-Tabelle eingetragen haben, werden wir hier abrufen und anzeigen.
Die untenstehende Konsolenausgabe zeigt die Daten, die aus der HBase-Tabelle „guru99“ gelesen werden:
Zum Abrufen von Ergebnissen, die in „guru99“ gespeichert sind:
- Hier rufen wir die Werte ab, die in den Spaltenfamilien „education“ und „projects“ gespeichert sind.
- Mit dem Befehl „get“ rufen wir die in der HBase-Tabelle gespeicherten Werte ab.
- Die Scanergebnisse werden mit dem Befehl „scan“ abgerufen. Die in Zeile 1 gespeicherten Werte werden in der Konsole angezeigt.
Sobald der Code geschrieben ist, führen Sie ihn aus. Java Anwendung so was:
Rechtsklick auf HBaseLoading.java -> Ausführen als -> Java Anwendung.
Nach dem Ausführen von „HBaseLoading.java“ werden die Werte in „guru99“ in jeder Spalte von HBase eingefügt, und im selben Programm können auch Werte abgerufen werden.
Hier ist der vollständige Code:
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(); } } }
Hinweis zu API-Versionen: Das obige Beispiel verwendet die HTable-Klasse und ihre add()-Methode, die die ältere HBase-Client-API widerspiegeln. Seit HBase 1.0 ist HTable veraltet. Moderner Code ruft eine Tabelle über ConnectionFactory.createConnection(…).getTable(…) ab und erstellt einen Put-Vorgang mit addColumn() anstelle von add(). Die Logik von Put, Get und Scan bleibt unverändert.






