來看看年薪80W的大數(shù)據(jù)大牛是如何理解 hbase 的架構(gòu)及設(shè)計(jì)原理

簡介

HBase是一個(gè)開源的非關(guān)系型分布式數(shù)據(jù)庫(NoSQL),它參考了谷歌的BigTable建模,實(shí)現(xiàn)的編程語言為Java。它是Apache軟件基金會(huì)Hadoop項(xiàng)目的一部分,運(yùn)行于HDFS文件系統(tǒng)之上,為Hadoop提供類似于BigTable規(guī)模的服務(wù)。HBase在列上實(shí)現(xiàn)了BigTable論文提到的壓縮算法、內(nèi)存操作和布隆過濾器。HBase的表能夠作為MapReduce任務(wù)的輸入和輸出,可以通過Java API來存取數(shù)據(jù),也可以通過REST、Avro或者Thrift的API來訪問。HBase雖然性能有顯著的提升,但還不能直接取代SQL數(shù)據(jù)庫?,F(xiàn)今它已經(jīng)應(yīng)用于多個(gè)數(shù)據(jù)驅(qū)動(dòng)型網(wǎng)站。

本文從架構(gòu)方面探討hbase的主要設(shè)計(jì),從而在需要hbase的場(chǎng)合能夠更好的設(shè)計(jì)和判斷。

首先,先來看看hbase的整體架構(gòu)。除了DFS組件,hbase的基本組件圖實(shí)際上就是Zookeeper,HMaster,RegionServer。

其中,RegionServer作為數(shù)據(jù)的實(shí)際存取服務(wù)器,主要負(fù)責(zé)數(shù)據(jù)的最終存取,一般情況都是多臺(tái);

RegionServer根據(jù)不同的row key劃分為許多region,每個(gè)region按順序存放從startKey到endKey的數(shù)據(jù)。每個(gè)RegionServer有下面這些組件:

一個(gè)WAL: write ahead log. 聽名知其意,該文件是落庫前先寫的日志文件,它最主要的作用是恢復(fù)數(shù)據(jù)用,類似于mysql的binlog。保存在HDFS中。

一個(gè)BlockCache: regionServer的讀緩存。保存使用最頻繁的數(shù)據(jù),使用LRU算法換出不需要的數(shù)據(jù)。

多個(gè)Region: 每個(gè)region包含多個(gè)store,每個(gè)CF擁有一個(gè)store

store: 每個(gè)store包含多個(gè)storeFile和一個(gè)memstore

Memstore: region的寫緩存。保存還未寫入HFile的數(shù)據(jù),寫入數(shù)據(jù)前會(huì)先做排序,每個(gè)region每個(gè)CF都會(huì)擁有一個(gè)Memstore,這就是為什么CF不能建太多的原因。

storeFile: 真正存儲(chǔ)keyvalue數(shù)據(jù)的文件,其保存的文件是排序過的。一個(gè)storeFile對(duì)應(yīng)一個(gè)HFile。保存在HDFS中

HFile分為數(shù)據(jù)塊,索引塊,bloom過濾器以及trailer。

Trailer主要記錄了HFile的基本信息,各個(gè)部分的偏移和地址信息。

Data block主要存儲(chǔ)用戶的key-value數(shù)據(jù)

Bloom filter主要用來快速定位文件是否不在數(shù)據(jù)塊。

比較容易混淆的是zookeeper和hmaster。

Zookeeper負(fù)責(zé)保持多臺(tái)Hmaster中只有一臺(tái)是活躍的;存儲(chǔ)Hbase的schema,table,CF等元信息;存儲(chǔ)所有的region入口;監(jiān)控regionServer的狀態(tài),并將該信息通知hmaster。可以看出來,zookeeper幾乎是負(fù)責(zé)整個(gè)集群的關(guān)鍵信息存取以及關(guān)鍵狀態(tài)監(jiān)控。如果zookeeper掛了,那么整個(gè)hbase集群幾乎就是不可用的狀態(tài)。

Hmaster則是負(fù)責(zé)對(duì)table元數(shù)據(jù)的管理;對(duì)HRegion的負(fù)載均衡,調(diào)整HRegion的布局,比如分裂和合并;包括恢復(fù)數(shù)據(jù)的遷移等。Hmaster相當(dāng)于對(duì)RegionServer的后臺(tái)管理,對(duì)于一些定制的管理行為,zookeeper不可能幫你完成,于是乎才有了hmaster。如果hmaster掛了,除了不能對(duì)table進(jìn)行管理配置,不能擴(kuò)展region,并不會(huì)影響整體服務(wù)的可用性。

