Пример за HBase заявка: команди put(), get() и scan()
⚡ Умно обобщение
HBase put, get и scan са основните команди за запис и четене на данни, които ви позволяват да съхранявате стойност на клетка по ред и колона, да извличате един ред или да преглеждате много редове от обвивката или... Java API.
Записване на данни в HBase таблица: Shell
Тези примери предполагат, че HBase е инсталиран и работещ, HBase обвивката е отворена и a таблица с име 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 shell, тя ще покаже вмъкнатите стойности в „guru99“, както следва.
- В HBase shell ще се покажат стойностите, вмъкнати от нашия код, с имената на колоните и редовете.
- Тук можем да видим, че вмъкнатите имена на колоните са „образование“ и „проекти“.
- Вмъкнатите стойности са „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 и „HBaseTutorials“.
Прочетете данни от HBase таблица: Java API
Каквито и стойности да сме поставили в таблицата HBase в горния раздел, тук ще извлечем и покажем тези стойности.
Изходът от конзолата по-долу показва данните, които се четат обратно от HBase таблицата „guru99“:
За извличане на резултати, съхранени в „guru99“:
- Тук ще извлечем стойностите, които се съхраняват в семействата на колоните, а именно „образование“ и „проекти“.
- Използвайки командата „get“, ще извлечем съхранените стойности в таблицата HBase.
- Резултати от сканиране с помощта на командата „scan“. Стойностите, съхранени в ред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(), които отразяват по-стария HBase клиентски API. От HBase 1.0 насам, HTable е остарял. Съвременният код получава Table чрез ConnectionFactory.createConnection(…).getTable(…) и изгражда Put с addColumn() вместо add(). Логиката на put, get и scan остава същата.






