Příklad dotazu HBase: příkazy put(), get() a scan()
⚡ Chytré shrnutí
Příkazy HBase put, get a scan jsou základní příkazy pro zápis a čtení dat, které umožňují ukládat hodnotu buňky po řádcích a sloupcích, načítat jeden řádek nebo procházet více řádků ze shellu, popř. Java API.

Zápis dat do tabulky HBase: Shell
Tyto příklady předpokládají, že HBase je nainstalováno a spuštěno, shell HBase je otevřený a tabulka s názvem guru99 již existuje v rubrice Rodiny, vzdělávání a projekty.
Příkaz put se používá k ukládání dat do tabulky.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Tento příkaz se používá k následujícím účelům:
- Vloží buňku „hodnotu“ do definované nebo zadané tabulky nebo řádku nebo sloupce.
- Volitelně bude koordinovat časové razítko.
Například zde vkládáme hodnoty do tabulky „guru99“ pod řádek r1 a sloupec c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Do tabulky „guru99“ jsme umístili tři hodnoty, 10, 15 a 30, jak je znázorněno na snímku obrazovky níže.
Předpokládejme, že tabulka „guru99“ má odkaz na tabulku, například g. Příkaz můžete spustit i na odkazu na tabulku takto:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Výstup se po zadání hodnot do „guru99“ zobrazí, jak je znázorněno na výše uvedeném snímku obrazovky.
Čtení dat z tabulky HBase: Shell
V této části kontrolujeme následující HBase shell:
- Hodnoty, které jsou vloženy do tabulky HBase „guru99“.
- Názvy sloupců s hodnotami obsaženými v tabulce HBase guru99.
Výstup skenování níže uvádí všechny hodnoty vložené do „guru99“ spolu s názvy řádků a sloupců:
Z výše uvedeného snímku obrazovky můžeme usoudit následující:
- Pokud spustíme příkaz „scan“ v shellu HBase, zobrazí se vložené hodnoty v „guru99“ takto.
- V shellu HBase se zobrazí hodnoty vložené naším kódem spolu s názvy sloupců a řádků.
- Zde vidíme vložené názvy sloupců „vzdělávání“ a „projekty“.
- Do zmíněných sloupců byly vloženy hodnoty „BigData“ a „HBase Tutorials“.
Příkaz get můžete také použít k načtení dat z tabulky.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Mezi další parametry patří TIMERANGE, TIMESTAMP, VERSIONS a FILTERS. Pomocí tohoto příkazu získáte obsah řádku nebo buňky v tabulce. Můžete přidat další parametry, jako například TIMESTAMP, TIMERANGE, VERSIONS nebo FILTERS, pro načtení obsahu konkrétního řádku nebo buňky. Následující tabulka shrnuje tyto parametry:
| Parametr | Účel |
|---|---|
| ČASOVÝ ROZSAH | Vrátí buňky, jejichž časové razítko spadá do počátečního a koncového času. |
| ČASOVÉ RAZÍTKO | Vrátí pouze verzi buňky uloženou v přesném časovém razítku. |
| VERZE | Nastavuje, kolik verzí buňky se má vrátit (výchozí hodnota je 1). |
| FILTRY | Použije filtr pro omezení vrácených řádků nebo sloupců. |
| SLOUPEK | Omezuje výsledek na konkrétní rodiny sloupců nebo kvalifikátory. |
Zde je několik příkladů použití příkazu get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Pro tabulku „guru99“ se pomocí tohoto příkazu zobrazí hodnoty řádku r1 a sloupce c1, jak je znázorněno na snímku obrazovky níže.
hbase> get 'guru99', 'r1'
Pro tabulku „guru99“ se pomocí tohoto příkazu zobrazí hodnoty řádku r1.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Pro tabulku „guru99“ se pomocí tohoto příkazu zobrazí hodnoty řádku r1 v časovém rozsahu ts1 až ts2.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Pro tabulku „guru99“ se pomocí tohoto příkazu zobrazí hodnoty řádku r1 a rodin sloupců c1, c2 a c3.
Zápis dat do tabulky HBase: JAVA API
V tomto kroku zapíšeme data do tabulky HBase „guru99“.
Nejprve musíme napsat kód pro vkládání a načítání hodnot z HBase pomocí programu HBaseLoading.java. Pro vytváření a vkládání hodnot do tabulky na úrovni sloupců použijte kód uvedený níže.
Níže uvedený snímek obrazovky ukazuje Java kód, který sestaví konfiguraci HBase a vloží hodnoty do „guru99“:
Z výše uvedeného snímku obrazovky:
- Když vytváříme konfiguraci HBase, odkazuje na konfigurace, které jsme nastavili v souborech hbase-site.xml a hbase-default.xml během instalace HBase.
- Vytvoření tabulky „guru99“ pomocí metody HTable.
- Přidávání řádku1 do tabulky „guru99“.
- Zadání názvů sloupců „vzdělávání“ a „projekty“ a vložení hodnot do názvů sloupců v příslušném řádku 1. Zde vložené hodnoty jsou BigData a „Výukové programy HBase“.
Číst data z tabulky HBase: Java API
Ať už jsme v předchozí části do tabulky HBase umístili jakékoli hodnoty, zde je načteme a zobrazíme.
Výstup konzole níže ukazuje data načítaná zpět z tabulky HBase „guru99“:
Pro načtení výsledků uložených v „guru99“:
- Zde načteme hodnoty, které jsou uložené v rodinách sloupců, tedy „vzdělávání“ a „projekty“.
- Pomocí příkazu „get“ načteme uložené hodnoty v tabulce HBase.
- Výsledky skenování pomocí příkazu „scan“. Hodnoty uložené v řádku 1 se zobrazí v konzoli.
Jakmile je kód napsán, spustíte Java aplikace takhle:
Klikněte pravým tlačítkem myši na HBaseLoading.java -> Spustit jako -> Java Aplikace.
Po spuštění „HBaseLoading.java“ se hodnoty vloží do „guru99“ v každém sloupci v HBase a ve stejném programu lze hodnoty také načíst.
Zde je úplný kód:
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(); } } }
Poznámka k verzím API: Výše uvedený příklad používá třídu HTable a její metodu add(), které odrážejí starší klientské API HBase. Od verze HBase 1.0 je HTable zastaralý. Moderní kód získává tabulku pomocí ConnectionFactory.createConnection(…).getTable(…) a vytváří Put pomocí addColumn() namísto add(). Logika metod put, get a scan zůstává stejná.