接下來我們來關(guān)注一些關(guān)鍵流程。

客戶端首次讀寫的流程:

1. 客戶端首先從zookeeper中得到META table的位置,根據(jù)META table的存儲(chǔ)位置得到具體的RegionServer是哪臺(tái)

2. 詢問具體的RegionServer

寫流程:

1. 首先寫入WAL日志,以防crash。

2. 緊接著寫入Memstore,即寫緩存。由于是內(nèi)存寫入,速度較快。

3. 立馬返回客戶端表示寫入完畢。

4. 當(dāng)Memstore滿時(shí),從Memstore刷新到HFile,磁盤的順序?qū)懰俣确浅??,并記錄下最后一次最高的sequence號(hào)。這樣系統(tǒng)能知道哪些記錄已經(jīng)持久化,哪些沒有。

讀流程:

1. 首先到讀緩存BlockCache中查找可能被緩存的數(shù)據(jù)

2. 如果未找到,到寫緩存查找已提交但是未落HFile的數(shù)據(jù)

3. 如果還未找到, 到HFile中繼續(xù)查找數(shù)據(jù)

數(shù)據(jù)緊湊:

數(shù)據(jù)從memStore刷新到HFile時(shí),為了保持簡單,都是每個(gè)memStore放一個(gè)HFile,這會(huì)帶來大量小HFile文件,使得查詢時(shí)效率相對(duì)較低,于是,采用數(shù)據(jù)緊湊的方式將多個(gè)小文件壓縮為幾個(gè)大文件。其中,minor compaction是自動(dòng)將相關(guān)的小文件做一些適當(dāng)?shù)木o湊,但不徹底;而major compaction則是放在午夜跑的定時(shí)任務(wù),將文件做最大化的緊湊。

數(shù)據(jù)恢復(fù)流程:

當(dāng)RegionServer掛了,zookeeper很快就能檢測(cè)到,于是將其下的region狀態(tài)設(shè)置為不可用。Hmaster隨即開始恢復(fù)的流程。

1. HFile本身有2個(gè)備份,而且有專門的HDFS來管理其下的文件。因此對(duì)HFile來說并不需要恢復(fù)。

2. Hmaster重置region到新的regionServer

3. 之前在MemStore中丟失的數(shù)據(jù),通過WAL分裂先將WAL按照region切分。切分的原因是WAL并不區(qū)分region,而是所有region的log都寫入同一個(gè)WAL。

4. 根據(jù)WAL回放并恢復(fù)數(shù)據(jù)?;胤诺倪^程實(shí)際上先進(jìn)MemStore,再flush到HFile

最后,小編還整理了更多大牛的教學(xué)視頻,和學(xué)習(xí)資料

關(guān)注 轉(zhuǎn)發(fā)文章;++我威信 bmaaa01,獲取。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HBase Architectural Components(HBase架構(gòu)組件) HBase架構(gòu)也是主從架構(gòu),由...
    陌上疏影涼閱讀 2,604評(píng)論 0 7
  • 初次接觸HBase的讀者,建議先閱讀淺析HBase:為高效的可擴(kuò)展大規(guī)模分布式系統(tǒng)而生 HBase的構(gòu)成 物理上來...
    耀凱考前突擊大師閱讀 5,386評(píng)論 0 12
  • HBase架構(gòu)的組成 HBase大體上按照master-slave架構(gòu)可以分解成三種類型的服務(wù)。Region se...
    期待現(xiàn)在閱讀 1,118評(píng)論 0 4
  • 二、除夕 除夕的早晨,突然開始下雪,我一直睡到八點(diǎn)才起床,我很吃驚,居然睡這么遲,哎呀媽呀,它們一定餓扁了吧。我起...
    碧玫閱讀 318評(píng)論 0 3
  • 「心態(tài)」 畢業(yè)后的一年多里,一直糾結(jié)于工作還是考研,時(shí)常患得患失,情緒大起大落。因?yàn)椴桓首鋈魏问虑槎疾荒苋硇耐度?..
    GraceChow閱讀 259評(píng)論 0 7

友情鏈接更多精彩內(nèi)容