Eksempel på HBase-forespørgsel: put(), get() og scan()-kommandoer
⚡ Smart opsummering
HBase put, get og scan er kernekommandoerne til at skrive og læse data, og de giver dig mulighed for at gemme en celleværdi række for række, hente en enkelt række eller gennemse mange rækker fra skallen eller Java API.
Skriv data til HBase-tabel: Shell
Disse eksempler antager, at HBase er installeret og kører, HBase-skallen er åben, og en tabel med navnet guru99 findes allerede med kolonnefamilierne uddannelse og projekter.
Put-kommandoen bruges til at gemme data i en tabel.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Denne kommando bruges til følgende ting:
- Det vil sætte en celle 'værdi' ved en defineret eller specificeret tabel eller række eller kolonne.
- Den vil eventuelt koordinere et tidsstempel.
For eksempel placerer vi her værdier i tabellen “guru99” under række r1 og kolonne c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Vi har placeret tre værdier, 10, 15 og 30, i tabellen “guru99”, som vist på skærmbilledet nedenfor.
Antag at tabellen “guru99” har en tabelreference, f.eks. g. Du kan også køre kommandoen på tabelreferencen, sådan her:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Outputtet vises som vist på skærmbilledet ovenfor efter at værdier er placeret i "guru99".
Læs data fra HBase-tabel: Shell
I dette afsnit undersøger vi følgende i HBase skal:
- Værdier, der indsættes i HBase-tabellen “guru99”.
- Kolonnenavne med de værdier, der findes i HBase-tabel guru99.
Scanningsoutputtet nedenfor viser alle værdier, der er indsat i "guru99", sammen med dens række- og kolonnenavne:
Ud fra ovenstående skærmbillede kan vi udlede følgende:
- Hvis vi kører kommandoen "scan" i HBase-shellen, vil den vise de indsatte værdier i "guru99" som følger.
- I HBase-shellen vil den vise de værdier, der er indsat af vores kode, med kolonne- og rækkenavnene.
- Her kan vi se, at de indsatte kolonnenavne er "uddannelse" og "projekter".
- De indsatte værdier er "BigData" og "HBase Tutorials" i de nævnte kolonner.
Du kan også bruge kommandoen `get` til at læse data fra en tabel.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Her inkluderer de yderligere parametre TIMERANGE, TIMESTAMP, VERSIONS og FILTERS. Ved at bruge denne kommando får du en række eller celleindholdet i tabellen. Du kan tilføje yderligere parametre, såsom TIMESTAMP, TIMERANGE, VERSIONS eller FILTERS, for at hente en bestemt række eller celleindhold. Tabellen nedenfor opsummerer disse parametre:
| Parameter | Formål |
|---|---|
| TIDSINDHOLD | Returnerer celler, hvis tidsstempel falder inden for et start- og et sluttidspunkt. |
| TIDSSTEMPEL | Returnerer kun den celleversion, der er gemt med et præcist tidsstempel. |
| VERSIONER | Angiver, hvor mange versioner af en celle der skal returneres (standardindstillingen er 1). |
| FILTRE | Anvender et filter til at begrænse, hvilke rækker eller kolonner der returneres. |
| KOLONNE | Begrænser resultatet til bestemte kolonnefamilier eller kvalifikatorer. |
Her er nogle eksempler på brugen af get-kommandoen:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
For tabellen “guru99” vises værdierne for række r1 og kolonne c1 ved hjælp af denne kommando, som vist på skærmbilledet nedenfor.
hbase> get 'guru99', 'r1'
For tabellen “guru99” vises række r1-værdier ved hjælp af denne kommando.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
For tabellen “guru99” vises række r1-værdier i tidsintervallet ts1 til ts2 ved hjælp af denne kommando.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
For tabellen “guru99” vises værdierne for række r1 og kolonnefamilierne c1, c2 og c3 ved hjælp af denne kommando.
Skriv data til HBase-tabel: JAVA API
I dette trin skal vi skrive data ind i HBase-tabellen “guru99”.
Først skal vi skrive kode til at indsætte og hente værdier fra HBase ved hjælp af programmet HBaseLoading.java. For at oprette og indsætte værdier i en tabel på kolonneniveau, koder du som vist nedenfor.
Skærmbilledet nedenfor viser Java kode, der bygger HBase-konfigurationen og indsætter værdier i “guru99”:
Fra ovenstående skærmbillede:
- Når vi opretter HBase-konfigurationen, peger den på de konfigurationer, vi har angivet i filerne hbase-site.xml og hbase-default.xml under HBase-installationen.
- Oprettelse af tabellen “guru99” ved hjælp af HTable-metoden.
- Tilføjer række1 til tabellen “guru99”.
- Angivelse af kolonnenavnene "uddannelse" og "projekter" og indsættelse af værdier i kolonnenavnene i den respektive række1. De værdier, der indsættes her, er BigData og “HBaseTutorials”.
Læs data fra HBase-tabel: Java API
Uanset hvilke værdier vi har placeret i HBase-tabellen i afsnittet ovenfor, vil vi her hente og vise disse værdier.
Konsoloutputtet nedenfor viser de data, der læses tilbage fra HBase-tabellen "guru99":
For at hente resultater gemt i “guru99”:
- Her henter vi de værdier, der er gemt i kolonnefamilierne, dvs. "uddannelse" og "projekter".
- Ved hjælp af kommandoen "get" henter vi de gemte værdier i HBase-tabellen.
- Scanning af resultater ved hjælp af kommandoen "scan". De værdier, der er gemt i række 1, vises på konsollen.
Når koden er skrevet, kører du Java ansøgning sådan her:
Højreklik på HBaseLoading.java -> Kør som -> Java Ansøgning.
Efter at have kørt “HBaseLoading.java”, indsættes værdierne i “guru99” i hver kolonne i HBase, og i det samme program kan den også hente værdier.
Her er den komplette kode:
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(); } } }
Bemærkning om API-versioner: Eksemplet ovenfor bruger HTable-klassen og dens add()-metode, som afspejler den ældre HBase-klient-API. Siden HBase 1.0 er HTable udfaset. Moderne kode henter en tabel via ConnectionFactory.createConnection(…).getTable(…) og bygger en Put med addColumn() i stedet for add(). Logikken bag put, get og scan forbliver den samme.






