0.進入hbase shell
./hbase shell
help
help “get” #查看單獨的某個命令的幫助
1. 一般命令
- status 查看狀態
- version 查看版本
2.DDL(數據定義語言Data Definition Language)命令
1. 創建表
create ‘表名稱’,’列名稱1’,’列名稱2’,’列名稱3’
如:
create 'member','member_id','address','info'
- 1
2.列出所有的表
list
list ‘abc.*’ #顯示abc開頭的表
3.獲得表的描述
describe ‘table_name’
Table play_error_file is ENABLED
play_error_file
column families description
{
NAME => 'cf',
BLOOMFILTER => 'ROW',#根據應用來定,看需要精確到rowkey還是column。bloom filter的作用是對一個region下查找記錄所在的hfile有用。一個region下hfile數量越多,bloom filter的作用越明顯。適合那種compaction(壓縮)趕不上flush速度的應用。
VERSIONS => '1',# 通常是3,對於更新比較頻繁的應用可以設置為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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
4.刪除一個列族 alter,disable, enable
disable 'member' #刪除列族時必須先將表給disable
alter 'member',{NAME=>'member_id',METHOD=>'delete'}
#刪除后繼續enable 'member'
enable 'member'
- 1
- 2
- 3
- 4
5.刪除表
disable 'table_name'drop 'table_name'
- 1
- 2
6.查詢表是否存在
exists 'table_name'
- 1
7.判斷表是否enabled
is_enabled 'table_name'
- 1
8.更改表名
//快照 這樣試試,先建立個表自己測試下,可以的話在執行。
需要開啟快照功能,在hbase-site.xml文件中添加如下配置項:
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
//命令
hbase shell> disable 'tableName'
hbase shell> snapshot 'tableName', 'tableSnapshot'
hbase shell> clone_snapshot 'tableSnapshot', 'newTableName'
hbase shell> delete_snapshot 'tableSnapshot'
hbase shell> drop 'tableName'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
3.DML(data manipulation language)操作
1.插入
在ns1:t1或者t1表里的r1行,c1列中插入值,ts1是時間
put 'ns1:t1', 'r1','c1','value'or
put 't1','r1','c1','value'or
put 't1','r1','c1','value',ts1
or
put 't1','r1','c1','value',{ATTRIBUTES=>{'mykey'=>'myvalue'}}
put 't1','r1','c1','value',ts1,{ATTRIBUTES=>{'mykey'=>'myvalue'}}
put 't1','r1','c1','value',ts1,{VISIBILITY=>'PRIVATE|SECRET} # t是table 't1'表的引用 t.put 'r1','c1','value',ts1,{ATTRIBUTES=>{'mykey'=>'myvalue'}} put 'table_name','row_index','info:age','24' put 'table_name','row_index','info:birthday','1987-06-17' put 'table_name','row_index','info:company','tencent' put 'table_name','row_index','address:contry','china' put 'table_name','row_index','address:province','china' put 'table_name','row_index','address:city','shenzhen'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2.獲取一條數據
# 獲取一個id的所有數據get 'table_name','row_index'# 獲取一個id,一個列族的所有數據get 'table_name','row_index','info'# 獲取一個id,一個列族中一個列的所有數據get 'table_name','row_index','info:age'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.更新一條記錄
將qy的單位改為qq
put ‘table_name’,’qy’,’info:company’,’qq’
4.通過timestrap來獲取兩個版本的數據
# 得到company為tencent的記錄
get 'table_name','qy',{COLUMN=>'info:company',TIMESTRAP=>1321586238965}
# 得到company為qq的數據
get 'table_name','qy',{COLUMN=>'info:company',TIMESTRAP=>1321586271843}
- 1
- 2
- 3
- 4
5.全表掃描
scanner規范:
TIMERANGE,
FILTER,
LIMIT,
STARTROW(start row),
STOPROW(stop row),
ROWPREFIXFILTER(row prefix filter,行前綴)
TIMESTAMP,
MAXLENGTH,
or COLUMNS,
CACHE,
or RAW,
VERSIONS
scan 'hbase:meta'
scan 'hbase:meta',{COLUMNS => 'info:regioninfo'}
scan 'ns1:t1',{COLUMNS=>['c1','c2'],LIMIT=>10,STARTROW=>'xyz'}
scan 't1',{COLUMNS=>'c1',TIMERANGE=>[1303668804,1303668904]}
scan 't1',{REVERSED=>true}
scan 't1',{
ROWPREFIXFILTER=>'row2',
FILTER=>"(QualifierFilter(>=,'binary:xyz')) AND (TimestampsFilter(123,456))"}
scan 't1',{FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,0)}
scan 't1',{CONSISTENCY=>'TIMELINE'}
設置操作屬性:
scan 't1',{COLUMNS => ['c1','c2'],ATTRIBUTES=>{'mykey'=>'myvalue'}}
scan 't1',{COLUMNS=>['c1','c2'],AUTHORIZATIONS=>['PRIVATE','SECRET']}
有個額外的選項:CACHE_BLOCKS,默認為true
還有個選項:RAW,返回所有cells(包括刪除的markers和uncollected deleted cells,不能用來選擇特定的columns,默認為default)
如:scan 't1',{RAW=>true,VERSIONS=>10}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
全表掃描一般不會用,數據量大的時候會死人的。。
6.刪除記錄
# 刪除id為temp的記錄的'info:age'字段
delete 'member','temp','info:age'# 刪除整行
deleteall 'member','temp'
- 1
- 2
- 3
- 4
- 5
7.查詢表中有多少行
count 'table_name',INTERVAL=>1000,CACHE => 1000or
有對表t1的引用t
t.count
INTERVAL: 每隔多少行顯示一次count,默認是1000
CACHE:每次去取的緩存區大小,默認是10,調整該參數可提高查詢速度
- 1
- 2
- 3
- 4
- 5
- 6
8.清空表
truncate 'table_name'
HBase是先將表disable,再drop the table,最后creating table。
- 1
- 2
5.scan查詢
1.限制條件
scan ‘qy’,{COLUMNS=>’name’}
scan ‘qy’,{COLUMNS=>’name:gender’}
scan ‘qy’,{COLUMNS=>[‘name’,’foo’]}
限制查找條數:
scan ‘qy’,{COLUMNS=>[‘name’,’foo’],LIMIT=>1}
scan ‘qy’,{COLUMNS=>[‘name’,’foo’],LIMIT=>2}
限制時間范圍:
scan ‘qy’,{TIMERANGE=>[1448045892646,1448045892647]}
2.filter 過濾部分
PrefixFilter:rowKey前綴過濾
scan ‘qy’,{FILTER=>”PrefixFilter(‘001’)”}
scan ‘qy’,{FILTER=>PrefixFilter(‘t’)}
QualifierFilter:列過濾器
QualifierFilter對列的名稱進行過濾,而不是列的值。
scan ‘qy’,{FILTER=>”PrefixFilter(‘t’) AND QualifierFilter(>=,’binary:b’)”}
TimestampsFilter:時間戳過濾器
scan ‘qy’,{FILTER=>”TimestampsFilter(1448069941270,1548069941230)” }
scan ‘qy’,{FILTER=>”(QualifierFilter(>=,’binary:b’)) AND (TimestampsFilter(1348069941270,1548069941270))” }
ColumnPaginationFilter
scan ‘qy’,{FILTER=>org.apache.hbase.filter.ColumnPaginationFilter.new(2,0)}
cannot load Java class org.apache.hbase.filter.ColumnPaginationFilter
hbase shell應用filter
1.導入需要的類
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
- 1
- 2
- 3
- 4
2.執行命令
scan 'tablename',STARTROW=>'start',COLUMNS=>['family:qualifier'],FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('family'),Bytes.toBytes('qualifier'))
- 1