工作生活

HBase 常用终端命令

2019-06-30  本文已影响0人  xingzai

  HBase 是一个分布式的、面向列的开源数据库,HBaseHadoop 之上提供了类似于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

关键字 STARTROWSTOPROW 稍有区别,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
上一篇 下一篇

猜你喜欢

热点阅读