HBase基本原理

HBase以表的形式存儲數據。與關係型數據庫一樣,在HBase中,表由行和列組成。與關係型數據庫不同的是,HBase還有“列簇”(column family)的概念。一個表有若干“列簇”組成,每一個“列簇”包含若干列(column)。與此同時,表中的每一個cell都是有時間戳的。因此我們可以把其想象成一個三維數據庫。除了行和列之外,還有一個時間維度,每一個單元格(cell)的不同版本都被保存。

與關係型數據庫類似,在HBase中每一行都有一個主鍵(row key)HBase對於數據的檢索都是通過row key進行的。HBase對於數據的檢索主要有三種方式:

1. 通過單個row key檢索一行

2. 通過row key的範圍[row key startrow key end]返回多條記錄

3. 全表掃描,返回整個table

HBase中,所有的行都按照row key進行排序。在物理上,每一個table都會按照行劃分成一個或者多個HRegionHRegion包含了table的一部分,即若干行。HRegion 按大小分割的,每個表一開始只有一個 HRegion,隨着數據不斷插入表, HRegion 不斷增大, 當增大到一個閥值的時候, HRegion 就會等分會兩個新的 HRegion。當 table 中的行不斷增多,就會有越來越多的HRegionHRegion 是 Hbase 中分佈式存儲和負載均衡的最小單元。最小單元就表示不同的 HRegion 可以分佈在不同的 HRegion server 上。但一個 HRegion 是不會拆分到多個server上的。

HRegion 雖然是分佈式存儲的最小單元,但並不是存儲的最小單元。事實上,HRegion 由一個或者多個 Store 組成,每個 store 保存一個 columns family。每個 Strore 又由一個 memStore 0至多個 StoreFile 組成。 StoreFile 以 HFile 格式保存在 HDFS 上。除了HFile之外,HRegion server還生成另外一個文件——HLog(WAL log),該文件是一個日誌文件。WAL 意 爲 Write ahead log,類似 於mysql中的 binlog,用來做災難恢復使用。HLog 記錄數據的所有變更。n(來自不同 table)的日誌會混在一起。這樣做的目的是不斷追加單個文件相對於每個 HRegion Server 維護一個 Hlog,而不是每個HRegion 一個。這樣不同Regio同時寫多個文件而言,可以減少磁盤尋址次數,因此可以提高對 table 的寫性能。帶來的麻煩是,如果一臺 region server 下線, 爲了恢復其上的 region,需要將 region server 上的 log 進行拆分,然後分發到其它 region server 上進行恢復。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章