HBase的基本架構及其原理介紹


1、概述:最近,有一些工程師問我有關HBase的基本架構的問題,其實這個問題僅僅說架構是非常簡單,但是需要理解。在這里,我覺得可以用HDFS的架構作為借鑒。(其實像Hadoop生態系統中的大部分組建的架構原理是類似,不信你往下看)

2、介紹架構

(1)HDFS例子

      在這里我以我比較熟悉的HDFS分布式文件系統作為一個例子來簡單說明一下。首先我對HDFS的架構做一個簡單的說明:

      HDFS分布式文件系統主要三個組建:NameNode和DataNode以及SecondaryNameNode。Namenode主要負責維護文件系統的元數據信息,DataNode則是負責實際存儲對應數據分片的節點。

      它的主要工作原理是客戶端(client)通過發送一個請求(讀寫請求)時,首先會從NameNode中獲取對應的元數據信息,這個元數據信息包含了對應 請求的數據所在的位置、大小等信息。獲取到這些元數據信息后,client直接從對應的DataNode上執行對應的請求。這就是整個請求的響應過程。這 簡單吧。當然這里並沒有講到SecondaryNameNode,它的作用主要是用來合並fsimage和edits文件來減少NameNode重啟的時 間,還可以用來作為數據的一個冷備份。

      好了,HDFS分布式文件系統的架構和原理簡單的理解就是上面的內容了。下面來看看HBase的架構和原理吧。

(2)HBase(正題)

     有了HDFS的基本原理對比之后,我們用同樣的思維看HBase:與HDFS一樣,HBase有Master和RegionServer(當然,這里還 需要用到Zookeeper)。在這里其實Zookeeper充當了類似NameNode的角色,Master的角色實際上是維護整個列式存儲集群的運行 (如分配或切分Region,檢查失效的RegionServer),RegionServer的角色當然跟Datanode的角色類似啦。

   HBase的主要原理:客戶端(Client)發送對應的請求(增、刪、改、查),首先客戶端會從Zookeeper中獲取一個-ROOT-的表的元信 息(即-ROOT-的位置);第二步,客戶端就去讀取對應的-ROOT-表的信息,-ROOT-表中存儲了對應的Meta的元數據信息;第三步,客戶端知 道了Meta表元數據信息后就去讀取對應Meta表的信息,Meta表存儲了對應存放數據的RegionServer的位置信息等;第四步,就去獲取對應 RegionServer上的數據。

  HBase中比較重要的RegionServer,它上面包含的內容有:WAL(HLog)、BlockCache、Region、MemStore、StoreFile(HFile新版本的改進),下面主要講一下這些個名詞的原理和含義:

  a)  WAL:Write Ahead Log即提前寫日志(Log),根據字面意思就知道,在寫操作的時候,就是先要寫入到該日志文件中。所有寫操作都會先保證將數據寫入這個Log文件后,才 會真正更新MemStore,最后寫入HFile中。這樣可以在RegionServer掛掉后,通過WAL來恢復數據,從而避免數據的丟失。一般一個 RegionServer只有一個WAL實例,也就是說一個RegionServer的所有WAL寫都是串行的,你可能會覺得這會有性能問題,因而在 HBase 1.0之后,通過HBASE-5699實現了多個WAL並行寫(MultiWAL),該實現采用HDFS的多個管道寫,以單個HRegion為單位。

  b)  BlockCache:它是一個讀緩存,即“引用局部性”原理。

  c)  Region:它是一個Table在一個RegionServer中的存儲單元,也是分布式存 儲的最小單元。一個Table可以有一個或多個Region,他們可以在一個相同的RegionServer上,也可以分布在不同的 RegionServer上,一個RegionServer可以有多個Region,他們分別屬於不同的Table。Region由多個Store構成, 每個Store對應了一個Table在這個Region中的一個Column Family,即每個Column Family就是一個集中的存儲單元,因而最好將具有相近IO特性的Column存儲在一個Column Family,以實現高效讀取(數據局部性原理,可以提高緩存的命中率)。Store是HBase中存儲的核心,它實現了讀寫HDFS功能,一個 Store由一個MemStore 和0個或多個StoreFile組成。

  d)  MemStore是一個寫緩存(In Memory Sorted Buffer),所有數據的寫在完成WAL日志寫后,再寫入MemStore中,由MemStore根據一定的算法將數據Flush到地層HDFS文件中 (HFile),通常每個HRegion中的每個 Column Family有一個自己的MemStore。

  e)  HFile(StoreFile) 用於存儲HBase的數據(Cell/KeyValue)。在HFile中的數據是按RowKey、Column Family、Column排序,對相同的Cell(即這三個值都一樣),則按timestamp倒序排列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM