HBase Shell操做命令

HBase單機配置(官網):shell

HBase下載http://www.apache.org/dyn/closer.cgi/hbase/數據庫

解壓縮,而後進入到那個要解壓的目錄.apache

$ tar xfz hbase-××××.tar.gz
$ cd hbase-×××××

如今你已經能夠啓動HBase了。可是你可能須要先編輯 conf/hbase-site.xml 去配置hbase.rootdir,來選擇HBase將數據寫到哪一個目錄 .性能

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///DIRECTORY/hbase</value>
  </property>
</configuration>

將 DIRECTORY 替換成你指望寫文件的目錄. 默認 hbase.rootdir 是指向 /tmp/hbase-${user.name} ,也就說你會在重啓後丟失數據(重啓的時候操做系統會清理/tmp目錄)spa

 

1.建立表
同其它數據庫同樣,hbase也有表的概念。操作系統

hbase(main):001:0> create 'test','cf'
0 row(s) in 1.5210 seconds

=> Hbase::Table - test

這張表的表名叫作test , 有一個列族叫作cfcode

(注意shell中全部的名字都必須用引號引發來,和傳統數據庫不一樣的是,HBASE的表不用定義有哪些列(字段,Column),由於列是能夠動態增長和刪除的。但Hbase表須要定義列族(column family).每張表有一個或者多個列族,每一個列必須且僅屬於一個列族。列族主要用來存儲上對相關的列分組,從而使得減小對無關列的訪問來提升性能。)xml


下面看看這張表是什麼(describe命令)ci

hbase(main):003:0> describe 'test'
Table test is ENABLED                                                           
test                                                                            
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'cf', 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.1610 seconds

能夠看到HBase給這張表設置了不少默認的屬性。字符串

  1. Version:缺省值是3,即默認保存了三個歷史版本。就是說,若是一個值被覆蓋了,和傳統數據庫不一樣,HBase不只保存了新值,最近的2個值也都相同。
  2. TTL:生存期,一個數據在HBase中被保存的時限。意思是,若是你設置TTL是倆天的話,那麼倆天后這個數據會被HBase自動的清楚。若是你但願永久的保存,那把TTL設置到作大就好。

2.插入數據

往表test裏插入一些數據:

hbase(main):004:0> put 'test','row1','cf:a','value1'
0 row(s) in 0.1330 seconds

hbase(main):005:0> put 'test','row2','cf:b','value2'
0 row(s) in 0.0150 seconds

hbase(main):006:0> put 'test','row3','cf:c','value3'
0 row(s) in 0.0130 seconds

hbase(main):007:0> put 'test','row1','cf:c','value4'
0 row(s) in 0.0100 seconds

hbase(main):008:0> put 'test','row1','cf:c','value4'
0 row(s) in 0.0100 seconds

hbase(main):009:0> put 'test','row1','cf:c','value4'
0 row(s) in 0.0100 seconds

上面的命令往表test裏放了3行數據。命令put就是往表中插入或者更新一條數據。HBase表中的每一行數據都由一個行主鍵來標識,因此咱們用row1,row2這樣的字符串來標識相應的行。每一行由「列族:列名」這樣的組合來標識,因此cf:a就是在列族cf中名爲a的列。命令的最後一個參數是該列的值。

3.讀出數據

下面讀出全部數據

hbase(main):010:0> scan 'test'
ROW                   COLUMN+CELL                                               
 row1                 column=cf:a, timestamp=1499600631906, value=value1        
 row1                 column=cf:c, timestamp=1499600731612, value=value4        
 row2                 column=cf:b, timestamp=1499600686798, value=value2        
 row3                 column=cf:c, timestamp=1499600707212, value=value3        
3 row(s) in 0.0480 seconds

能夠看到一共有四條數據

每條數據都有一個時間戳,這是HBase寫入時記錄的系統時間。

用表格描述這張表

row key column family: cf
a b c
row1 value1   value4
row2   value2  
row3     value3

 

空的表格並不表明這裏有這個單元格存在。在傳統數據庫中,空白單元表示該單元存在但其值爲空(傳統數據庫老是結構化的)。但這裏畫成二維表只是便於理解,其本質上徹底是非結構化的。

例如:咱們使用get來獲取特定一行的數據:

hbase(main):019:0> get 'test','row2'
COLUMN                CELL                                                      
 cf:b                 timestamp=1499600686798, value=value2                     
1 row(s) in 0.0400 seconds

4.更新數據

更新test一個單元(將row1的cf:a列更新值爲value5):

hbase(main):020:0> put 'test' , 'row1' ,'cf:a' , 'value5'
0 row(s) in 0.0210 seconds

結果:

hbase(main):021:0> scan 'test'
ROW                   COLUMN+CELL                                               
 row1                 column=cf:a, timestamp=1499602903513, value=value5        
 row1                 column=cf:c, timestamp=1499601334793, value=value5        
 row2                 column=cf:b, timestamp=1499600686798, value=value2        
 row3                 column=cf:c, timestamp=1499600707212, value=value3        
3 row(s) in 0.0350 seconds

5.刪除數據

用如下命令刪除這張表:

hbase(main):022:0> disable 'test'
0 row(s) in 2.2800 seconds

hbase(main):023:0> drop 'test'
0 row(s) in 1.2600 seconds

HBase中刪除表必須先把表下線(disable) ,  而後才能把表刪除掉。

運行如下命令退出Shell:

hbase(main):024:0> exit
相關文章
相關標籤/搜索