Hbase的基本架構以及對應的讀寫流程

1、HBase簡介

1,定義:

  HBase 是一種分佈式、可擴展、支持海量數據存儲的 NoSQL 數據庫。數據庫

2,HBase的架構圖:

      

 

  架構角色:

  1)Master緩存

  Master是全部Region Server的管理者,其實現爲HRegionServer,主要做用有:架構

a>對於表的DDL操做:create,delete,alter

b>對於RegionServer的操做:分配regions到每一個RegionServer,監控每一個RegionServer的狀態,負載均衡和故障轉移。

  2)Zookeeper:負載均衡

HBase經過Zookeeper來作Master的高可用、RegionServer的監控、元數據的入口以及集羣配置的維護等工做。

  3)WAL:分佈式

因爲數據要經MemStore排序後才能刷寫到HFile,但把數據保存在內存中會有很高的機率致使數據丟失,爲了解決這個問題,數據會先寫入Write-Ahead logfile的文件中,而後再寫入到Memstore中。因此在系統出現故障的時候,數據能夠經過這個日誌文件重建。

  4)MemStore:spa

寫緩存,因爲HFile中的數據要求是有序的,因此數據是先存儲在MemStore中,排好序後,等到達刷寫時機纔會刷寫到HFile,每次刷寫都會造成一個新的HFile。

  5)StoreFile:日誌

保存實際數據的物理文件,StoreFile以HFile的形式存儲在HDFS上。每一個Store會有一個或多個StoreFile(HFile),數據在StoreFile上是有序的。

3,數據模型:

  

     1)Name Spacecode

命名空間,相似於關係型數據庫的DataBase概念,每一個命名空間下有多個表。HBase有兩個自帶的命名空間,分別是hbase和default,hbase中存放的是HBase的內置表,default表示用戶默認使用的命名空間。

  2)Regionserver

相似於關係型數據庫的表概念。不一樣的是,HBase定義表時只須要生命列簇便可,不須要聲明具體的列。這意味着,往HBase寫入數據時,字段能夠動態、按需指定。

    3)Rowblog

HBase表中的每行數據都由一個RowKey和多個Column(列)組成,數據是按照RowKey的字典順序存儲的,而且查詢時智能根據RowKey進行檢索,因此RowKey的書籍十分重要。

   4)Cloumn

HBase中的每一個列都由Cloumn Family(列簇)和Cloumn Qualifier(列限定符)進行限定,例如info:name,info:age。建表時,只需指明列簇,而列限定符無需預先定義。

 5)Time Stamp

用於標識數據的不一樣版本(version),每條數據寫入時,若是不指定時間戳,系統會自動爲其加上該字段,其值爲寫入HBase的時間。

   6)Cell

由{rowkey, column Family:column Qualifier, time Stamp} 惟一肯定的單元。cell 中的數據是沒有類型的,所有是字節碼形式存貯。

 

2、HBase寫數據流程

  

1)Client 先訪問 zookeeper,獲取 hbase:meta 表位於哪一個 Region Server。 #zk   get /hbase/meta-region-server 2)訪問對應的 Region Server,獲取 hbase:meta 表,根據讀請求的 namespace:table/rowkey,查詢出目標數據位於哪一個 Region Server 中的哪一個 Region 中。
  並將該 table 的 region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問。 #hbase scan 'hbase:meta' 查詢到具體哪張表由哪一個Region Server維護
3)與目標 Region Server 進行通信; 4)將數據順序寫入(追加)到 WAL; 5)將數據寫入對應的 MemStore,數據會在 MemStore 進行排序; 6)向客戶端發送 ack; 7)等達到 MemStore 的刷寫時機後,將數據刷寫到 HFile。

 

3、HBase讀數據流程

    

1)Client 先訪問 zookeeper,獲取 hbase:meta 表位於哪一個 Region Server。
2)訪問對應的 Region Server,獲取 hbase:meta 表,根據讀請求的 namespace:table/rowkey,查詢出目標數據位於哪一個 Region Server 中的哪一個 Region 中。並將該 table 的 region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問。
3)與目標 Region Server 進行通信;
4)分別在 Block Cache(讀緩存),MemStore 和 Store File(HFile)中查詢目標數據,並將查到的全部數據進行合併。此處全部數據是指同一條數據的不一樣版本(time stamp)或者不一樣的類型(Put/Delete)。
5將從文件中查詢到的數據塊(Block,HFile 數據存儲單元,默認大小爲 64KB)緩存到Block Cache6)將合併後的最終結果返回給客戶端。
相關文章
相關標籤/搜索