天天看點

hbase 修改表名_HBase存儲架構

HBase存儲架構
hbase 修改表名_HBase存儲架構

HBase中的每張表都通過鍵按照一定的範圍被分割成多個子表(HRegion),預設一個HRegion超過256M就要被分割成兩個,這個過程由HRegionServer管理,而HRegion的配置設定由HMaster管理。

HMaster的作用:

  • 為HRegionServer配置設定HRegion
  • 負責HRegionServer的負載均衡
  • 發現失效的HRegionServer并重新配置設定
  • HDFS上的垃圾檔案回收
  • 處理Schema更新請求

HRegionServer的作用:

  • 維護HMaster配置設定給它的HRegion,處理對這些HRegion的IO請求
  • 負責切分正在運作過程中變得過大的HRegion

可以看到,Client通路HBase上的資料并不需要HMaster參與,尋址通路ZooKeeper和HRegionServer,資料讀寫通路HRegionServer, HMaster僅僅維護Table和Region的中繼資料資訊,Table的中繼資料資訊儲存在ZooKeeper上,負載很低。HRegionServer存取一個子表時, 會建立一個HRegion對象,然後對表的每個列簇建立一個Store對象,每個Store都會有一個MemStore和0或多個StoreFile與之對應,每個StoreFile都會對應一個HFile,HFile就是實際的存儲檔案。是以,一個HRegion有多少列簇就有多少個Store。 一個HRegionServer會有多個HRegion和一個HLog。

HRegion

Table在行的方向上分割為多個HRegion,HRegion是HBase中分布式存儲和負載均衡的最小單元,即不同的HRegion可以分别在不同的HRegionServer上,但同一個HRegion是不會拆分到多個HRegionServer上的。HRegion按大小分割,每個表一般隻有一個HRegion,随着資料不斷插入表,HRegion不斷增大,當HRegion的某個列簇達到一個閥值(預設256M)時就會分成兩個新的HRegion。

1、<表名,StartRowKey, 建立時間>

2、由目錄表(-ROOT-和.META.)記錄該Region的EndRowKey

HRegion定位:HRegion被配置設定給哪個HRegionServer是完全動态的,是以需要機制來定位HRegion具體在哪個HRegionServer,HBase使用三層結構來定位HRegion:

1、通過zk裡的檔案/hbase/rs得到-ROOT-表的位置。-ROOT-表隻有一個region。

2、通過-ROOT-表查找.META.表的第一個表中相應的HRegion位置。其實-ROOT-表是.META.表的第一個region; .META.表中的每一個Region在-ROOT-表中都是一行記錄。

3、通過.META.表找到所要的使用者表HRegion的位置。使用者表的每個HRegion在.META.表中都是一行記錄。-ROOT-表永遠不會被分隔為多個HRegion,保證了最多需要三次跳轉,就能定位到任意的region。Client會将查詢的位置資訊儲存緩存起來,緩存不會主動失效, 是以如果Client上的緩存全部失效,則需要進行6次網絡來回,才能定位到正确的HRegion,其中三次用來發現緩存失效,另外三次用來擷取位置資訊。

Store

每一個HRegion由一個或多個Store組成,至少是一個Store,HBase會把一起通路的資料放在一個Store裡面,即為每個ColumnFamily建一個Store, 如果有幾個ColumnFamily,也就有幾個Store。一個Store由一個MemStore和0或者多個StoreFile組成。 HBase以Store的大小來判斷是否需要切分HRegion。

MemStore

MemStore 是放在記憶體裡的,儲存修改的資料即keyValues。當MemStore的大小達到一個閥值(預設64MB)時,MemStore會被Flush到檔案, 即生成一個快照。目前HBase會有一個線程來負責MemStore的Flush操作。

StoreFile

  MemStore記憶體中的資料寫到檔案後就是StoreFile,StoreFile底層是以HFile的格式儲存。 HFileHBase中KeyValue資料的存儲格式,是Hadoop的二進制格式檔案。 首先HFile檔案是不定長的,長度固定的隻有其中的兩塊:Trailer和FileInfo。Trailer中有指針指向其他資料塊的起始點,FileInfo記錄了檔案的一些meta資訊。Data Block是HBase IO的基本單元,為了提高效率,HRegionServer中有基于LRU的Block Cache機制。每個Data塊的大小可以在建立一個Table的時候通過參數指定(預設塊大小64KB),大号的Block有利于順序Scan,小号的Block利于随機查詢。每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成,Magic内容就是一些随機數字,目的是防止資料損壞。

HLog :

HLog(WAL log):WAL意為write ahead log,用來做災難恢複使用,HLog記錄資料的所有變更,一旦region server 當機,就可以從log中進行恢複。

LogFlusher :定期的将緩存中資訊寫入到日志檔案中

LogRoller:對日志檔案進行管理維護