HBase基于shell的增删改查等操作命令

1 篇文章 0 订阅
1 篇文章 0 订阅

1、基本命令

1.1 查询状态(status)

hbase(main):009:0> status

1.2 查看版本(version)

       hbase(main):001:0> version

1.3 查看帮助信息(help)

       hbase(main):038:0> help

hbase(main):038:0> get help

hbase(main):038:0> put help

2、一般操作

2.1 创建命名空间(create_namespace)

hbase(main):001:0> create_namespace ‘test’

2.2 查看命名空间(list_namespace)

       hbase(main):002:0> list_namespace

2.3 查看有哪些表(list)

       hbase(main):003:0> list

2.4 查看表结构信息(describe)

       hbase(main):004:0> describe 'test:user_info'

2.5 创建表(create)

语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}

  1. 创建表user_info,有两个family name:F1,F2,且版本数均为5

hbase(main):004:0> create 'test:user_info',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5}

2) 不指定表的命名空间,在创建的表的所属命名空间为 default

hbase(main):004:0> create ‘user_info',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5}

3)创建表user_order,并指定5个分区信息

hbase(main):021:0> create 'test:user_order',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5},SPLITS=>['20','40','60','80']

 

2.6 删除表(drop)

       删除表前先disable,然后drop。

hbase(main) :004:0> disable 'test:user_info'

hbase(main) :004:0> drop 'test:user_info'

2.7 修改表结构(alter)

       修改表结构前先disable,然后alter。

语法:alter <table>, {NAME => <family>}, {NAME => <family>, METHOD => 'delete'}

  1. 修改表user_info的F1的最大版本数为6.

hbase(main):009:0* disable 'test:user_info'

hbase(main):010:0> alter 'test:user_info',{NAME=>'F1',VERSIONS=>6}

hbase(main):011:0> enable 'test:user_info'

2.8添加数据(put)

语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>

  1. 给表user_info添加数据

hbase(main):014:0> put 'test:user_info','001001001','F1:real_name','我是HBase'

hbase(main):014:0> put 'test:user_info','001001001', 'F1:phone','18822666698'

2.9查询数据(get)

语法:get <table>,<rowkey>,[<family:column>,....]

  1. 查询rowkey=001001001一行下的所有的列值

hbase(main):019:0> get 'test:user_info','001001001'

    2. 查询rowkey=001001001一行下指定列的值

hbase(main):020:0> get 'test:user_info','001001001', 'F1:real_name','F1:phone'

2.10 扫描数据(scan)

语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num},另外,还可以添加STARTROW、STOP_ROW、TIMERANGE和FITLER等高级功能

  1. 扫描表user_info的前5条数据

hbase(main):001:0> scan 'test:user_info',{LIMIT=>5}

     2.扫描表user_info的COLUMNS=F1的前10条数据

hbase(main):041:0> scan 'test:user_info',{COLUMNS=>'F1',LIMIT=>5}

     3.扫描表user_info的开始行='00000000001',结束行=00000000010'的数据

       hbase(main):050:0> scan 'test:user_info',{STARTROW=>'00000000001',ENDROW=>'00000000010'}

     4.扫描表user_info的版本号大于5的所有数据

hbase(main):001:0> scan 'test:user_info',{VERSIONS=>5}

     5.扫描表user_info的时间戳在指定范围内的数据

hbase(main):003:0> scan 'test:user_info',{TIMERANGE=>[1564122031569,1564132831125],VERSIONS=>2}

2.11查看表的总行数

语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum},INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度

  1. 查看表user_info中的总行数,每2000条显示一次,缓存区为1000

hbase(main):005:0> count 'test:user_info', {INTERVAL => 2000, CACHE => 1000}

Current count: 2000, row: 00200000011
Current count: 4000, row: 00400000028
Current count: 6000, row: 00600000134
Current count: 8000, row: 00800000213
9967 row(s) in 0.1800 seconds

2.12删除列数据(delete)

语法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必须指定列名

  1. 删除表user_info中rowkey=’00200000011’,column=’F1:address’的数据

hbase(main):006:0> delete 'test:user_info','00200000011','F1:address'

2.13删除行数据(deleteall)

语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据。

  1. 删除表user_info中rowkey=’00200000011’的数据

hbase(main):007:0> deleteall 'test:user_info','00200000011'

