HBase 介紹

|
Hadoop 除了擁有分散式的運算平台之外,底層還有一個適合循序式、批次存取的檔案系統(HDFS),當然大家就不會就此滿足。既然 Google 用自家的分散式檔案系統做了一個用來存放結構化資料的 BigTable,為甚麼不也用 Hadoop 的 HDFS 做一個出來呢?

於是,兩年前在兩位 Powerset 工程師(Jim Kellerman 跟 Michael Stack)的號召下,在 Hadoop 的 contrib 計畫中多出了 HBase 這個跟 BigTable 採用類似設計的分散式結構化資料的儲存系統。

簡單的說,HBaseBigTable 一樣,有別於一般資料庫系統用的 row-oriented 儲存方式,這兩個系統都是 column-oriented 的儲存方式。Column-oriented 的好處是每一筆資料可以存放不固定欄位的東西,不像 row-oriented 的存法,增加一個新的欄位需要多花些力氣才能達成。與 BigTable 相同的是 HBase 底層也是使用了分散式的檔案系統 (Hadoop 的 HDFS),並且也將一個資料表拆成很多份,由不同的伺服器負責該部份的存取,藉此達到高效能。

在寫入資料的時候,HBaseBigTable 一樣,都是先寫到記憶體中的 MemCache,並且有 Write-Ahead Log 以防意外發生時可以做復原的動作。每隔一段時間,或者 MemCache 累積到一定程度,HBase 就會把資料寫入檔案系統中。因此,HBase 可以提供相當高速的寫入。讀取的時候,也是先去找 MemCache 後再去找檔案系統,而藉由將一個大大的表拆成很多份的技巧,也提昇了讀取的速度。

HBase 本身跟 Hadoop 一樣用 Java 撰寫,但透過 Thrift 的支援(Thrift 是一套由 Facebook 所開發,提供跨語言做資料交換的平台),你可以用任何 Thrift 有支援的語言,像是PHP/Perl/Ruby/Python 等來存取 HBase
在系統架構上,HBase 分成 master 與 regionserver 兩部份,基本上,master 會告訴 client 某個表的某個部份要去哪台 regionserver 找才有,而 regionserver 就是實際上提供資料的程式。目前為止,master 只有一台,當他掛了之後,整個 HBase 就會陣亡(這跟 BigTable 不同,BigTable 會有自動的備援機制)。目前 HBase 的開發者已經在計畫提供自動切換到備援 master 的機制,預計會在下下版推出(0.20.0)。

目前 HBase 已經是 Hadoop 底下獨立的次計畫之一,共有五位開發者。最新版本是 0.18.1 需要搭配 Hadoop 0.18 一起使用,等 Hadoop 0.19 推出後,會跟著推出 HBase 0.19.0 (應該快了,目前 Hadoop 0.19.0 已經在 RC1 了)。

有興趣的可以參考 HBase 的官方網站:http://hadoop.apache.org/hbase/。另外有篇由 Jim R. Wilson 寫的簡單介紹,也可以參考看看。