hbase的簡單應用

#每次運行hbase shell之前一定要到進入/usr/local/Cellar/hbase/1.3.5/bin 目錄下,運行./start-hbase.sh,進行啓動。
在終端hbase shell
#新建表

hbase(main):049:0> create 't1',’f1'
0 row(s) in 1.2610 seconds
=> Hbase::Table - t1

#查看錶結構

hbase(main):050:0> desc 't1'
Table t1 is ENABLED                                                             
t1                                                                              
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}                 
1 row(s) in 0.0130 seconds

#修改f1的的VERSIONS的值爲3,VERSIONS爲1,也就是說,默認情況只會存取一個版本的列數據,當再次插入的時候,後面的值會覆蓋前面的值。

hbase(main):051:0> alter 't1',{'NAME'=>'f1',VERSIONS=>3}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9170 seconds

4.查看t1結構

hbase(main):053:0> desc 't1'
Table t1 is ENABLED                                                             
t1                                                                              
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}                                                   
1 row(s) in 0.0220 seconds

#插入三條數據

hbase(main):054:0> put 't1','rowkey1','f1:name','haha'
0 row(s) in 0.0230 seconds
hbase(main):055:0> put 't1','rowkey1','f1:name','xy234'
0 row(s) in 0.0040 seconds
hbase(main):056:0> put 't1','rowkey1','f1:name','qiudk'
0 row(s) in 0.0030 seconds

#查看數據

hbase(main):057:0> get 't1','rowkey1','f1:name'
COLUMN                CELL                                                      
 f1:name              timestamp=1581320608297, value=qiudk                      
1 row(s) in 0.0030 seconds

#查看三個版本的數據

hbase(main):058:0> get 't1','rowkey1',{COLUMN=>'f1:name',VERSIONS=>3}
COLUMN                CELL                                                      
 f1:name              timestamp=1581320608297, value=qiudk                      
 f1:name              timestamp=1581320602481, value=xy234                      
 f1:name              timestamp=1581320595161, value=haha                       
1 row(s) in 0.0050 seconds

#只查看最新的兩個版本

hbase(main):059:0> get 't1','rowkey1',{COLUMN=>'f1:name',VERSIONS=>2}
COLUMN                CELL                                                      
 f1:name              timestamp=1581320608297, value=qiudk                      
 f1:name              timestamp=1581320602481, value=xy234                      
1 row(s) in 0.0060 seconds

#列出所有的表

hbase(main):060:0> list
TABLE                                                                           
linkshare                                                                       
student                                                                         
t1                                                                              
3 row(s) in 0.0170 seconds
=> ["linkshare", "student", "t1"]

#新建user表,包含info,data兩個列族

hbase(main):061:0> create 'user','info','data'
0 row(s) in 2.2990 seconds
=> Hbase::Table - user

#描述表信息

hbase(main):063:0> desc 'user'
Table user is ENABLED                                                           
user                                                                            
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}                                                 
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}                                                 
2 row(s) in 0.0270 seconds

#修改列族版本

hbase(main):064:0> alter 'user',{NAME=>'info',VERSIONS=>3}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.4320 seconds

#重新查看錶信息

hbase(main):065:0> desc 'user'
Table user is ENABLED                                                           
user                                                                            
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}                                                 
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}                                                 
2 row(s) in 0.0140 seconds

#添加信息

hbase(main):067:0> put 'user' ,'rk0001','info:name’,’huahua'
0 row(s) in 0.0110 seconds
hbase(main):068:0> put 'user' ,'rk0001','info:gender','female'
0 row(s) in 0.0040 seconds
hbase(main):069:0> put 'user' ,'rk0001','data:pic','pucture'
0 row(s) in 0.0040 seconds

#獲取鍵’rk0001’的信息

hbase(main):073:0> get 'user','rk0001'
COLUMN                CELL                                                      
 data:pic             timestamp=1581323814574, value=pucture                    
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0160 seconds

#獲取鍵’rk0001’中info的信息

hbase(main):074:0> get 'user','rk0001','info'
COLUMN                CELL                                                      
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0030 seconds

#獲取鍵’rk0001’中info:name的信息

hbase(main):075:0> get 'user','rk0001','info:name'
COLUMN                CELL                                                      
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0020 seconds

#增加一個rk0002

hbase(main):076:0> put 'user' ,'rk0002','info:name','liwu'
0 row(s) in 0.0030 seconds
hbase(main):077:0> put 'user' ,'rk0002','info:gender','man'
0 row(s) in 0.0030 seconds

#獲取rk0001中info和data的信息

hbase(main):078:0> get 'user','rk0001','info','data'
COLUMN                CELL                                                      
 data:pic             timestamp=1581323814574, value=pucture                    
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0050 seconds

#和上面那個是等價的吧

hbase(main):079:0> get 'user','rk0001',{COLUMN=>['info','data']}
COLUMN                CELL                                                      
 data:pic             timestamp=1581323814574, value=pucture                    
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0150 seconds
hbase(main):080:0> get 'user','rk0001',{COLUMN=>['info:name','data:pic']}
COLUMN                CELL                                                      
 data:pic             timestamp=1581323814574, value=pucture                    
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0080 seconds
hbase(main):081:0> get 'user','rk0002',{COLUMN=>['info:name','data:pic']}
COLUMN                CELL                                                      
 info:name            timestamp=1581323970369, value=liwu                       
