Коллекция команд HBase Shell 2

Один: Введение

Название HBase происходит от базы данных Hadoop, то есть базы данных hadoop, которая отличается от общей реляционной базы данных.Это база данных для хранения неструктурированных данных, и она основана на столбцах, а не на строках.

HBase — это распределенная, ориентированная на столбцы реализация с открытым исходным кодом, основанная на Google Bigtable.
Используйте Hadoop HDFS в качестве системы хранения файлов,
используйте Hadoop MapReduce для обработки больших объемов данных в HBase и
используйте Zookeeper в качестве службы для совместной работы.

Два: важные концепции HBase

2.1 Структура таблицы HBase

HBase хранит данные в виде таблиц. Таблица состоит из строк и столбцов. Столбцы делятся на несколько семейств столбцов/семейств столбцов, и каждое семейство столбцов/семейство столбцов может иметь несколько общих столбцов.
вставьте сюда описание изображения

2.2 Таблица Таблица

HBase использует таблицы для хранения данных.

2.3 пространство имен

Пространство имен Пространство имен относится к логической группировке набора таблиц , подобно базе данных в СУБД, что облегчает разделение таблиц в бизнесе.
Система HBase по умолчанию определяет два пространства имен по умолчанию:

  • hbase: системные встроенные таблицы, включая пространства имен и метатаблицы.
  • по умолчанию: таблицы, в которых не указано пространство имен, когда пользователь создает таблицу, создаются здесь

2.3 Ключ строки

Ключ строки, столбец первичного ключа каждой строки, ключ строки каждой строки должен быть уникальным, значением ключа строки является любая строка (максимальная длина 64 КБ, длина обычно составляет 10-100 байт в практических приложениях) 在HBase内部,rowKey保存为字节数组byte[].
Чтение и запись строки — это атомарная операция (независимо от того, сколько столбцов считывается и записывается одновременно).

2.4 Регион Регион

Таблица разделена на несколько областей в направлении строки.

Регионы делятся по размеру. Каждая таблица начинается только с одного региона. По мере увеличения данных регион продолжает расти. Когда он достигает порога, регион будет разделен на два новых региона. Регионов становится все больше и больше.

Регион — это наименьшая единица распределенного хранилища и балансировки нагрузки в HBase. Разные регионы распределены по разным серверам регионов.

Регион состоит из одного или нескольких хранилищ, в каждом хранилище хранится семейство столбцов, а каждое хранилище состоит из хранилища памяти (хранящегося в памяти) и от 0 до нескольких файлов хранилища (хранящихся в HDFS).
вставьте сюда описание изображения

семейство столбцов семейство столбцов

Семейство столбцов является родителем каждого дочернего столбца. Каждый дочерний столбец принадлежит семейству столбцов. Семейство столбцов содержит один или несколько связанных столбцов. При создании таблицы необходимо указать семейство столбцов, но столбец не обязательно быть указано. Конкретный подстолбец представлен «имя семейства столбцов: имя столбца».

Схема в HBase — это TableName + Column Family Name.

квалификатор столбца

Это имя каждого подстолбца в семействе столбцов, или связанного столбца, или квалификатора, но перевод отличается.
Используйте columnFamily:columnдля поиска подстолбца.

элементарная ячейка памяти

Каждая ячейка, которую мы видим снаружи, на самом деле соответствует нескольким единицам хранения.По умолчанию ячейка соответствует единице хранения, и единица хранения может хранить часть данных.Если в ячейке несколько единиц хранения, это означает, что ячейка может хранить несколько значений. Количество единиц хранения может быть установлено версией. Единица хранения может быть
rowKey + columnFamily + column + timestampоднозначно идентифицирована Данные в ячейке не имеют типа и хранятся в форме байт-кода.

hbase сортирует версии времени в порядке убывания метки времени, а другие сопоставления сортируются в порядке возрастания.

Временная метка номера версии