2.14 删除表的所有数据(truncate)

语法:truncate <table>,具体过程是:disable table -> drop table -> create table

  1. 删除表user_info的所有数据

hbase(main):008:0> truncate ‘test:user_info’

2.15快照(snapshot)

1) 查看所有快照                list_snapshots

2)查看表的所有快照        list_table_snapshots

3) 创建快照                       snapshot 'test:user_info', 'snapshot.user_info.20190726'

4)删除快照                     delete_snapshot 'snapshot.user_info.20190726'

2.16查看表是否存在(exists)

       hbase(main):021:0> exists 'test:user_info'

2.17 查看表是否可用

hbase(main):022:0> is_enabled 'test:user_info'

2.18 禁用表(disable),启用表(enable)

3、过滤器

查看服务端生效的所有过滤器

hbase(main):027:0> show_filters

       uploading.gif转存失败重新上传取消

3.1 DependentColumnFilter

是一种允许用户指定一个参考列或引用列来过滤其他列的过滤器,过滤的原则是基于参考列的时间戳来进行筛选。

hbase(main):001:0> scan 'test:user_info',{ FILTER => "DependentColumnFilter('F1','phone')"}

3.2 KeyOnlyFilter

这个过滤器唯一的功能就是只返回每行的行键,值全部为空,这对于只关注于行键的应用场景来说非常合适,这样忽略掉其值就可以减少传递到客户端的数据量,能起到一定的优化作用。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "KeyOnlyFilter()"}

3.3 ColumnCountGetFilter

这个过滤器来返回每行最多返回多少列,并在遇到一行的列数超过我们所设置的限制值的时候,结束扫描操作。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "ColumnCountGetFilter(10)"}

3.4 SingleColumnValueFilter

用一列的值决定这一行的数据是否被过滤

       hbase(main):019:0>

scan 'test:user_info',{ FILTER => "SingleColumnValueFilter('F1','phone',>=,'18812346969')"}

3.5 PrefixFilter

Rowkey筛选出具有特定前缀的行键的数据。这个过滤器所实现的功能其实也可以由RowFilter结合RegexComparator来实现,不过这里提供了一种简便的使用方法。

       hbase(main):020:0> scan 'test:user_info',{ FILTER => "PrefixFilter('001000088')"}

3.6 SingleColumnValueExcludeFilter

用一列的值决定筛选条件的列的不会包含在返回的结果中

       hbase(main):021:0>

scan 'test:user_info',{ FILTER => " SingleColumnValueExcludeFilter ('F1','phone',=,'18812346969')"}

3.7 FirstKeyOnlyFilter

       如果只想返回的结果集中只包含第一列Rowkey的数据,那么这个过滤器能够满足你的要求。它在找到每行的Rowkey之后会停止扫描,从而使扫描的性能也得到了一定的提升

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "FirstKeyOnlyFilter()"}

3.8 ColumnRangeFilter

       该过滤器只扫描指定列名大小范围内的列,可以进行高效的列名内部扫描。

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "ColumnRangeFilter('address',true,'phone',true)"}

3.9 TimestampsFilter

       单元值时间版本过滤器,根据数据的时间戳版本进行过滤,其参数是一个集合列表。

       hbase(main):003:0> scan 'test:user_info',{ FILTER => "TimestampsFilter(1,2)"}

3.10 FamilyFilter

       列族过滤器,通常在Scan过程中通过设定某些列族来实现该功能,而不是直接使用该过滤器,该过滤器使用频率不高。

hbase(main):004:0> scan 'test:user_info',{ FILTER => "FamilyFilter(=,'F1')"}

3.11 QualifierFilter

       列名过滤器,对列名进行筛选,类似于行键过滤器,只是针对列名过滤而已。

hbase(main):007:0> scan 'test:user_info',{ FILTER => "QualifierFilter(=,'phone')"}

3.12 ColumnPrefixFilter

       用于列名(Qualifier)前缀过滤,即包含某个前缀的所有列名。

       hbase(main):010:0> scan 'test:user_info',{ FILTER => "ColumnPrefixFilter(=,'phon')"}

3.13 RowFilter

       行键过滤器:对行键进行过滤,执行Scan使用startRow/stopRow方式比较好,而RowFilter过滤器也可以完成对某一行的过过滤

       hbase(main):017:0> scan 'test:user_info',{ FILTER => "RowFilter(=,'00100008800')"}

