本文出自:http://wuyudong.com/archives/154
安全
在上篇文章《HBase簡介》中,已經提到過,HBase中的Table中的全部行都按照row key的字典序排列,Table 在行的方向上分割爲多個Hregion:網絡
region按大小分割的,每一個表一開始只有一個region,隨着數據不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion。當table中的行不斷增多,就會有愈來愈多的Hregion。架構
HRegion是Hbase中分佈式存儲和負載均衡的最小單元。最小單元就表示不一樣的Hregion能夠分佈在不一樣的HRegion server上。但一個Hregion是不會拆分到多個server上的。負載均衡
HRegion雖然是分佈式存儲的最小單元,但並非存儲的最小單元。事實上,HRegion由一個或者多個Store組成,每一個store保存一個columns family。每一個Strore又由一個memStore和0至多個StoreFile組成。StoreFile以HFile格式保存在HDFS上。如圖:分佈式
HFile的格式爲:spa
HFile分爲六個部分:server
Data Block 段–保存表中的數據,這部分能夠被壓縮blog
Meta Block 段 (可選的)–保存用戶自定義的kv對,能夠被壓縮。索引
File Info 段–Hfile的元信息,不被壓縮,用戶也能夠在這一部分添加本身的元信息。接口
Data Block Index 段–Data Block的索引。每條索引的key是被索引的block的第一條記錄的key。
Meta Block Index段 (可選的)–Meta Block的索引。
Trailer– 這一段是定長的。保存了每一段的偏移量,讀取一個HFile時,會首先讀取Trailer,Trailer保存了每一個段的起始位置(段的Magic Number用來作安全check),而後,DataBlock Index會被讀取到內存中,這樣,當檢索某個key時,不須要掃描整個HFile,而只需從內存中找到key所在的block,經過一次磁盤io將整個 block讀取到內存中,再找到須要的key。DataBlock Index採用LRU機制淘汰。
HFile的Data Block,Meta Block一般採用壓縮方式存儲,壓縮以後能夠大大減小網絡IO和磁盤IO,隨之而來的開銷固然是須要花費cpu進行壓縮和解壓縮。
目標Hfile的壓縮支持兩種方式:Gzip,Lzo。
系統架構
Client
1. 包含訪問hbase的接口,client維護着一些cache來加快對hbase的訪問,好比regione的位置信息。
Zookeeper
1. 保證任什麼時候候,集羣中只有一個master
2. 存貯全部Region的尋址入口。
3. 實時監控Region Server的狀態,將Region server的上線和下線信息實時通知給Master
4. 存儲Hbase的schema,包括有哪些table,每一個table有哪些column family
Master
1. 爲Region server分配region
2. 負責region server的負載均衡
3. 發現失效的region server並從新分配其上的region
4. GFS上的垃圾文件回收
5. 處理schema更新請求
Region Server
1.Region server維護Master分配給它的region,處理對這些region的IO請求
2.Region server負責切分在運行過程當中變得過大的region
能夠看到,client訪問hbase上數據的過程並不須要master參與(尋址訪問zookeeper和region server,數據讀寫訪問regione server),master僅僅維護者table和region的元數據信息,負載很低。