一、Hbase shell相关操作
进入Hbase操作
hbase shell说明:搭建好了大数据平台前提下,并且配置了配置环境变量,直接在任何路径下可用
1、help 帮助命令
help '命令名字'1.1、status 查看状态
1.2、version 查看版本
2、hbase中数据库的概念
namespace(命名空间,相当于传统数据库的DataBases)
2.1、显示所有的数据库(命名空间)
list_namespace
默认 default 库
hbase
2.2、显示当前数据库(命名空间)中所有的表
list_namespace_tables 'hbase'
2.3、创建一个数据库(命名空间)
create_namespace 'liuwunan'
说明:其实默认的default 完全够用
2.4、描述数据库(命名空间)
describe_namespace 'liuwunan'
2.5、修改数据库(命名空间)
alter_namespace
2.6、删除数据库(命名空间)
drop_namespace 'liuwunan'
3、创建hbase中的表【重点】
create '表名','列簇'
3.1、基本的建表方式 【默认default库中】
创建 '表名t1','列簇cf1'
create 't1','cf1'
3.2、创建多个列簇【默认default库中】
create 't1','cf1','cf2'
3.3、指定表所属的数据库
create 'liuwunan:t1','cf1'
创建表指定'库为liuwunan:表名t1','列簇为cf1'
3.4、详细描述列簇的相关属性
create 'liuwunan:t2',{NAME=>'cf1',VERSIONS=>2},{NAME=>'cf2'}
创建表t2指定数据库库为liuwunan,指定列簇一数据版本号为cf1,列簇2数据版本号为默认3
4、描述表
describe 'liuwunan:t1'
5、修改表类簇版本号
alter 'liuwunan:t2',{NAME=>'cf2',VERSIONS=>2}
6、删除表
disable 'liuwunan:t2'
drop 'liuwunan:t2'
【hbase在删表之前需要先将表挂起,禁用】
【truncate 'table_name' 是HBase是先将表disable,再drop the table,最后creating table】
7、失效 生效表相关命令
enable disable
enable_all disable_all
is_enable is_disable
8、判断表是否存在
exists '表名'
9、表的查找命令
list 'ns:t.*'
查询当前ns库下的ns库下的t开头的所有表
10、 插入数据
put 't1','rowkey','列簇:字段','值'
put 'default:Student','13565465702','baseInfo:age','11111111'
11、 删除数据指定时间戳某字段的数据
delete 'ns:t1' ,'rowkey','family:qualify','timestamp'
12、 全表扫描
scan '表名'
scan 'Student'
13、全表区间扫描
scan '库名:表名', {STARTROW => '起始RowKey',STOPROW => '结束RowKey'}
scan 'default:Student',{STARTROW=>'13565465702',STOPROW=>'15778117684'}
14、 根据RowKey的查询
get 'default:Student','13820648931'
15、全表扫描,只展示一条数据【LIMIT】
scan 'default:Student',{LIMIT => 1}
16、更新数据,PUT(RowKey相同,数据覆盖即更新)
put 'default:Student','13565465702','baseInfo:age','11111111'
17、Hbase表总量统计
count '表名'
18、Scan全表指定列簇扫描
扫描 '表名','列簇'
scan 'Student',{COLUMNS=>'baseInfo'}18.1、Scan全表扫描指定列簇和列名
扫描 '表名',{COLUMNS=>''列簇.字段}
scan 'Student',{COLUMNS=>'baseInfo:age'}18.2、Scan全表扫描指定多列簇和多字段,并且限制条数
scan '表名',{COLUMNS=>['列簇1:字段1','列簇2:字段2'],LIMIT=>3}
scan 'Student',{COLUMNS=>['baseInfo:age','schoolInfo:name'],LIMIT=>3}18.3、限制时间范围
scan 'Student',{TIMERANGE=>[1448045892646,1848045892647]}18.4、Filter 过滤部分
PrefixFilter:rowKey前缀过滤
scan 'Student',{FILTER=>'PrefixFilter('135')'}18.5、QualifierFilter:列过滤器
QualifierFilter对列的名称进行过滤,而不是列的值。
scan 'Student',{FILTER=>"PrefixFilter('1') AND QualifierFilter(>=,'binary:b')"}
18.6、TimestampsFilter:时间戳过滤器
scan 'Student',{FILTER=>"TimestampsFilter(1448069941270,1548069941230)"}18.7、设置数据TTL时间(存活时长)
Hbase关于TTL
ColumnFamilies可以以秒为单位来设置 TTL(Time To Live)长度,
生命时长,一旦达到到期时间,HBase 将自动删除行。
设置hbase.store.delete.expired.storefile为false将禁用此功能。
将最小版本数设置为 0 ,外的值也会禁用此功能。也支持设置时间以每个单元列为基础生存。单元格TTL是使用突变 setTTL 作为突变请求(例如:Appends、Increments、Puts)的属性提交的。
单元格TTL以毫秒为单位而不是秒;
单元格TTL不能将一个单元的有效生命周期延长超过 ColumnFamily 级 TTL 设置.
设置TTL 创建表的时候指定
create 't_task_log',{NAME => 'cf', TTL=>'86400'}查看TTL
desc "t_task_log" TTL => 'FOREVER'
修改TTL
禁用表disable "t_task_log"
设置TTL值,作用于列族 cf
alter "t_task_log",NAME=>'cf',TTL=>'86400'
恢复表enable "t_task_log"
高版本hbase可以不需要先禁用表,可直接在线修改TTL.创建一个测试表,并添加列族cf
TableName tableName = TableName.valueOf("test");
TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes()).build())
.build();admin.createTable(tableDescriptor);
2.为当前的表添加一个ttl的列族(默认设定时间为10秒)
ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder.newBuilder("ttl-cf".getBytes()).setTimeToLive(10)
.build();admin.addColumnFamily(tableName, cfDesc);
System.out.println("为表添加一个具有TTL的列族ttl-cf,设定超时时间为10s");
编码设置单元TTL
Put put = new Put(Bytes.toBytes("row1"));
put.setTTL(86400L);