HBase常用的Shell命令详解

HBase Shell常用命令和基本操作

前言

如果忘记了完整的命令,从左输入命令部分内容,然后点击tab键会提示完整的命令

如输入cr 然后点击tab 就会有以下提示

hbase(main):001:0> create
create			   create_namespace

注意,输入的表名,行名,列族名,列名和值等必须都要带引号,否则会认为是一个命令。

注意,每个命令之后不需要分号 ; 结束。

基本操作

1. 进入HBase命令操作行

# hbase shell

2. HBase帮助命令:

hbase(main):002:0> help 'create'

3. 查询服务器状态

hbase(main):003:0> status
1 active master,0 backup masters, 3 servers,0 dead,2.0000 average load

4. 查询版本号

hbase(main):004:0> version
2.0.2.3.1.4.0-315, r, Fri Aug 23 05:18:48 UTC 2019

5. 查看元数据分区信息

hbase(main):042:0> scan 'hbase:meta'

6. 查看hbase中的表,hbase很重要

hbase(main):043:0> list_namespace_tables 'hbase'

DDL 操作

数据定义语言(Data Defination Language,DDL)操作主要操作表和库,查看、修改、删除表等操作。

1. 创建一个命名空间

命名空间相当于数据库

hbase(main):005:0>create_namespace 'namespace1'

2. 列出所有的命名空间

hbase(main):006:0>list_namespace

3. 删除命名空间

hbase(main):007:0>drop_namespace 'namespace1'

4. 创建一个表

创建表table1,列族为column_famaly1,column_famaly2

创建表必须有至少一个列族,多个列族用逗号分开。不指定命名空间,表创建在默认命名空间

hbase(main):008:0> create 'table1','column_famaly1','column_famaly2'

指定命名空间为namespace1 ,格式为create '命名空间:表名','列族名','列族名','列族名...'

hbase(main):009:0> create 'namespace1:table1','column_famaly1','column_famaly2'

创建表时指定列族可以保存的版本,如版本号为3,则可以保存3个版本,不指定默认为1

create '表名',{NAME=>'列族名1',VERSIONS=>给定一个版本号},{NAME=>'列族名2',VERSIONS=>给定的版本号}

创建表时预分区

create '表名','列族',SPLITS=>['1000000','2000000','3000000']

5. 列出所有表

hbase(main):010:0> list

6. 列出指定命名空间下所有表

hbase(main):011:0> list_namespace_tables 'namespace1'

7. 查看表的描述信息

desc和decribe都可以

可查看各个列族信息和版本

hbase(main):012:0> describe 'table1'

带命名空间的表

hbase(main):013:0> describe 'namespace1:table1'

描述信息解释

  NAME:表示列族名。

  BLOOMFILTER:表示为列族级别的类型(读者只作了解即可)。

  VERIONS:表示版本数。

  N_MEMORY:设置是否存入内存。

  KEEP_DELETED_CELLS:设置被删除的数据,在基于时间的历史数据查询中是否依然可见。

  DATA_BLOCK_ENCODING:表示数据块的算法(读者只作了解即可)。

  TTL:表示版本存活的时间。

  COMPRESSION:表示设置压缩算法。

  MIN_VERSIONS:表示最小版本数。

  BLOCKCACHE:表示是否设置读缓存。

  REPLICATION:表示设置备份。

8. 删除一个列族

hbase(main):014:0> alter 'table1',{NAME=>'column_famaly1',METHOD=>'delete'}

9. 添加一个列族

VERSIONS为可以保存的版本,5表示可以保存5个版本

若该列族已存在,也可以直接更新列族的版本

hbase(main):015:0> alter 'table1',{NAME=>'column_famaly1',VERSIONS => 5}

10. 删除表

需要先把表设置为不可用 disable。

hbase(main):016:0> disable'table1'

然后才能删除。

hbase(main):017:0> drop 'table1'

11. 查询表是否存在

hbase(main):018:0> exists 'table1'

12. 查看表是否可用

hbase(main):019:0> is_enabled 'table1'

DML 操作

DML(Data Manipulation Language,数据操作语言)操作主要操作表中的数据,对表的数据进行添加、修改、删除和查询。

0. 创建表做测试

在默认命名空间下,创建一个student表,有列族infoscores(个人信息和科目分数)

info可以保存的版本为3,scores版本为1

hbase(main):020:0> 
create 'student',{NAME=>'info',VERSIONS=>3},{NAME=>'scores',VERSIONS=>1}

1. 插入数据

插入数据的时候需要指定命名空间:表名行名列族:列名命名空间和列名可省

put '[命名空间:]表名','行名','列族名[:列名]','值'

向student表中增加以下数据

hbase(main):021:0> put 'student','rowkey1','info:name','xhx'