Каждая ячейка содержит несколько версий одних и тех же данных. Версии индексируются по отметке времени. Тип временной метки — 64-битное целое число. Временная метка может быть назначена hbase (автоматически при записи данных), а временная метка — это текущее системное время с точностью до миллисекунд. Временные метки также могут быть явно назначены клиентами. Если приложения хотят избежать конфликтов версий данных, они должны сами генерировать уникальные временные метки. В каждой ячейке разные версии данных сортируются в обратном хронологическом порядке, то есть самые свежие данные находятся вверху.

Чтобы избежать бремени управления (включая хранение и индексирование), вызванного слишком большим количеством версий данных, hbase предлагает два метода повторного использования версий данных. Один из них — сохранить последние n версий данных, а другой — сохранить самую последнюю версию (например, за последние семь дней). Пользователи могут установить его для каждого семейства столбцов.

三:Оболочка HBase

имя описывать грамматика
помощь «Имя» для просмотра описания команды help 'имя команды'
кто я кто я кто я
версия Возвращает информацию о версии hbase версия
положение дел Вернуть информацию о состоянии кластера hbase положение дел
table_help Посмотрите, как за столом table_help
создавать создать таблицу создать «имя таблицы», «имя семейства столбцов 1», «имя семейства столбцов 2», «имя семейства столбцов N»
изменить изменить семейство столбцов Добавить семейство столбцов: изменить 'имя таблицы', 'имя семейства столбцов'
Удалить семейство столбцов: изменить 'имя таблицы', {ИМЯ=> 'имя семейства столбцов', МЕТОД=> 'удалить'}
описывать Показать подробную информацию о таблице описать «имя таблицы»
список Список всех таблиц, присутствующих в hbase список
существует Проверяет, существует ли таблица существует 'имя таблицы'
помещать Добавленные или измененные значения таблицы поместите «имя таблицы», «ключ строки», «имя семейства столбцов», «значение столбца»
поместите «имя таблицы», «ключ строки», «имя семейства столбцов: имя столбца», «значение столбца»
сканирование Получите соответствующее значение, просканировав таблицу scan 'имя таблицы'
сканирует семейство столбцов: scan 'имя таблицы', {COLUMN=>'имя семейства столбцов'}
сканирует столбец определенного семейства столбцов: scan 'имя таблицы', {COLUMN=>'имя семейства столбцов: имя столбца'}
Запросить несколько столбцов одного семейства столбцов: scan 'имя таблицы', {COLUMNS => ['имя семейства столбцов 1: имя столбца 1', 'имя семейства столбцов 1: имя столбца 2', … ]}
получать Получить значение строки или ячейки получить «имя таблицы», «ключ строки»
получить «имя таблицы», «ключ строки», «имя семейства столбцов»
считать подсчитывает количество строк в таблице count 'имя таблицы'
увеличение Увеличить значение указанной строки или столбца таблицы incr 'имя таблицы', 'ключ строки', 'семейство столбцов: имя столбца', значение шага
get_counter получить счетчик get_counter 'имя таблицы', 'ключ строки', 'семейство столбцов: имя столбца'
удалить Удалить значение указанного объекта (может быть значение, соответствующее таблице, строке, столбцу или указать значение метки времени) Удалить столбец семейства столбцов: удалить «имя таблицы», «ключ строки», «имя семейства столбцов: имя столбца»
удалить все Удалить все значения элементов указанной строки удалить все 'имя таблицы', 'ключ строки'
обрезать Воссоздать указанную таблицу обрезать «имя таблицы»
давать возможность сделать таблицу действительной включить «имя таблицы»
включен Включить ли is_enabled 'имя таблицы'
запрещать аннулировать таблицу отключить «имя таблицы»
выключен Это недействительно is_disabled 'имя таблицы'
уронить удалить таблицу Отбрасываемая таблица должна быть отключена отключить
«имя таблицы»
удалить «имя таблицы»
неисправность Закройте кластер hbase (отличается от выхода)
инструменты Список инструментов, поддерживаемых hbase
Выход выйти из оболочки hbase

HBase Shell — это набор команд, официально предоставленных для работы с HBase.如果配置了HBase的环境变量了,就可以知己在命令行中输入hbase shell 命令进入命令行。

hbase shell

