1. 程式人生 > >hbase簡介2

hbase簡介2

轉自:https://www.cnblogs.com/ljy2013/p/5149903.html

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倒序排列。