3.14 MultipleColumnPrefixFilter

       MultipleColumnPrefixFilter与ColumnPrefixFilter 的行为类似,但可以指定多个列名(Qualifier)前缀。

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "MultipleColumnPrefixFilter('add','pho')"}

3.15 InclusiveStopFilter

       包含结束行键的过滤器,常规的Scan包含startRow 但不包含stopRow,如果使用该过滤器便可以包含stopRow。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "InclusiveStopFilter('0010088888999')"}

3.16 PageFilter

       行键分页过滤器:基于行的分页。

       hbase(main):004:0> scan 'test:user_info',{ FILTER => "PageFilter(10)"}

3.17 ValueFilter

       单元值过滤器:对单元值进行过滤

       hbase(main):006:0> scan 'test:user_info',{ FILTER => "ValueFilter('abcd')"}

3.18 ColumnPaginationFilter

       列分页过滤器:基于列进行分页,需要设置偏移量与返回数量。

       hbase(main):009:0> scan 'test:user_info',{ FILTER => "ColumnPaginationFilter(10,1)"}

4、附加说明

4.1建表语句详解

create 'test:user_info',{NAME => 'F1', BLOOMFILTER => ''ROW ', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'LZO', TTL => 'FOREVER', IN_MEMORY => 'false', BLOCKCACHE => 'false'},

 {NAME => 'F2', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'LZO', TTL => ' FOREVER ', IN_MEMORY => 'true'}

其中的属性有:

  1. REPLICATION_SCOPE:复制份数;
  2. NAME:包含一个列簇“F1”
  3. VERSIONS:设置历史版本数,默认为1

4)BLOOMFILTER: 布隆过滤器,优化HBase的随即读取性能,可选值NONE|ROW|ROWCOL,默认为NONE,该参数可以单独对某个列簇启用。启用过滤器,对于get操作以及部分scan操作可以剔除掉不会用到的存储文件,减少实际IO次数,提高随机读性能。Row类型适用于只根据Row进行查找,而RowCol类型适用于根据Row+Col联合查找,如下:

Row类型适用于:get ‘test:user_info’,’row1′

RowCol类型适用于:get ‘test:user_info’,’row1′,{COLUMN => ‘F1’}

对于有随机读的业务,建议开启Row类型的过滤器,使用空间换时间,提高随机读性能。

5)COMPRESSION:数据压缩方式,HBase支持多种形式的数据压缩,一方面减少数据存储空间,一方面降低数据网络传输量进而提升读取效率。目前HBase支持的压缩算法主要包括三种:GZip | LZO | Snappy,下面表格分别从压缩率,编解码速率三个方面对其进行对比:

(1) GZIP的压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢;

(2) LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多;

(3) Zippy/Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些。

Snappy的压缩率最低,但是编解码速率最高,对CPU的消耗也最小,目前一般建议使用Snappy。

6)IN_MEMORY:数据是否常驻内存,默认为false。HBase为频繁访问的数据提供了一个缓存区域,缓存区域一般存储数据量小、访问频繁的数据,常见场景为元数据存储。默认情况,该缓存区域大小等于Jvm Heapsize * 0.2 * 0.25 ,假如Jvm Heapsize = 70G,存储区域的大小约等于3.2G。需要注意的是HBase Meta元数据信息存储在这块区域,如果业务数据设置为true而且太大会导致Meta数据被置换出去,导致整个集群性能降低,所以在设置该参数时需要格外小心。

7)BLOCKCACHE:是否开启block cache缓存,默认开启。

8) TTL:数据过期时间,单位为秒,默认为永久保存。对于很多业务来说,有时候并不需要永久保存某些数据,永久保存会导致数据量越来越大,消耗存储空间是其一,另一方面还会导致查询效率降低。如果设置了过期时间,HBase在Compact时会通过一定机制检查数据是否过期,过期数据会被删除。用户可以根据具体业务场景设置为一个月或者三个月。示例中TTL => ‘ 259200’设置数据过期时间为三天,以最后一次更新时间为开始时间(TTL=>的更新超时时间是指:该列最后更新的时间,到超时时间的限制,而不是第一次创建,到超时时间。)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值