вставьте сюда описание изображения

команда справки

help '命名名称'来Посмотреть можно по 命令行的具体使用,包括命令的作用和用法.
Используйте справку 'hbase' для просмотра всех команд, поддерживаемых оболочкой hbase.Hbase группирует команды, среди которых больше используются ddl и dml.
вставьте сюда описание изображения

вставьте сюда описание изображения

Четыре: общее наименование

1. Показать статус состояния кластера

Может быть «сводной», «простой», «подробной» или «репликационной». По умолчанию «сводная».

hbase> status
hbase> status 'simple'
hbase> status 'summary'
hbase> status 'detailed'
hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'

вставьте сюда описание изображения

2. Запрос версии версии базы данных

вставьте сюда описание изображения

3. Показать текущего пользователя и группу whoami

вставьте сюда описание изображения

4. Просмотрите команду table_help таблицы операций.

вставьте сюда описание изображения

5. Выйдите из оболочки HBase.

exit

Пять: команда ddl

1. Создать таблицу создать

Примечание. При создании таблицы необходимо указать только имя семейства столбцов, а не имя столбца.

# 语法
create '表名', {
    
    NAME => '列族名1'}, {
    
    NAME => '列族名2'}, {
    
    NAME => '列族名3'}
# 此种方式是上上面的简写方式,使用上面方式可以为列族指定更多的属性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等属性
create '表名', '列族名1', '列族名2', '列族名3'

create '表名', {
    
    NAME => '列族名1', VERSIONS => 版本号, TTL => 过期时间, BLOCKCACHE => true}


