BigTable的開源實現 HBase

2021-09-25 17:34:26 字數 1952 閱讀 1505

在計算機資料儲存領域,一直是關係型資料庫(rdbms)的天下,以至於在傳統企業的應用領域,許多應用系統設計都是面向資料庫設計,也就是先設計資料庫後設計程式,從而導致關係模型繫結物件模型

為了解決關係型資料庫無法處理海量資料的不足,於是就有了nosql的概念。

nosql,主要指非關係的,分布式的,支援海量資料儲存的資料庫設計模式。而今天要說的,也就是hbase。

簡單來說,hbase就是專門用來儲存海量資料的。下面來說說hbase的可伸縮架構。

hreigion是hbase負責資料儲存的主要單元,應用程式對資料的讀寫操作都是通過和hregion通訊完成,也就是說,如果乙個資料想要儲存,就得先找到hregion然後將讀寫進行提交,完成儲存。

hregionserver是物理伺服器,每個hregionserver上有多個hregion。當乙個hregion裡面放的資料達到了閾值,就會**成兩個hregion,並且在集群中進行 遷移,滿足付贊均衡。

每個hregion中儲存一段key值區間為(key1,key2)的資料,並且所有這些資訊,hregionserver配置,位址等等的資訊都儲存在hmaster總伺服器上。並且通過zookeeper進行負載均衡,啟動多個hmaster,只不過選出來乙個當老大。

獲得資料的流程

應用程式,通過zookeeper獲得主hmaster的位址,輸入key值,找到對應的key所在的hregionserver的位址,然後請求上面的hregion獲取資料。

資料寫入過程也是一樣,需要先得到hregion才能繼續操作。hregion會把資料儲存在若干個hfile格式的檔案裡,這些檔案使用hdfs進行儲存,並且在整個集群內高可用。

總結

hbase的核心目標是解決海量資料的分布式儲存,和memcached這類分布式快取的路由演算法不同,hbase的做法是按照key的區域進行分片,所謂的分片,也就是hregion。應用程式通過hmaster查詢分片,得到hregion所在的伺服器hregionserver,然後和該伺服器通訊,就得到了資料。

傳統的sql為了保證關係運算,所以必須提前設計好資料庫裡的結構,也就是ddl執行的那些,而hbase做到了可擴充套件資料結構,也就是不修改表結構也能新增字段,hbase採用列族(columnfamily)進行設計。

這是乙個學生資訊的基本資訊表,表中不同學生的資訊都不相同,選修的課程也不同,而且還有很多沒下分數的課會填充進來,如果按照傳統資料庫設計,就很難受了。

而hbase在設計表的時候,只需要指定列族即可,欄位只需要寫入的時候再說,這樣就達到了隨意可擴充套件的資料結構了。

從本質上來說,hbase這種資料結構的設計,實際上就是把字段的名稱和字段的值,以key-value的形式儲存在hbase。實際寫到表的時候,隨意指定欄位名,所以再多字段也不怕了。

為了提高資料的寫入速度,hbase使用了lsm樹,也就是log結構合併樹,資料寫入的時候以log方式連續寫入,然後非同步對磁碟上多個lsm樹進行合併。

lsm樹可以看做是乙個n階合併樹,資料寫操作(rud,沒有create)都在記憶體中進行,並且創造乙個新紀錄。這些資料在記憶體中仍然是一棵排序樹,當資料量超出閾值,就會和最新的排序樹合併,當這棵排序樹的資料量也超過閾值,會和下一級的排序樹合併,並且覆蓋舊資料。

總的來說,使用lsm樹儲存的方式,讓資料可以通過連續寫磁碟的方式去儲存,提公升了很多的效能。

但是,如果突然宕機,就需要乙個操作日誌來記錄資料,當這些資料與集群資料合併的時候,這段時間的部分資料是訪問不到的。

Spark實現HIVE統計結果匯入到HBase操作

由於hive更新的機制極其不適應spark環境,於是利用hbase來執行hive中某些統計結果的更新。首先要做的是實現spark hive訪問,得到rdd,再將這個rdd匯入到hbase中操作。然而網上關於這一塊目前資料還真很少。但是其原理總體上來說是非常簡單的。步驟主要是兩步 1 開啟hive聯結...

ftp client的開源實現

html解析htmlparser htmlparser 首頁 檔案 htmlparser 2.0 snapshot bin.zip cpdetector 首頁 檔案 cpdetector eclipse project 1.0.7.zip 解開壓縮後,執行ant打包命令,build.xml有些地方需...

雲計算背後的秘密(3) BigTable

由於在google的資料中心儲存pb級以上的非關係型資料時候,比如網頁和地理資料等,為了更好地儲存和利用這些資料,google開發了一套資料庫系統,名為 bigtable 從技術來講,bigtable不是乙個傳統的關係型的資料庫,也不支援類似關聯 join 這樣高階的sql操作,取而代之的是多級對映...