Hbase–shell的使用


文章目录

  • Hbase--shell的使用
  • 一:Group name: general 通用命令
  • 二:Group name: namespace namespace 相关命令
  • 1)创建namespace
  • 2)查看namespace列表
  • 3)查看表的详细信息
  • 4) 修改 namespace
  • 5)删除namespace
  • 四:Group name: ddl 操作
  • 1)创建表 表名+列族
  • 2)查看 表列表
  • 3)查看表的详细描述信息
  • 4)修改表
  • 5)修改表状态信息
  • 6)查看表状态
  • 7)删除表
  • 五:Group name: dml操作
  • 1)数据插入
  • 2)扫描查询
  • 3)查询单条数据 一条 一个行健
  • 4)数据删除
  • 5)清空表
  • 6)count 统计表数据行数


一:Group name: general 通用命令

hbase shell :进入命令行

help :查看命令帮助文档

help command 查看某一个命令的详细使用

help 'alter_namespace'

Commands(命令): status, table_help, version, whoami

1)查看集群状态
status
2)查看hbase的版本的
version
3)查看安装用户的
whoami

二:Group name: namespace namespace 相关命令

在hbase中 没有数据库database的概念 替代概念namespace ,类似于文件夹

Commands(命令): alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

1)创建namespace
create_namespace 'namespace名字'
create_namespace 'name'
2)查看namespace列表
list_namespace

NAMESPACE

  • name :新建的name
  • default 默认namespace 建表没有指定namespace则这个表属于这个namespace的
  • hbase hbase的系统namespace
3)查看表的详细信息
describe_namespace 'namepaces'
describe_namespace 'name'
4) 修改 namespace

alter_namespace 针对属性修改的

5)删除namespace

drop_namespace ‘ns’

drop_namespace 'name'

四:Group name: ddl 操作

Commands(命令): alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

1)创建表 表名+列族

建表的时候至少指定一个列族
语法1: 可以指定每一个列族的属性的
create ‘namespace:表名’, {NAME => ‘列族的名’}, {NAME => ‘列族2的名字’}, {NAME => ‘列族3的名字’}

create ‘t1’, {NAME => ‘f1’, TTL => 2592000}

create 'name:test01',{NAME => 'info01'},{NAME => 'info02'}
 create 'name:test02',{NAME => 'info01',VERSIONS => 3},{NAME => 'info02'}//指定相关属性,列族2存储版本指定为3

语法2: 使用默认属性
create ‘表名’, ‘列族1’, ‘列族2’, ‘列族3’

create 'name_01','info01','info02'//第一个值未指定ns的名称就默认
 create 'name:name01','info1','info2'//指定ns的是name
2)查看 表列表

list 显示所有表
list ‘namespace:.*’ 查看指定namespace下的所有表

list 'name:.*'

list ‘namespace:b.*’ 查看指定namespace下的某些特征的表名
list_namespace_tables 'namespace’查看指定namespace下的所有表

list_namespace_tables 'name'
3)查看表的详细描述信息

describe|desc ‘表名’
desc ‘name01’

打印的表信息如下:

{NAME => 'info01', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE',
 DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}  
                                                       
{NAME => 'info02', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE',
 DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 't
rue', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
  • {} 描述的一个列族的信息
  • BLOCKCACHE :是否开启缓存
  • VERSIONS : 当前列族下数据存储的版本数 ,默认1 只保存最新的数据
  • TTL :数据过期时间 , 默认永久保存 ,可以设定一个时间戳 ,到了指定的时间戳自动删除数据
4)修改表

关键字:alter

添加列族
alter ‘表名’, NAME => ‘新的列族名’, VERSIONS => 5

alter 'name:test01',NAME => 'info03', VERSIONS => 2

删除列族
alter ‘namespace:表名’, NAME => ‘需要删除的列族’, METHOD => ‘delete’
alter ‘namespace:表名’, ‘delete’ => ‘需要删除的列族’

alter 'name:test01',NAME => 'info01',METHOD => 'delete'
alter "name:test01","delete" => "info03"

注意:如果表中只剩下一个列族 不允许删除的

5)修改表状态信息

禁用表
disable ‘表名’ 禁用某一个表
disable_all ‘namespace:.*’ 禁用指定 namespace 下的所有表

disable 'name:test01'
disable_all 'name:.*'

启用表
enable ‘表名’ 启用表
enable_all

enable 'name:test01'
enable_all 'name:.*'
6)查看表状态

hbase中 表 具有两个状态:

  • enable 启用状态 可以执行任何操作的
  • disable 禁用状态 不允许执行写操作

is_disabled ‘表名’ 查看表是否被禁用 true false
is_enabled ‘表名’ 查看表是否被启用 true false

is_disabled 'name:test01'
is_enabled 'name:test01'
7)删除表

先禁用表
drop ‘ns:t’ 删除指定表
drop_all ‘namespace:.*’ 删除指定namespace下的所有表

disable 'name:test02'
drop 'test02'

disable_all 'name:.*'
drop_all "name:.*"

五:Group name: dml操作

Commands(命令): append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