# 示例
create 'tbl_user', 'info', 'detail'
create 't1', {
    
    NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

вставьте сюда описание изображения

2. 修改(添加、删除)表结构Schema alter

2.1 添加一个列族

# 语法 
alter '表名', '列族名'

# 示例
alter 'tbl_user', 'address'

вставьте сюда описание изображения

2.2 删除一个列族

# 语法 
alter '表名', {
    
    NAME=> '列族名', METHOD=> 'delete'}

# 示例
alter 'tbl_user', {
    
    NAME=> 'address', METHOD=> 'delete'}

вставьте сюда описание изображения

2.3 修改列族的属性

可以修改列族的VERSIONS、IN_MEMORY

# 修改f1列族的版本为5
alter 't1', NAME => 'f1', VERSIONS => 5

# 修改多个列族,修改f2为内存,版本号为5
alter 't1', 'f1', {
    
    NAME => 'f2', IN_MEMORY => true}, {
    
    NAME => 'f3', VERSIONS => 5}

# 也可以修改table-scope属性,例如MAX_FILESIZE, READONLY,MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH等。
# 例如,修改region的最大大小为128MB:
alter 't1', MAX_FILESIZE => '134217728'

3. 异步修改Schema alter_async

# change or add the 'f1' column family in table 't1' from defaults
to instead keep a maximum of 5 cell VERSIONS
alter_async 't1', NAME => 'f1', VERSIONS => 5

# delete the 'f1' column family in table 'ns1:t1'
alter_async 'ns1:t1', NAME => 'f1', METHOD => 'delete'
alter_async 'ns1:t1', 'delete' => 'f1'

# change the max size of a family to 128MB
alter 't1', METHOD => 'table_att', MAX_FILESIZE => '134217728'
alter 't1', {
    
    NAME => 'f1'}, {
    
    NAME => 'f2', METHOD => 'delete'}

4. 获取alter_async执行的状态 alter_status

alter_status '表名'

5. 获取表的描述describe

# 语法 
describe '表名'

# 示例
describe 'tbl_user'

вставьте сюда описание изображения

6. 列举所有表list

вставьте сюда описание изображения

7. 表是否存在exists

# 语法 
exists '表名'

# 示例
exists 'tbl_user'

вставьте сюда описание изображения

8. 启用表enable和禁用表disable

通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来检查表是否被禁用。

# 语法
enable '表名'
is_enabled '表名'

disable '表名'
is_disabled '表名'

# 示例
disable 'tbl_user'
is_disabled 'tbl_user'

enable 'tbl_user'
is_enabled 'tbl_user'

вставьте сюда описание изображения

9. 禁用满足正则表达式的所有表disable_all

  • .匹配除“\n”和"\r"之外的任何单个字符
  • *匹配前面的子表达式任意次
# 匹配以t开头的表名
disable_all 't.*'
# 匹配指定命名空间ns下的以t开头的所有表
disable_all 'ns:t.*'
# 匹配ns命名空间下的所有表
disable_all 'ns:.*'

10. 启用满足正则表达式的所有表enable_all

enable_all 't.*'
enable_all 'ns:t.*'
enable_all 'ns:.*'

11. 删除表drop

需要先禁用表,然后再删除表,启用的表是不允许删除的

# 语法
disable '表名'
drop '表名'

# 示例
disable 'tbl_user'
drop 'tbl_user'

вставьте сюда описание изображения

12. 删除满足正则表达式的所有表drop_all

drop_all 't.*'
drop_all 'ns:t.*'
drop_all 'ns:.*'

13. 获取某个表赋值给一个变量 get_table

通过 var = get_table ‘表名’ 赋值给一个变量对象,然后对象.来调用,就像面向对象编程一样,通过对象.方法来调用,这种方式在操作某个表时就不必每次列举表名了。
вставьте сюда описание изображения

14. 获取rowKey所在的区 locate_region

locate_region '表名', '行键'

вставьте сюда описание изображения

15. 显示hbase所支持的所有过滤器show_filters

过滤器用于get和scan命令中作为筛选数据的条件,类型关系型数据库中的where的作用
вставьте сюда описание изображения

六:namespace命令

6.1 列举命名空间 list_namespace

вставьте сюда описание изображения

6.2 获取命名空间描述 describe_namespace

вставьте сюда описание изображения

6.3 查看命名空间下的所有表 list_namespace_tables

вставьте сюда описание изображения

6.4 创建命名空间create_namespace

вставьте сюда описание изображения

6.5 修改命名空间的属性

# add/modify a property
alter_namespace 'ns1', {
    
    METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
# delete a property
alter_namespace 'ns1', {
    
    METHOD => 'unset', NAME=>'PROPERTY_NAME'}

6.6 删除命名空间drop_namespace

drop_namespace '命名空间名称'

七:dml命令

1. 插入或者修改数据put

# 语法
# 当列族中只有一个列时'列族名:列名'使用'列族名'
put '表名', '行键', '列族名', '列值'
put '表名', '行键', '列族名:列名', '列值'

# 示例

# 创建表
create 'tbl_user', 'info', 'detail', 'address'

# 第一行数据
put 'tbl_user', 'mengday', 'info:id', '1'
put 'tbl_user', 'mengday', 'info:name', '张三'
put 'tbl_user', 'mengday', 'info:age', '28'

put 'tbl_user', 'mengday', 'detail:birthday', '1990-06-26'
put 'tbl_user', 'mengday', 'detail:email', '[email protected]'
put 'tbl_user', 'mengday', 'detail:create_time', '2019-03-04 14:26:10'

put 'tbl_user', 'mengday', 'address', '上海市'

# 第二行数据
put 'tbl_user', 'vbirdbest', 'info:id', '2'
put 'tbl_user', 'vbirdbest', 'info:name', '李四'
put 'tbl_user', 'vbirdbest', 'info:age', '27'

put 'tbl_user', 'vbirdbest', 'detail:birthday', '1990-06-27'
put 'tbl_user', 'vbirdbest', 'detail:email', '[email protected]'
put 'tbl_user', 'vbirdbest', 'detail:create_time', '2019-03-05 14:26:10'

put 'tbl_user', 'vbirdbest', 'address', '北京市'


# 第一行数据
put 'tbl_user', 'xiaoming', 'info:id', '3'
put 'tbl_user', 'xiaoming', 'info:name', '王五'
put 'tbl_user', 'xiaoming', 'info:age', '26'

put 'tbl_user', 'xiaoming', 'detail:birthday', '1990-06-28'
put 'tbl_user', 'xiaoming', 'detail:email', '[email protected]'
put 'tbl_user', 'xiaoming', 'detail:create_time', '2019-03-06 14:26:10'

put 'tbl_user', 'xiaoming', 'address', '杭州市'

вставьте сюда описание изображения

2. 全表扫描scan

获取表的所有数据

# 语法
scan '表名'

# 示例
scan 'tbl_user'

вставьте сюда описание изображения

注意:中文编码了

扫描整个列簇

# 语法
scan '表名', {
    
    COLUMN=>'列族名'}

# 示例
scan 'tbl_user', {
    
    COLUMN=>'info'}

вставьте сюда описание изображения

扫描整个列簇的某个列

# 语法
scan '表名', {
    
    COLUMN=>'列族名:列名'}

# 示例
scan 'tbl_user', {
    
    COLUMN=>'info:age'}

вставьте сюда описание изображения

3. 获取数据get

# 语法
get '表名', '行键'

# 示例
get 'tbl_user', 'mengday'

вставьте сюда описание изображения

根据某一行某列族的数据

# 语法
get '表名', '行键', '列族名'

# 示例
get 'tbl_user', 'mengday', 'info'

вставьте сюда описание изображения

# 创建表,c1版本为4, 元数据mykey=myvalue
hbase(main):009:0> create 't1', {
    
    NAME => 'c1', VERSIONS => 4}, METADATA => {
    
     'mykey' => 'myvalue' }
0 row(s) in 2.2810 seconds

=> Hbase::Table - t1
# 添加列族c2, c3
hbase(main):010:0> alter 't1', 'c2', 'c3'
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.8320 seconds

# 出入数据,c1 插入4个版本的值
hbase(main):011:0> put 't1', 'r1', 'c1', 'v1'
0 row(s) in 0.1000 seconds

hbase(main):012:0> put 't1', 'r1', 'c1', 'v11'
0 row(s) in 0.0180 seconds

hbase(main):013:0> put 't1', 'r1', 'c1', 'v111'
0 row(s) in 0.0140 seconds

hbase(main):014:0> put 't1', 'r1', 'c1', 'v1111'
0 row(s) in 0.0140 seconds

# 插入c2、c3的值
hbase(main):015:0> put 't1', 'r1', 'c2', 'v2'
0 row(s) in 0.0140 seconds

hbase(main):016:0> put 't1', 'r1', 'c3', 'v3'
0 row(s) in 0.0210 seconds

# 获取rowKey=r1的一行记录
hbase(main):017:0> get 't1', 'r1'
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c2:                                                timestamp=1552819392398, value=v2
 c3:                                                timestamp=1552819398244, value=v3
3 row(s) in 0.0550 seconds

# 获取rowKey=r1并且 1552819392398 <= 时间戳范围 < 1552819398244
hbase(main):018:0> get 't1', 'r1', {
    
    TIMERANGE => [1552819392398, 1552819398244]}
COLUMN                                              CELL
 c2:                                                timestamp=1552819392398, value=v2
1 row(s) in 0.0090 seconds

# 获取指定列的值
hbase(main):019:0> get 't1', 'r1', {
    
    COLUMN => 'c1'}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
1 row(s) in 0.0160 seconds

# 获取指定列的值,多个值使用数组表示
hbase(main):020:0> get 't1', 'r1', {
    
    COLUMN => ['c1', 'c2', 'c3']}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c2:                                                timestamp=1552819392398, value=v2
 c3:                                                timestamp=1552819398244, value=v3
3 row(s) in 0.0170 seconds

# 获取c1的值,获取4个版本的值,默认是按照时间戳降续排序的
hbase(main):021:0> get 't1', 'r1', {
    
    COLUMN => 'c1', VERSIONS => 4}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
 c1:                                                timestamp=1552819376343, value=v111
 c1:                                                timestamp=1552819368993, value=v11
 c1:                                                timestamp=1552819362975, value=v1
4 row(s) in 0.0180 seconds

# 获取c1的3个版本值
hbase(main):027:0* get 't1', 'r1', {
    
    COLUMN => 'c1', VERSIONS => 3}
COLUMN                                               CELL
 c1:                                                 timestamp=1552819382575, value=v1111
 c1:                                                 timestamp=1552819376343, value=v111
 c1:                                                 timestamp=1552819368993, value=v11
3 row(s) in 0.0090 seconds

# 获取指定时间戳版本的列
hbase(main):022:0> get 't1', 'r1', {
    
    COLUMN => 'c1', TIMESTAMP => 1552819376343}
COLUMN                                              CELL
 c1:                                                timestamp=1552819376343, value=v111
1 row(s) in 0.0170 seconds

hbase(main):023:0> get 't1', 'r1', {
    
    COLUMN => 'c1', TIMESTAMP => 1552819376343, VERSIONS => 4}
COLUMN                                              CELL
 c1:                                                timestamp=1552819376343, value=v111
1 row(s) in 0.0130 seconds

# 获取rowKey=r1中的值等于v2的所有列
hbase(main):024:0> get 't1', 'r1', {
    
    FILTER => "ValueFilter(=, 'binary:v2')"}
COLUMN                                              CELL
 c2:                                                timestamp=1552819392398, value=v2
1 row(s) in 0.0510 seconds


hbase(main):025:0> get 't1', 'r1', {
    
    COLUMN => 'c1', ATTRIBUTES => {
    
    'mykey'=>'myvalue'}}
COLUMN                                              CELL
 c1:                                                timestamp=1552819382575, value=v1111
1 row(s) in 0.0100 seconds

4. 删除某个列族中的某个列delete

# 语法
delete '表名', '行键', '列族名:列名'


create 'tbl_test', 'columnFamily1'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column2', 'value2'

delete 'tbl_test', 'rowKey1', 'columnFamily1:column1'

вставьте сюда описание изображения

5. 删除某行数据deleteall

# 语法
deleteall '表名', '行键'

# 示例
deleteall 'tbl_test', 'rowKey1'

вставьте сюда описание изображения

6. 清空整个表的数据truncate

先disable表,然后再drop表,最后重新create表

truncate '表名'

вставьте сюда описание изображения

7. 查询表中有多少行count

# 语法
count '表名'

# 示例
count 'tbl_user'

вставьте сюда описание изображения

8. 自增incr

# 语法
incr '表名', '行键', '列族:列名', 步长值

# 示例 
# 注意:incr 可以对不存的行键操作,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错
# ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide
incr 'tbl_user', 'xiaohong', 'info:age', 1

вставьте сюда описание изображения

9. 计数器get_counter

# 点击量:日、周、月
create 'counters', 'daily', 'weekly', 'monthly'
incr 'counters', '20110101', 'daily:hits', 1
incr 'counters', '20110101', 'daily:hits', 1
get_counter 'counters', '20110101', 'daily:hits'

вставьте сюда описание изображения

10. 修饰词

10.1 COLUMNS: 查询同一个列族的多个列

# 语法

scan '表名', {
    
    COLUMNS => [ '列族名1:列名1', '列族名1:列名2', ...]}

# 示例
scan 'tbl_user', {
    
    COLUMNS => [ 'info:id', 'info:age']}

вставьте сюда описание изображения

10.2 TIMESTAMP 指定时间戳

scan 't1', {
    
    COLUMNS => 'c2', TIMESTAMP=> 1552819392398}

10.3 TIMERANGE表示的是”>=开始时间 and <结束时间“

# 语法
scan '表名',{
    
    TIMERANGE=>[timestamp1, timestamp2]}

# 示例
scan 'tbl_user',{
    
    TIMERANGE=>[1551938004321, 1551938036450]}

вставьте сюда описание изображения

10.4 VERSIONS

默认情况下一个列只能存储一个数据,后面如果修改数据就会将原来的覆盖掉,可以通过指定VERSIONS时HBase一列能存储多个值。

create 'tbl_test', 'columnFamily1'
describe 'tbl_test'

# 修改列族版本号
alter 'tbl_test', {
    
     NAME=>'columnFamily1', VERSIONS=>3 }

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'

# 默认返回最新的一条数据
get 'tbl_test','rowKey1','columnFamily1:column1'

# 返回3个
get 'tbl_test','rowKey1',{
    
    COLUMN=>'columnFamily1:column1', VERSIONS=>3}
# 返回2个
get 'tbl_test','rowKey1',{
    
    COLUMN=>'columnFamily1:column1', VERSIONS=>2}

вставьте сюда описание изображения

10.5 STARTROW

ROWKEY起始行。会先根据这个key定位到region,再向后扫描

# 语法
scan '表名', {
    
     STARTROW => '行键名'}

# 示例
scan 'tbl_user', {
    
     STARTROW => 'vbirdbest'}

вставьте сюда описание изображения

10.6 STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据

# 语法
scan '表名', {
    
     STOPROW => '行键名'}

# 示例
scan 'tbl_user', {
    
     STOPROW => 'vbirdbest'}

вставьте сюда описание изображения

10.7 LIMIT 返回的行数

# 语法
scan '表名', {
    
     LIMIT => 行数}

# 示例
scan 'tbl_user', {
    
     LIMIT => 2 }

вставьте сюда описание изображения

11. FILTER条件过滤器

过滤器之间可以使用AND、OR连接多个过滤器。

ValueFilter 值过滤器

# 语法:binary 等于某个值
scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"
# 语法 substring:包含某个值
scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"

# 示例
scan 'tbl_user', FILTER=>"ValueFilter(=, 'binary:26')"
scan 'tbl_user', FILTER=>"ValueFilter(=, 'substring:6')"

вставьте сюда описание изображения

ColumnPrefixFilter 列名前缀过滤器

# 语法 substring:包含某个值
scan '表名', FILTER=>"ColumnPrefixFilter('列名前缀')"

# 示例
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth')"
# 通过括号、AND和OR的条件组合多个过滤器
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:26')"

вставьте сюда описание изображения

rowKey字典排序
Table中的所有行都是按照row key的字典排序的
вставьте сюда описание изображения

三:HBase 常见错误

hbase shell在使用的时候经常会报错,这里列举了几个错误:

1. HBase创建不存在的表报已经存在错误 ERROR: Table already exists: !

解决办法:

# 1. 进入zookeeper client模式
cd /usr/local/Cellar/hbase/1.2.9/bin
hbase zkcli

# 2. 在zk client模式下输入ls /hbase/table命令看到zombie table
ls /hbase/table

# 3. 删除表,TABLE_NAME为要删除的表名
rmr /hbase/table/TABLE_NAME

# 4. 重启hbase
./stop-hbase.sh
./start-hbase.sh

2. ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet

# 使用jps查看是否有datanode服务
jps

删除hadoop 的临时目录
/usr/local/Cellar/hadoop/3.1.1/libexec/tmp

3. ОШИБКА: невозможно получить мастер-адрес от ZooKeeper; данные znode == ноль

# 重启hbase
./stop-hbase.sh

./start-hbase.sh

4. ОШИБКА: org.apache.hadoop.hbase.PleaseHoldException: мастер инициализируется

Есть много причин для этой ошибки. Позвольте мне рассказать о причине моей ошибки здесь. Существует ошибка конфигурации имени атрибута в hbase-site.xml. Некоторые из Интернета hbase.rootdir, и имя настроено как это. Иногда он сообщает об ошибке, а иногда не сообщает об ошибке. , Когда сообщается об ошибке, отформатируйте Hadoop, а затем перезапустите его. Иногда этот метод может решить проблему, а иногда нет. Здесь я меняю hbase.rootdir на hbase.root.dir, и об ошибке не сообщается. Я не знаю, отличается ли конфигурация имени атрибута в разных версиях. Моя версия Hadoop — 3.1.1, а версия hbase — 1.2.9.

<!-- 正确的配置的属性名应为hbase.root.dir而不是hbase.rootdir -->
<property>
  <name>hbase.root.dir</name>
  <value>hdfs://localhost:8020/hbase</value>
</property>

рекомендация

отblog.csdn.net/liuwei0376/article/details/125765308