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'