create “name:test01”,“info01”,“info02”

表数据: 行健 列 列值 时间戳

1)数据插入

hbase> put ‘namespace:表名’, ‘行健’, ‘列族:列名’, ‘列的值’, 时间戳

put 'name:test01','rk001','info01:name','zs'
put 'name:test01','rk001','info02:name','ww'
put 'name:test01','rk001','info02:age','15'
put 'name:test01','rk000','info01:age','13'
put 'name:test01','rk0000','info01:age','13'

每一次只能插入一行的 一列

2)扫描查询

为更加清楚看出扫描查询的效果,新建一个user_info表,并且插入较多的数据:

create 'user_info',{NAME=>'base_info',VERSIONS=>3 },{NAME=>'extra_info',VERSIONS=>1 }

put 'user_info', 'user0000', 'base_info:name', 'luoyufeng'
put 'user_info', 'user0000', 'base_info:age', '18'
put 'user_info', 'user0000', 'base_info:gender', 'female'
put 'user_info', 'user0000', 'extra_info:size', '34'
put 'user_info', 'user0001', 'base_info:name', 'zhangsan1'
put 'user_info', 'zhangsan_20150701_0001', 'base_info:name', 'zhangsan1'
put 'user_info', 'zhangsan_20150701_0002', 'base_info:name', 'zhangsan2'
put 'user_info', 'zhangsan_20150701_0003', 'base_info:name', 'zhangsan3'
put 'user_info', 'zhangsan_20150701_0004', 'base_info:name', 'zhangsan4'
put 'user_info', 'zhangsan_20150701_0005', 'base_info:name', 'zhangsan5'
put 'user_info', 'zhangsan_20150701_0006', 'base_info:name', 'zhangsan6'
put 'user_info', 'zhangsan_20150701_0007', 'base_info:name', 'zhangsan7'
put 'user_info', 'zhangsan_20150701_0008', 'base_info:name', 'zhangsan8'
put 'user_info', 'zhangsan_20150701_0001', 'base_info:age', '21'
put 'user_info', 'zhangsan_20150701_0002', 'base_info:age', '22'
put 'user_info', 'zhangsan_20150701_0003', 'base_info:age', '23'
put 'user_info', 'zhangsan_20150701_0004', 'base_info:age', '24'
put 'user_info', 'zhangsan_20150701_0005', 'base_info:age', '25'
put 'user_info', 'zhangsan_20150701_0006', 'base_info:age', '26'
put 'user_info', 'zhangsan_20150701_0007', 'base_info:age', '27'
put 'user_info', 'zhangsan_20150701_0008', 'base_info:age', '28'
put 'user_info', 'zhangsan_20150701_0001', 'extra_info:Hobbies', 'music'
put 'user_info', 'zhangsan_20150701_0002', 'extra_info:Hobbies', 'sport'
put 'user_info', 'zhangsan_20150701_0003', 'extra_info:Hobbies', 'music'
put 'user_info', 'zhangsan_20150701_0004', 'extra_info:Hobbies', 'sport'
put 'user_info', 'zhangsan_20150701_0005', 'extra_info:Hobbies', 'music'
put 'user_info', 'zhangsan_20150701_0006', 'extra_info:Hobbies', 'sport'
put 'user_info', 'zhangsan_20150701_0007', 'extra_info:Hobbies', 'music'
put 'user_info', 'baiyc_20150716_0001', 'base_info:name', 'baiyc1'
put 'user_info', 'baiyc_20150716_0002', 'base_info:name', 'baiyc2'
put 'user_info', 'baiyc_20150716_0003', 'base_info:name', 'baiyc3'
put 'user_info', 'baiyc_20150716_0004', 'base_info:name', 'baiyc4'
put 'user_info', 'baiyc_20150716_0005', 'base_info:name', 'baiyc5'
put 'user_info', 'baiyc_20150716_0006', 'base_info:name', 'baiyc6'
put 'user_info', 'baiyc_20150716_0007', 'base_info:name', 'baiyc7'
put 'user_info', 'baiyc_20150716_0008', 'base_info:name', 'baiyc8'
put 'user_info', 'baiyc_20150716_0001', 'base_info:age', '21'
put 'user_info', 'baiyc_20150716_0002', 'base_info:age', '22'
put 'user_info', 'baiyc_20150716_0003', 'base_info:age', '23'
put 'user_info', 'baiyc_20150716_0004', 'base_info:age', '24'
put 'user_info', 'baiyc_20150716_0005', 'base_info:age', '25'
put 'user_info', 'baiyc_20150716_0006', 'base_info:age', '26'
put 'user_info', 'baiyc_20150716_0007', 'base_info:age', '27'
put 'user_info', 'baiyc_20150716_0008', 'base_info:age', '28'
put 'user_info', 'baiyc_20150716_0001', 'extra_info:Hobbies', 'music'
put 'user_info', 'baiyc_20150716_0002', 'extra_info:Hobbies', 'sport'
put 'user_info', 'baiyc_20150716_0003', 'extra_info:Hobbies', 'music'
put 'user_info', 'baiyc_20150716_0004', 'extra_info:Hobbies', 'sport'
put 'user_info', 'baiyc_20150716_0005', 'extra_info:Hobbies', 'music'
put 'user_info', 'baiyc_20150716_0006', 'extra_info:Hobbies', 'sport'
put 'user_info', 'baiyc_20150716_0007', 'extra_info:Hobbies', 'music'
put 'user_info', 'baiyc_20150716_0008', 'extra_info:Hobbies', 'sport'
put 'user_info', 'rk0001', 'base_info:name', 'luoyufeng'
put 'user_info', 'rk0001', 'base_info:name', 'zhangsan'

