HBase 系列(一)—— HBase 簡介

1、Hadoop的侷限

HBase 是一個構建在 Hadoop 文件系統之上的面向列的數據庫管理系統。html

要想明白爲何產生 HBase,就須要先了解一下 Hadoop 存在的限制?Hadoop 能夠經過 HDFS 來存儲結構化、半結構甚至非結構化的數據,它是傳統數據庫的補充,是海量數據存儲的最佳方法,它針對大文件的存儲,批量訪問和流式訪問都作了優化,同時也經過多副本解決了容災問題。git

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

注:數據結構分類:sql

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

2、HBase簡介

HBase 是一個構建在 Hadoop 文件系統之上的面向列的數據庫管理系統。數據庫

HBase 是一種相似於 Google’s Big Table 的數據模型,它是 Hadoop 生態系統的一部分,它將數據存儲在 HDFS 上,客戶端能夠經過 HBase 實現對 HDFS 上數據的隨機訪問。它具備如下特性:數組

  • 不支持複雜的事務,只支持行級事務,即單行數據的讀寫都是原子性的;
  • 因爲是採用 HDFS 做爲底層存儲,因此和 HDFS 同樣,支持結構化、半結構化和非結構化的存儲;
  • 支持經過增長機器進行橫向擴展;
  • 支持數據分片;
  • 支持 RegionServers 之間的自動故障轉移;
  • 易於使用的 Java 客戶端 API;
  • 支持 BlockCache 和布隆過濾器;
  • 過濾器支持謂詞下推。

3、HBase Table

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

下圖爲 HBase 中一張表的:框架

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

圖片引用自 : HBase 是列式存儲數據庫嗎 https://www.iteblog.com/archives/2498.htmloop

Hbase 的表具備如下特色:性能

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

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

  • 稀疏性:空 (null) 列並不佔用存儲空間,表能夠設計的很是稀疏 ;

  • 數據多版本:每一個單元中的數據能夠有多個版本,按照時間戳排序,新的數據在最上面;

  • 存儲類型:全部數據的底層存儲格式都是字節數組 (byte[])。

4、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 開源項目大數據入門指南

相關文章
相關標籤/搜索