(HBase是一種數據庫:Hadoop數據庫,它是一種NoSQL存儲系統,專門設計用來快速隨機讀寫大規模數據。在已成功安裝並正常啟動的前提下,本文介紹HBase的基本操作。)
一、HBase簡介
什麼是HBase(Hadoop Database)呢?有以下兩種常見的說法:
第一,它是一種稀疏的、分布式的、持久化的、多維有序映射,它基於行鍵(row key)、列鍵(column key)和時間戳(timestamp)建立索引。
第二,它是一種鍵值(key value)存儲,面向列族的數據庫,有時也是一種存儲多時間戳版本映射的數據庫。
以上兩種描述都是對的。但從根本上來說,HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,是一個可以隨機訪問的存儲和檢索數據的平台。大家可以按照需要寫入數據,然後再按照需要讀取數據。
HBase有如下特點:
第一,它不介意數據類型,允許動態的、靈活的數據模型,並不限制存儲的數據的種類。因此,它可以自如地存儲結構化和半結構化的數據。
第二,它不用SQL語言,也不強調數據之間的關系。
第三,它不允許跨行的事務,可以在一行的某一列存儲一個整數,而在另一行的同一列存儲字符串。
第四,它被設計成在一個服務器集群上運行,而不是單台服務器。這意味著一種強大的、可擴展的數據的使用方式。
從HBase的特點可以看出,HBase的設計與目標都與傳統的關系型數據庫不同。
二、HBase的基本操作
在已成功安裝並正常啟動HBase的前提下,我們可以使用HBase Shell,通過命令行方式與HBase進行交互。
1.啟動HBase Shell
轉到HBase解壓包的“bin”目錄下,使用命令“./hbase shell”或“sh hbase shell”命令即可啟動HBase Shell。啟動之後的信息如下:
HBase Shell; enter 'help' for list of supported commands.
Type "exit" to leave the HBase Shell
Version 1.0.1, r66a93c09df3b12ff7b86c39bc8475c60e15af82d, Fri Apr 17 22:14:06 PDT 2015
hbase(main):001:0>
為了驗證HBase是否安裝成功,我們可以輸入“list”查看HBase中所有的表。該命令的執行情況如下:
hbase(main):001:0> list
TABLE
0 row(s) in 0.2390 seconds
=> []
由於是首次登錄,因此HBase中包含了0個表。
2.創建表
HBase使用表作為頂級結構來存儲數據,寫數據到HBase,也就是寫數據到表。下面創建一個有一個列族(“cf”)的表“mytable”:
hbase(main):002:0> create 'mytable', 'cf'
0 row(s) in 0.3250 seconds
=> Hbase::Table - mytable
hbase(main):003:0> list
TABLE
mytable
1 row(s) in 0.0090 seconds
=> ["mytable"]
使用“list”命令,我們可以看到,表創建成功。
3.寫數據
表創建好之後,就需要寫入一些數據。例如,我們想往表裡寫入“hello hbase”,那麼我們就在“mytable”表的“first”行中的“cf:info”列對應的數據單元中插入“hello hbase”。命令執行如下:
hbase(main):004:0> put 'mytable', 'first', 'cf:info', 'hello hbase'
0 row(s) in 0.0970 seconds
我們還可以繼續多增加幾個值,如下:
hbase(main):005:0> put 'mytable', 'second', 'cf:name', 'zhou'
0 row(s) in 0.0180 seconds
hbase(main):006:0> put 'mytable', 'third', 'cf:nation', 'China'
0 row(s) in 0.0080 seconds
現在表裡面有3行和3個數據單元。在使用列的時候,大家並沒有提前定義這些列,也沒有定義往每個列中存儲的數據類型。因此,HBase是一種無模式的數據庫。
4.讀數據
HBase有兩種方式讀取數據:get和scan。get方式可以讀取一行的數據信息,scan方式可以讀取表中所有行的數據信息。
get命令執行如下:
hbase(main):008:0> get 'mytable', 'first'
COLUMN CELL
cf:info timestamp=1435548279711, value=hello hbase
1 row(s) in 0.0770 seconds
該命令輸出了該行所有的數據單元。
scan命令執行如下:
hbase(main):009:0> scan 'mytable'
ROW COLUMN+CELL
first column=cf:info, timestamp=1435548279711, value=hello hbase
second column=cf:name, timestamp=1435548751549, value=zhou
third column=cf:nation, timestamp=1435548760826, value=China
3 row(s) in 0.0320 seconds
該命令返回了所有數據。HBase返回行的順序,是按照行的名字排序的。HBase稱之為行鍵(rowkey)。
5.刪除表
要想刪除一張表,需要先將其“disable”掉,然後再“drop”掉。命令執行如下:
hbase(main):010:0> disable 'mytable'
0 row(s) in 1.2380 seconds
hbase(main):011:0> drop 'mytable'
0 row(s) in 0.1770 seconds
hbase(main):012:0> list
TABLE
0 row(s) in 0.0070 seconds
=> []
HBase還有很多技巧,但是其他所有的東西都是建立在上面那些基本操作基礎之上的。大家一定要好好體會。