1. 程式人生 > 程式設計 >HBase 系列(一)—— HBase 簡介

HBase 系列(一)—— HBase 簡介

一、Hadoop的侷限

HBase 是一個構建在 Hadoop 檔案系統之上的面向列的資料庫管理系統。

https://github.com/heibaiying

要想明白為什麼產生 HBase,就需要先了解一下 Hadoop 存在的限制?Hadoop 可以通過 HDFS 來儲存結構化、半結構甚至非結構化的資料,它是傳統資料庫的補充,是海量資料儲存的最佳方法,它針對大檔案的儲存,批量訪問和流式訪問都做了優化,同時也通過多副本解決了容災問題。

但是 Hadoop 的缺陷在於它只能執行批處理,並且只能以順序方式訪問資料,這意味著即使是最簡單的工作,也必須搜尋整個資料集,無法實現對資料的隨機訪問。實現資料的隨機訪問是傳統的關係型資料庫所擅長的,但它們卻不能用於海量資料的儲存。在這種情況下,必須有一種新的方案來解決海量資料儲存和隨機訪問的問題,HBase 就是其中之一 (HBase,Cassandra,couchDB,Dynamo 和 MongoDB 都能儲存海量資料並支援隨機訪問)。

注:資料結構分類:

  • 結構化資料:即以關係型資料庫表形式管理的資料;
  • 半結構化資料:非關係模型的,有基本固定結構模式的資料,例如日誌檔案、XML 檔案、JSON 檔案、Email 等;
  • 非結構化資料:沒有固定模式的資料,如 WORD、PDF、PPT、EXL,各種格式的圖片、視訊等。

二、HBase簡介

HBase 是一個構建在 Hadoop 檔案系統之上的面向列的資料庫管理系統。

HBase 是一種類似於 Google’s Big Table 的資料模型,它是 Hadoop 生態系統的一部分,它將資料儲存在 HDFS 上,客戶端可以通過 HBase 實現對 HDFS 上資料的隨機訪問。它具有以下特性:

  • 不支援複雜的事務,只支援行級事務,即單行資料的讀寫都是原子性的;
  • 由於是採用 HDFS 作為底層儲存,所以和 HDFS 一樣,支援結構化、半結構化和非結構化的儲存;
  • 支援通過增加機器進行橫向擴充套件;
  • 支援資料分片;
  • 支援 RegionServers 之間的自動故障轉移;
  • 易於使用的 Java 客戶端 API;
  • 支援 BlockCache 和布隆過濾器;
  • 過濾器支援謂詞下推。

三、HBase Table

HBase 是一個面向 的資料庫管理系統,這裡更為確切的而說,HBase 是一個面向 列族 的資料庫管理系統。表 schema 僅定義列族,表具有多個列族,每個列族可以包含任意數量的列,列由多個單元格(cell )組成,單元格可以儲存多個版本的資料,多個版本資料以時間戳進行區分。

下圖為 HBase 中一張表的:

  • RowKey 為行的唯一標識,所有行按照 RowKey 的字典序進行排序;
  • 該表具有兩個列族,分別是 personal 和 office;
  • 其中列族 personal 擁有 name、city、phone 三個列,列族 office 擁有 tel、addres 兩個列。

https://github.com/heibaiying

圖片引用自 : HBase 是列式儲存資料庫嗎 www.iteblog.com/archives/24…

Hbase 的表具有以下特點:

  • 容量大:一個表可以有數十億行,上百萬列;

  • 面向列:資料是按照列儲存,每一列都單獨存放,資料即索引,在查詢時可以只訪問指定列的資料,有效地降低了系統的 I/O 負擔;

  • 稀疏性:空 (null) 列並不佔用儲存空間,表可以設計的非常稀疏 ;

  • 資料多版本:每個單元中的資料可以有多個版本,按照時間戳排序,新的資料在最上面;

  • 儲存型別:所有資料的底層儲存格式都是位元組陣列 (byte[])。

四、Phoenix

Phoenix 是 HBase 的開源 SQL 中間層,它允許你使用標準 JDBC 的方式來操作 HBase 上的資料。在 Phoenix 之前,如果你要訪問 HBase,只能呼叫它的 Java API,但相比於使用一行 SQL 就能實現資料查詢,HBase 的 API 還是過於複雜。Phoenix 的理念是 we put sql SQL back in NOSQL,即你可以使用標準的 SQL 就能完成對 HBase 上資料的操作。同時這也意味著你可以通過整合 Spring Data JPAMybatis 等常用的持久層框架來操作 HBase。

其次 Phoenix 的效能表現也非常優異,Phoenix 查詢引擎會將 SQL 查詢轉換為一個或多個 HBase Scan,通過並行執行來生成標準的 JDBC 結果集。它通過直接使用 HBase API 以及協處理器和自定義過濾器,可以為小型資料查詢提供毫秒級的效能,為千萬行資料的查詢提供秒級的效能。同時 Phoenix 還擁有二級索引等 HBase 不具備的特性,因為以上的優點,所以 Phoenix 成為了 HBase 最優秀的 SQL 中間層。

參考資料

  1. HBase - Overview

更多大資料系列文章可以參見 GitHub 開源專案大資料入門指南