'HBase的體系結構和在大數據生態圈中的位置'

"
"
HBase的體系結構和在大數據生態圈中的位置

HBase的體系結構

HBase是一個開源的非關係型分佈式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現的編程語言為 Java。它是Apache軟件基金會的Hadoop項目的一部分,運行於HDFS文件系統之上,為 Hadoop 提供類似於BigTable 規模的服務。因此,它可以容錯地存儲海量稀疏的數據。

HBase在列上實現了BigTable論文提到的壓縮算法、內存操作和布隆過濾器。HBase的表能夠作為MapReduce任務的輸入和輸出,可以通過Java API來訪問數據,也可以通過REST、Avro或者Thrift的API來訪問。

雖然最近性能有了顯著的提升,HBase 還不能直接取代SQL數據庫。如今,它已經應用於多個數據驅動型網站,包括 Facebook的消息平臺。

在 Eric Brewer的CAP理論中,HBase屬於CP類型的系統。

HBase大數據生態圈中的位置

提到大數據的存儲,大多數人首先聯想到的是 Hadoop 和 Hadoop 中的 HDFS 模塊。大家熟知的 Spark、以及 Hadoop 的 MapReduce,可以理解為一種計算框架。而 HDFS,我們可以認為是為計算框架服務的存儲層。因此不管是 Spark 還是 MapReduce,都需要使用 HDFS 作為默認的持久化存儲層。那麼 HBase 又是什麼,可以用在哪裡,解決什麼樣的問題?簡單地,我們可以認為 HBase 是一種類似於數據庫的存儲層,也就是說 HBase 適用於結構化的存儲。並且 HBase 是一種列式的分佈式數據庫,是由當年的 Google 公佈的 BigTable 的論文而生。不過這裡也要注意 HBase 底層依舊依賴 HDFS 來作為其物理存儲,這點類似於 Hive。

可能有的讀者會好奇 HBase 於 Hive 的區別,我們簡單的梳理一下 Hive 和 HBase 的應用場景:

Hive 適合用來對一段時間內的數據進行分析查詢,例如,用來計算趨勢或者網站的日誌。Hive 不應該用來進行實時的查詢(Hive 的設計目的,也不是支持實時的查詢)。因為它需要很長時間才可以返回結果;HBase 則非常適合用來進行大數據的實時查詢,例如 Facebook 用 HBase 進行消息和實時的分析。對於 Hive 和 HBase 的部署來說,也有一些區別,Hive 一般只要有 Hadoop 便可以工作。而 HBase 則還需要 Zookeeper 的幫助(Zookeeper,是一個用來進行分佈式協調的服務,這些服務包括配置服務,維護元信息和命名空間服務)。再而,HBase 本身只提供了 Java 的 API 接口,並不直接支持 SQL 的語句查詢,而 Hive 則可以直接使用 HQL(一種類 SQL 語言)。如果想要在 HBase 上使用 SQL,則需要聯合使用 Apache Phonenix,或者聯合使用 Hive 和 HBase。但是和上面提到的一樣,如果集成使用 Hive 查詢 HBase 的數據,則無法繞過 MapReduce,那麼實時性還是有一定的損失。Phoenix 加 HBase 的組合則不經過 MapReduce 的框架,因此當使用 Phoneix 加 HBase 的組成,實時性上會優於 Hive 加 HBase 的組合,我們後續也會示例性介紹如何使用兩者。最後我們再提下 Hive 和 HBase 所使用的存儲層,默認情況下 Hive 和 HBase 的存儲層都是 HDFS。但是 HBase 在一些特殊的情況下也可以直接使用本機的文件系統。例如 Ambari 中的 AMS 服務直接在本地文件系統上運行 HBase。

"

相關推薦

推薦中...