Kotlin學習之面向物件
HBase簡介
一、Hadoop的侷限
HBase 是一個構建在 Hadoop 檔案系統之上的面向列的資料庫管理系統。
要想明白為什麼產生 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 兩個列。
圖片引用自 : HBase 是列式儲存資料庫嗎 https://www.iteblog.com/archives/2498.html
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 JPA
或 Mybatis
等常用的持久層框架來操作 HBase。
其次 Phoenix
的效能表現也非常優異,Phoenix
查詢引擎會將 SQL 查詢轉換為一個或多個 HBase Scan,通過並行執行來生成標準的 JDBC 結果集。它通過直接使用 HBase API 以及協處理器和自定義過濾器,可以為小型資料查詢提供毫秒級的效能,為千萬行資料的查詢提供秒級的效能。同時 Phoenix 還擁有二級索引等 HBase 不具備的特性,因為以上的優點,所以 Phoenix
成為了 HBase 最優秀的 SQL 中間層。