Primjer HBase upita: naredbe put(), get() i scan()
⚡ Pametni sažetak
HBase naredbe put, get i scan su osnovne naredbe za pisanje i čitanje podataka, omogućujući vam pohranjivanje vrijednosti ćelije po retku i stupcu, dohvaćanje jednog retka ili pregledavanje više redaka iz ljuske ili Java API-ja.
Zapišite podatke u HBase tablicu: Shell
Ovi primjeri pretpostavljaju da je HBase instalirano i pokrenuto, HBase ljuska je otvorena i tablica pod nazivom guru99 već postoji s rubrikom obitelji, obrazovanje i projekti.
Naredba put se koristi za pohranjivanje podataka u tablicu.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Ova naredba se koristi za sljedeće stvari:
- Stavit će 'vrijednost' ćelije u definiranu ili specificiranu tablicu ili redak ili stupac.
- Opcionalno će koordinirati vremensku oznaku.
Na primjer, ovdje stavljamo vrijednosti u tablicu „guru99“ pod redak r1 i stupac c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
U tablicu „guru99“ smjestili smo tri vrijednosti, 10, 15 i 30, kao što je prikazano na snimci zaslona ispod.
Pretpostavimo da tablica „guru99“ ima referencu tablice, kao što je g. Naredbu možete pokrenuti i na referenci tablice, ovako:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Izlaz se pojavljuje kao što je prikazano na gornjoj snimci zaslona nakon što se vrijednosti unesu u "guru99".
Čitanje podataka iz HBase tablice: Shell
U ovom odjeljku provjeravamo sljedeće HBase ljuska:
- Vrijednosti koje se ubacuju u HBase tablicu „guru99“.
- Nazivi stupaca s vrijednostima prisutnim u HBase tablici guru99.
Izlaz skeniranja u nastavku navodi svaku vrijednost umetnutu u „guru99“, zajedno s nazivima redaka i stupaca:
Iz gornje snimke zaslona možemo zaključiti sljedeće:
- Ako pokrenemo naredbu "scan" u HBase ljusci, prikazat će umetnute vrijednosti u "guru99" na sljedeći način.
- U HBase ljusci će se prikazati vrijednosti koje je umetnuo naš kod, s nazivima stupaca i redaka.
- Ovdje možemo vidjeti da su umetnuti nazivi stupaca „obrazovanje“ i „projekti“.
- U spomenute stupce umetnute su vrijednosti „BigData“ i „HBase Tutorials“.
Također možete koristiti naredbu get za čitanje podataka iz tablice.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Ovdje dodatni parametri uključuju TIMERANGE, TIMESTAMP, VERSIONS i FILTERS. Pomoću ove naredbe dobivate sadržaj retka ili ćelije prisutan u tablici. Možete dodati dodatne parametre, kao što su TIMESTAMP, TIMERANGE, VERSIONS ili FILTERS, za dohvaćanje određenog sadržaja retka ili ćelije. Tablica u nastavku sažima ove parametre:
| Parametar | Svrha |
|---|---|
| VREMENSKI RASPON | Vraća ćelije čija vremenska oznaka pada unutar početnog i završnog vremena. |
| VREMENSKI KAMP | Vraća samo verziju ćelije pohranjenu u točno određenom vremenskom žigu. |
| VERZIJE | Postavlja koliko verzija ćelije treba vratiti (zadano je 1). |
| FILTARA | Primjenjuje filtar za ograničavanje vraćanja redaka ili stupaca. |
| KOLONA | Ograničava rezultat na određene obitelji stupaca ili kvalifikatore. |
Evo nekoliko praktičnih primjera naredbe get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Za tablicu „guru99“, vrijednosti retka r1 i stupca c1 prikazat će se pomoću ove naredbe, kao što je prikazano na snimci zaslona u nastavku.
hbase> get 'guru99', 'r1'
Za tablicu „guru99“, vrijednosti retka r1 bit će prikazane pomoću ove naredbe.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Za tablicu „guru99“, vrijednosti retka r1 u vremenskom rasponu od ts1 do ts2 bit će prikazane pomoću ove naredbe.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Za tablicu „guru99“, vrijednosti retka r1 i obitelji stupaca c1, c2 i c3 prikazat će se pomoću ove naredbe.
Pisanje podataka u HBase tablicu: JAVA API
U ovom koraku ćemo zapisati podatke u HBase tablicu „guru99“.
Prvo moramo napisati kod za umetanje i dohvaćanje vrijednosti iz HBase-a, koristeći program HBaseLoading.java. Za stvaranje i umetanje vrijednosti u tablicu na razini stupca, kod se piše kao što je prikazano u nastavku.
Snimka zaslona u nastavku prikazuje Java kod koji gradi HBase konfiguraciju i ubacuje vrijednosti u "guru99":
Iz gornje snimke zaslona:
- Kada stvaramo HBase konfiguraciju, ona pokazuje na konfiguracije koje smo postavili u datotekama hbase-site.xml i hbase-default.xml tijekom instalacije HBase-a.
- Izrada tablice „guru99“ korištenjem HTable metode.
- Dodavanje retka 1 u tablicu „guru99“.
- Određivanje naziva stupaca „obrazovanje“ i „projekti“ te umetanje vrijednosti u nazive stupaca u odgovarajućem retku 1. Ovdje umetnute vrijednosti su BigData i „HBaseTutoriali“.
Čitaj podatke iz HBase tablice: Java API
Koje god vrijednosti smo stavili u HBase tablicu u gornjem odjeljku, ovdje ćemo ih dohvatiti i prikazati.
Izlaz konzole u nastavku prikazuje podatke koji se čitaju iz HBase tablice „guru99“:
Za dohvaćanje rezultata pohranjenih u "guru99":
- Ovdje ćemo dohvatiti vrijednosti koje su pohranjene u obiteljima stupaca, odnosno „obrazovanje“ i „projekti“.
- Pomoću naredbe "get" dohvatit ćemo pohranjene vrijednosti u HBase tablici.
- Rezultati skeniranja pomoću naredbe "scan". Vrijednosti pohranjene u retku 1 prikazat će se na konzoli.
Nakon što je kod napisan, pokrećete Java primjena kao ovo:
Desni klik na HBaseLoading.java -> Pokreni kao -> Java Primjena.
Nakon pokretanja "HBaseLoading.java", vrijednosti se ubacuju u "guru99" u svakom stupcu u HBase-u, a u istom programu mogu se i dohvaćati vrijednosti.
Evo kompletnog koda:
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(); } } }
Napomena o verzijama API-ja: Gornji primjer koristi klasu HTable i njezinu metodu add(), koje odražavaju stariji HBase klijentski API. Od HBase 1.0, HTable je zastario. Moderni kod dobiva tablicu putem ConnectionFactory.createConnection(…).getTable(…) i gradi Put s addColumn() umjesto add(). Logika put, get i scan ostaje ista.






