HBase 常用终端命令
HBase
是一个分布式的、面向列的开源数据库,HBase
在Hadoop
之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于 非结构化
数据存储的数据库。另一个不同的是HBase 基于列
的而不是 基于行
的模式。它利用Hadoop HDFS
作为其文件存储系统,利用 Hadoop MapReduce
来处理HBase中的海量数据,利用 Zookeeper
作为协同服务。
hbase是一张表:表中有一个唯一键
是 row key
,每个row key 对应 N(N >= 1)个列族。每个列族由N个列组成(N>=1)。
1. hbase shell
进入安装有Hbase的终端,执行 hbase shell
命令,就进入了Hbase的控制界面。
-bash-4.2$ hbase shell
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
19/06/30 16:11:36 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.0-cdh5.13.0, rUnknown, Wed Oct 4 11:19:19 PDT 2017
2. hbase 基本信息
hbase(main):001:0> status
1 active master, 1 backup masters, 6 servers, 0 dead, 10.5000 average load
# 版本信息
hbase(main):002:0> version
1.2.0-cdh5.13.0, rUnknown, Wed Oct 4 11:19:19 PDT 2017
# HBase当前用户详细信息
hbase(main):003:0> whoami
reatime_hbase_client (auth:SIMPLE)
groups: reatime_hbase_client
3. 建表(create)
hbase(main):004:0> create 'test_table', 'column_family_1', 'column_family_2'
0 row(s) in 2.3900 seconds
=> Hbase::Table - test_table
创表的关键字是 create
,”test_table”是表名,”column_family_1”,”column_family_2”是不同的列族名。
4. list 列出所有的表
hbase(main):005:0> list
TABLE
test_table
1 row(s) in 0.0250 seconds
=> ["test_table"]
5. describe命令查看表结构
hbase(main):006:0> describe 'test_table'
Table test_table is ENABLED
test_table
COLUMN FAMILIES DESCRIPTION
{NAME => 'column_family_1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSI
ON => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'column_family_2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSI
ON => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.1250 seconds
6. 插入与更新数据(put)
hbase(main):007:0> put 'test_table', '1', 'column_family_1:name', 'zhangsan'
0 row(s) in 0.1490 seconds
put
方法可以插入新数据,也可用于更新数据,使用方法与上述一致。
7. 读取数据
get
读取某一个row key下的数据
hbase(main):008:0> get 'test_table', '1'
COLUMN CELL
column_family_1:name timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0160 seconds
scan
命令查看所有数据
hbase(main):009:0> scan 'test_table'
ROW COLUMN+CELL
1 column=column_family_1:name, timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0210 seconds
若只需取’column_family_1’列族下的数据,则:
hbase(main):010:0> scan 'test_table', {COLUMN => 'column_family_1'}
ROW COLUMN+CELL
1 column=column_family_1:name, timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0190 seconds
若需取’column_family_1’,’column_family_2’多列列族数据:
hbase(main):011:0> scan 'test_table', {COLUMN => ['column_family_1', 'column_family_2']}
ROW COLUMN+CELL
1 column=column_family_1:name, timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0130 seconds
column_family_2因为目前没有插入数据。
若要获取row key 大于等于某key的情况:
hbase(main):012:0> scan 'test_table', {COLUMN => ['column_family_1:name'], STARTROW => '1'}
ROW COLUMN+CELL
1 column=column_family_1:name, timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0220 seconds
关键字 STARTROW
与 STOPROW
稍有区别,STARTROW
后的 row key 是包含在内,而 STOPROW
后的 row key 则是不包含的关系,相当于 “左闭右开” 的关系。
若想以反序获取两行数据,row key
是唯一主键,这个限制的数量是针对主键row key的,默认情况下 REVERSED
=> false。
hbase(main):013:0> scan 'test_table', {LIMIT => 2, REVERSED => true}
ROW COLUMN+CELL
1 column=column_family_1:name, timestamp=1561884248759, value=zhangsan
1 row(s) in 0.0350 seconds
8. count 数据量
hbase(main):003:0> count 'test_table'
9. 删除数据
难免有数据插入不当的情况,可用 delete
命令删除:
hbase(main):014:0> put 'test_table', '2', 'column_family_2:', 'value2'
0 row(s) in 0.0120 seconds
hbase(main):015:0> get 'test_table', '2','column_family_2:'
COLUMN CELL
column_family_2: timestamp=1561885736192, value=value2
1 row(s) in 0.0120 seconds
hbase(main):016:0> delete 'test_table', '2', 'column_family_2:'
0 row(s) in 0.0320 seconds
hbase(main):017:0> get 'test_table', '2', 'column_family_2:'
COLUMN CELL
0 row(s) in 0.0040 seconds
delete
这个方法只能删除具体到哪一行中的某个列族下的某一列数据,想要删除一整行数据,需用 deleteall
命令:
hbase(main):018:0> put 'test_table', '3', 'column_family_2:', 'value3'
0 row(s) in 0.0130 seconds
hbase(main):019:0> put 'test_table', '3', 'column_family_1:column_2', 'value3'
0 row(s) in 0.0090 seconds
hbase(main):020:0> get 'test_table', '3'
COLUMN CELL
column_family_1:column_2 timestamp=1561886169229, value=value3
column_family_2: timestamp=1561886079351, value=value3
2 row(s) in 0.0250 seconds
hbase(main):021:0> deleteall 'test_table', '3'
0 row(s) in 0.0050 seconds
hbase(main):022:0> get 'test_table', '3'
COLUMN CELL
0 row(s) in 0.0080 seconds
若需删除整张表的数据,可用 truncate
命令:
hbase(main):023:0> truncate 'test_table'
Truncating 'test_table' table (it may take a while):
- Disabling table...
- Truncating table...
0 row(s) in 4.5080 seconds
hbase(main):024:0> scan 'test_table'
ROW COLUMN+CELL
0 row(s) in 0.2180 seconds
10. 删除表
删除表可用 drop
命令:
表创建成功后,默认状态是 enable
,即“使用中”的状态,删除表之前需先设置表为“关闭中”。
设置表为“使用中”:enable 'hbase_test'
设置表为“关闭中”:disable 'hbase_test',如上 truncate
删除整张表的数据时,显示也是先Disabling table...
hbase(main):025:0> list
TABLE
test_table
1 row(s) in 0.0100 seconds
=> ["test_table"]
hbase(main):026:0> disable 'test_table'
0 row(s) in 2.2700 seconds
hbase(main):027:0> drop 'test_table'
0 row(s) in 1.2690 seconds
hbase(main):028:0> list
TABLE
0 row(s) in 0.0230 seconds
=> []
11. 执行脚本
hbase 与 hive 一样,都是可以直接执行脚本的。比如之前的 put 命令,一个个填写复制粘贴写数据很麻烦,可以全部 put 命令放在 test_table 文件中:
-bash-4.2$ hbase shell test_table