hbase_shell命令

 进入shell

hbase shell

1. 查看共有哪些表:list

2. 查询表记录数:count ‘tablename’

有三种方法:

方法一:

hbase> count ‘t1′  

hbase> count ‘t1′, INTERVAL => 100000  

hbase> count ‘t1′, CACHE => 1000  

hbase> count ‘t1′, INTERVAL => 10, CACHE => 1000  

其中,INTERVAL为统计的行数间隔,默认为1000CACHE为统计的数据缓存。这种方式效率很低,如果表行数很大的话不建议采用这种方式

 

方法二:

 调用Mapreduce

$HBASE_HOME/bin/hbase   org.apache.hadoop.hbase.mapreduce.RowCounter ‘tablename’  

这种方式效率比上一种要高很多,调用的hbase jar中自带的统计行数的类。

扫描了一张64条记录的表,用了好几十秒。主要是启动mapreduce慢,如果是万行以上的大表,可能比count命令快。

 

方法三:

hive over hbase

如果已经见了hivehbase的关联表的话,可以直接在hive中执行sql语句统计hbase表的行数。

hive over hbase 表的建表语句为:

/*创建hivehbase的关联表*/

CREATE TABLE hive_hbase_1(key INT,value STRING)  

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  

WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,cf:val")  

TBLPROPERTIES("hbase.table.name"="t_hive","hbase.table.default.storage.type"="binary"); 

/*hive关联已经存在的hbase*/

CREATE EXTERNAL TABLE hive_hbase_1(key INT,value STRING)  

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  

WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,cf:val")  

TBLPROPERTIES("hbase.table.name"="t_hive","hbase.table.default.storage.type"="binary");  

 

关于hbase的数据统计,count是全表扫描后再计数,效率十分低下,不建议这么做,如果是为了记录pvuv的话,建议在插入记录的时候在另一张表就记录好count值,到时直接读值,不要去临时计数。

 

3. 扫描整张表:scan ‘tablename’

4. 取前两条记录:scan ‘tablename’,{LIMIT=>2}

5. 创建表create table,fieldFamily

表名和列族必须先初始化,该表才能使用。

示例,创建一个表test_newTable,只有一个列族prop

create ’test_newTable’,’prop’

也可以使用更复杂的语句:

create 'test_newTable',{NAME => 'prop', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'true', BLOCKCACHE => 'true'}

如果有多个列族,以逗号隔开,如:

create ’test_newTable’,’prop’,’prop2’

参数含义:

参数名

含义

默认值

可取值

BLOCKSIZE

HFile数据块大小

6553664K

XB

BLOOMFILTER

布隆过滤器(占用内存空间)

NONE

ROW/ROWCOL

IN_MEMORY

数据块缓存(作用不大)

true

true,false

COMPRESSION

数据压缩(减少IO,增加CPU

 

SNAPPY/GZIP

VERSIONS

单元时间版本

3

 

TTL

生存时间

 

X


6. 查看表结构describe tablename

语法:describe ‘tablename’

如:

hbase(main):004:0> describe 'test_newTable'

Table test_newTable is ENABLED                                                                                                                 

test_newTable                                                                                                                                  

COLUMN FAMILIES DESCRIPTION                                                                                                                    

{NAME => 'prop', 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'}               

1 row(s) in 0.0390 seconds

 

7. 添加列族

如添加”!lock!”列族

alter 'my_mutable7',{NAME=>'!lock!',VERSIONS=>1}

 

8. 添加记录

语法:

put ‘tablename’,’rowkey’,’family:column’,’value’

需要指定表名,rowkey,列族:列名,列值

如:put 'harve_merchant','d2e32686-5704-44df-8c58-428d3b6180a0','prop:settleAt','2018-01-12 11:00:00'

 

9. 修改记录

同添加记录

 

10. 通过rowkey查询记录

get ‘tablename’,’rowkey’

 

11. 通过条件查询记录

可以在shell中使用filter,但需要先引入其包,即需要按下面的顺序输入:

import org.apache.hadoop.hbase.filter.CompareFilter

import org.apache.hadoop.hbase.filter.SingleColumnValueFilter

import org.apache.hadoop.hbase.filter.SubstringComparator

import org.apache.hadoop.hbase.util.Bytes

scan 'share_people',{FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('prop'),Bytes.toBytes('name'),CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('quxiaodan'))}

上面的例子是查'share_people'表中,prop列族,namequxiaodan的记录


12. 删除记录

删除行中的某个列值:

语法:delete <table>,<rowkey>,<family:column>,<timestamp>

必须指定列名

例如:删除表t1,rowkey001中的f1:col1的数据

hbase(main)> delete 't1','rowkey001','f1:col1'

删除行:

语法:deleteall <table>, <rowkey>,<family:column>,<timestamp>

可以不指定列名,删除整行数据

例如:删除表t1,rowk001的数据

hbase(main)> deleteall 't1','rowkey001'

 

13. 清空表truncate tablename

 truncate tablename

删除后再扫描表,将扫不到记录:

 

14. 删除表disable table;drop table

分两步:首先disable,然后drop


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值