hbase(main):022:0> put 'student','rowkey1','info:age','20'

hbase(main):023:0> put 'student','rowkey1','info:sex','boy'

hbase(main):024:0> put 'student','rowkey2','scores:math','90'

如果不想指定列名就直接写列族:,冒号后面不加列名

hbase(main):025:0> put 'student','rowkey1','info:','nocol'

2. 全表扫描获取数据,可指定开始结束rowkey

获取 student表的所有数据。如果有多个版本数据会显示时间戳最近的一条数据。

hbase(main):026:0> scan 'student'
ROW                                COLUMN+CELL      
rowkey1                            column=info:, timestamp=1619157750674, value=nocol
rowkey1                            column=info:age, timestamp=1619157768685, value=20 
rowkey1                            column=info:name, timestamp=1619158508679, value=xhx3 
rowkey1                            column=info:sex, timestamp=1619157787678, value=boy
rowkey2                            column=scores:math, timestamp=1619157787700, value=90

扫描查看数据,指定查看

hbase(main):040:0> scan 'student',{LIMIT=>2}
ROW                                COLUMN+CELL      
rowkey1                            column=info:, timestamp=1619157750674, value=nocol
rowkey1                            column=info:age, timestamp=1619157768685, value=20 

扫描查看数据,指定开始和结束的rowkey,左闭右开(rowkey1 <= rowkey < rowkey2)

hbase(main):041:0> scan 'student',{STARTROW => 'rowkey1', STOPROW  => 'rowkey2'}
ROW                                COLUMN+CELL      
rowkey1                            column=info:, timestamp=1619157750674, value=nocol
rowkey1                            column=info:age, timestamp=1619157768685, value=20 
rowkey1                            column=info:name, timestamp=1619158508679, value=xhx3 
rowkey1                            column=info:sex, timestamp=1619157787678, value=boy
2.1 HBase中文显示是十六进制的,正常显示中文
scan 'student', {FORMATTER => 'toString'}

3. 获取指定的数据

获取 student表的 rowkey1行的所有数据。如果有多版本只显示时间戳最新一条的数据。

hbase(main):027:0> get 'student','rowkey1'
COLUMN                                CELL      
info:                                 timestamp=1619157750674, value=nocol
info:age                              timestamp=1619157768685, value=20 
info:name                             timestamp=1619158508679, value=xhx3 
info:sex                              timestamp=1619157787678, value=boy

获取 student表的 rowkey1行的info列族下所有数据。如果有多版本只显示时间戳最新一条的数据

hbase(main):028:0> get 'student','rowkey1','info'
COLUMN                                CELL      
info:                                 timestamp=1619157750674, value=nocol
info:age                              timestamp=1619157768685, value=20 
info:name                             timestamp=1619158508679, value=xhx3 
info:sex                              timestamp=1619157787678, value=boy

注意,获取列族 infoinfo:的结果是不同的。

hbase(main):029:0> get 'student','rowkey1','info:'
COLUMN                                CELL      
info:                                 timestamp=1619157750674, value=nocol

获取student表的 rowkey1行的info列族下列名为name的数据。如果有多版本只显示时间戳最新一条的数据

hbase(main):030:0> get 'student','rowkey1','info:name'
COLUMN                                CELL      
info:name                             timestamp=1619158508679, value=xhx3 

4. 更新数据

更新数据,增加多版本数据,列族info可以保存的版本为3条数据

更新表studentrowkey1 列族infoname的数据

hbase(main):031:0> put 'student','rowkey1','info:name','xhx1'

hbase(main):032:0> put 'student','rowkey1','info:name','xhx2'

hbase(main):033:0> put 'student','rowkey1','info:name','xhx3'

5. 如果有多版本获取多条数据

hbase(main):034:0> get 'student','rowkey1',{COLUMN=>'info:name',VERSIONS=>3}
info:name                             timestamp=1619158508679, value=xhx3
info:name                             timestamp=1619158507550, value=xhx2
info:name                             timestamp=1619158505321, value=xhx1

4. 通过指定时间戳获取某个版本的数据

hbase(main):035:0> get 'student','rowkey1',{COLUMN=>'info:name',TIMESTAMP=>1619158507550}
info:name                             timestamp=1619158507550, value=xhx2

6. 统计表中的行数

如student表中有rowkey1和rowkey2两行, 则返回2 row(s)

hbase(main):036:0> count 'student'

7. 删除一列

删除列sex

hbase(main):037:0> delete 'student','rowkey1','info:sex'

8. 删除行的所有单元格

删除student表中rowkey1行的所有列

也就是相当于删除了rowkey1行的所有数据

hbase(main):038:0> deleteall 'student','rowkey1'

9. 清空整张表

hbase(main):039:0> truncate 'student'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值