一次返回多条数据
1.hbase> scan ‘namespace:表名’ 全表扫描

scan 'user_info:test01'

2.hbase> scan ‘namespace:表名’, {COLUMNS => [‘c1’, ‘c2’]} 指定扫描的列

scan 'user_info',{COLUMNS => "ibase_info:name"}
scan 'user_info',{COLUMNS => ["base_info:name","base_info:age"]}

3.hbase> scan ‘namespace:表名’, {COLUMNS => [‘c1’, ‘c2’],LIMIT => 10} 指定查询的行数 LIMIT 按照行健排序 返回指定的前几行的数据

scan 'user_info',{COLUMNS => ["base_info:name","base_info:age"],LIMIT=>10}

4.hbase> scan ‘namespace:t1’, {STARTROW => ,ENDROW => } 指定行健范围 扫描

scan 'user_info',{STARTROW => "zhangsan_20150701_0001"}  默认到末尾  包含开始行健
scan 'user_info',{ENDROW => "zhangsan_20150701_0001"}  默认从最开始  不包含结尾行健的
scan 'user_info',{STARTROW => "zhangsan_20150701_0001",ENDROW => "zhangsan_20150701_0004"}  含头不含尾

5.hbase> scan ‘namespace:t1’, {COLUMNS => ‘c1’, TIMERANGE => [1303668804, 1303668904]} 指定时间戳范围扫描

scan "user_info",{COLUMNS => "base_info:name",TIMERANGE => [1571642275758,1571642295062]}  时间戳范围  含头不含尾的

注意:hbase中的表数据按照行健排序的 字典 顺序 升序
底层存储 按照rowkey的字典顺序进行升序排的

3)查询单条数据 一条 一个行健

1.hbase> get ‘namespace:表名’, ‘行健’ // 查询某一行的所有数据

get 'user_info','zhangsan_20150701_0001'

2.hbase> get ‘namespace:表名’, ‘行健’, {TIMERANGE => [ts1, ts2]} //查询某一行 返回指定时间戳范围的列的值

get 'user_info','zhangsan_20150701_0001',{TIMERANGE => [1571666731851,1571642295063]}

3.hbase> get ‘namespace:t1’, ‘行健’, {COLUMN => ‘列’} 查询某一行指定列的数据

get "user_info","zhangsan_20150701_0001",{COLUMN => "base_info:name"}
get "user_info","zhangsan_20150701_0001",{COLUMN => ["base_info:name","extra_info:Hobbies"]}

4.hbase> get ‘namespace:t1’, ‘行健’, {COLUMN => ‘列’, TIMESTAMP => 时间戳} 指定某一行的某一个列的 某一个时间戳对应的值 cell的定位

get "user_info","zhangsan_20150701_0001",{COLUMN => "base_info:name",TIMESTAMP => 1571643964566}

5.hbase> get ‘namespace:t1’, ‘行健’, {COLUMN => ‘列’, VERSIONS => 4} 查询某一行 某一列的 指定版本的数据

get "user_info","zhangsan_20150701_0001",{COLUMN => "base_info:name",VERSIONS => 1}

4)数据删除

1.delete ‘namespace:表名’, ‘行健’, ‘列族:列’, 版本(时间戳):

delete "user_info","zhangsan_20150701_0001","base_info:name",1571643964566  //具体到时间戳的单条数据的删除
delete "user_info" ,"zhangsan_20150701_0001","base_info:name"   //具体到某一列的数据的删除
delete "user_info" ,"zhangsan_20150701_0001","base_info"   //具体到列族不可以,这样会报错,API可以

扫描查询:显示rowkey,和五个版本号,会发现已删除的数据版本号的type是:DeleteColumn(删除列)

scan "HbaseAPI:HbaseAPI01",{RAW=>TRUE,VERSION=>5}
 
 000002           column=info01:name, timestamp=1571744335845, type =DeleteColumn

2.deleteall “namespace:表名”,"行键“:”

delete "user_info","zhangsan_20150701_0001","base_info"   //删除该行键的所有数据

扫描查询:显示rowkey,和五个版本号,会发现已删除的数据版本号的type是:DeleteFamily(删除列族)

000003           column=info01:, timestamp=1571744874883, type=Del
                  eteFamily                                        
 000003           column=info02:, timestamp=1571744874883, type=Del
                  eteFamily

5)清空表

truncate '表名’

truncate "name:test01"

先禁用表—》 清空数据—》 启用表

6)count 统计表数据行数

count ‘namespace:表名’

count 'user_info'