1 row(s) in 0.0030 seconds

#因爲只有一個,故只顯示一個

hbase(main):083:0> get 'user','rk0001',{COLUMN=>'info',VERSIONS=>2}
COLUMN                CELL                                                      
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0130 seconds

#添加一個更改gender

hbase(main):084:0> put 'user' ,'rk0001','info:gender','man'
0 row(s) in 0.0040 seconds

#可以看到gender的兩個版本

hbase(main):085:0> get 'user','rk0001',{COLUMN=>'info',VERSIONS=>2}
COLUMN                CELL                                                      
 info:gender          timestamp=1581324240884, value=man                        
 info:gender          timestamp=1581323795685, value=female                     
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0160 seconds

#使用過濾器來進行查詢,查詢value的值爲‘huahua’數據,即cell中value的值

hbase(main):095:0> get 'user','rk0001',{FILTER=>"(ValueFilter(=,'binary:huahua'))"}
COLUMN                CELL                                                      
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0040 seconds

#查看user表中列標示符中含有a的信息

hbase(main):101:0> get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
COLUMN                CELL                                                      
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0310 seconds

#查看user表中列標示中含有n的信息:即COLUMN中含有字母n的

hbase(main):104:0> get 'user','rk0001',{FILTER=>"(QualifierFilter(=,'substring:n'))"}
COLUMN                CELL                                                      
 info:gender          timestamp=1581324240884, value=man                        
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0080 seconds

#查看全表信息

hbase(main):103:0> scan 'user'
ROW                   COLUMN+CELL                                               
 rk0001               column=data:pic, timestamp=1581323814574, value=pucture   
 rk0001               column=info:gender, timestamp=1581324240884, value=man    
 rk0001               column=info:name, timestamp=1581323779460, value=huahua
 rk0002               column=info:gender, timestamp=1581323995580, value=man    
 rk0002               column=info:name, timestamp=1581323970369, value=liwu     
2 row(s) in 0.0080 seconds

此時就好奇了,scan和get的區別到底是啥?
hbase的查詢實現提供兩種方式:
get方法: 按指定rowkey獲取唯一一條記錄
scan方法:按指定條件獲取一批記錄

hbase(main):105:0> scan 'user',{COLUMNS=>'info'}
ROW                   COLUMN+CELL                                               
 rk0001               column=info:gender, timestamp=1581324240884, value=man    
 rk0001               column=info:name, timestamp=1581323779460, value=huahua
 rk0002               column=info:gender, timestamp=1581323995580, value=man    
 rk0002               column=info:name, timestamp=1581323970369, value=liwu     
2 row(s) in 0.0190 seconds

#用get試試呢?竟然爲空~

hbase(main):106:0> get 'user',{COLUMNS=>'info'}
COLUMN                CELL                                                      
0 row(s) in 0.0020 seconds

#需要加個鍵名(貌似理解了get和scan的區別,get必須指定rowkey,而scan的話,就無須)

hbase(main):109:0> get 'user','rk0001',{COLUMNS=>'info'}
COLUMN                CELL                                                      
 info:gender          timestamp=1581324240884, value=man                        
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0030 seconds
hbase(main):110:0> get 'user','rk0001','info'
COLUMN                CELL                                                      
 info:gender          timestamp=1581324240884, value=man                        
 info:name            timestamp=1581323779460, value=huahua                   
1 row(s) in 0.0030 seconds

#查詢user表中指定範圍的數據

hbase(main):118:0> scan 'user',{TIMERANGE=>[1581323970369,1581324240884]}
ROW                   COLUMN+CELL                                               
 rk0002               column=info:gender, timestamp=1581323995580, value=man    
 rk0002               column=info:name, timestamp=1581323970369, value=liwu     
1 row(s) in 0.0080 seconds

#查詢user表中row key以rk字符開頭的

hbase(main):119:0> scan 'user',{FILTER=>"PrefixFilter('rk')"}
ROW                   COLUMN+CELL                                               
 rk0001               column=data:pic, timestamp=1581323814574, value=pucture   
 rk0001               column=info:gender, timestamp=1581324240884, value=man    
 rk0001               column=info:name, timestamp=1581323779460, value=huahua
 rk0002               column=info:gender, timestamp=1581323995580, value=man    
 rk0002               column=info:name, timestamp=1581323970369, value=liwu     
2 row(s) in 0.0200 seconds

#查詢user表中列族爲info和data且列標示符中含有a字符的信息

hbase(main):120:0> scan 'user',{COLUMNS=>['info','data'],FILTER=>"(QualifierFilter(=,'substring:a'))"}
ROW                   COLUMN+CELL                                               
 rk0001               column=info:name, timestamp=1581323779460, value=huahua
 rk0002               column=info:name, timestamp=1581323970369, value=liwu     
2 row(s) in 0.0280 seconds

#刪除數據

hbase(main):121:0> delete 'user','rk0001','info:name'
0 row(s) in 0.0270 seconds
hbase(main):122:0> scan 'user'
ROW                   COLUMN+CELL                                               
 rk0001               column=data:pic, timestamp=1581323814574, value=pucture   
 rk0001               column=info:gender, timestamp=1581324240884, value=man    
 rk0002               column=info:gender, timestamp=1581323995580, value=man    
 rk0002               column=info:name, timestamp=1581323970369, value=liwu  

細水長流~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章