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給這張表設置了不少默認的屬性。字符串
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