天天看點

HBase中 Region類

一個Region在HBase中用一個HRegionInfo表示。該類定義在檔案HRegionInfo.java中。一個Region包括如下幾個重要屬性:

// 代表Region的開始Key

byte [] startKey = HConstants.EMPTY_BYTE_ARRAY;

// 代表Region的結束Key

byte [] endKey = HConstants.EMPTY_BYTE_ARRAY;

// 該Region的id

long regionId = -1;

// 該Region的名字

byte [] regionName = HConstants.EMPTY_BYTE_ARRAY;

// 所在Table的表描述符

HTableDescriptor tableDesc = null;

開始Key和結束Key對應該Region中包含了哪些Row。RegionId用于唯一的辨別該Region。

1. Region名字的組成:table的名字,開始Key,RegionId。函數

createRegionName(byte[] tableName, byte[] startKey, byte[] id) 用于生産region名字。

由于Region的名字中包含了table的名字,HRegionInfo提供了一個getTableNameFromRegionName

用于從Region名字中傳回table名字。

2. 為便于Logging,HRegionInfo類包含了字段regionNameStr,傳回用于logging的Region name字元串。

3. 該Region是否是Root Region?

tableDesc.isRootRegion() 為true表明該Region是Root Region。

4. 該Region是否是MetaRegion?

tableDesc.isMetaRegion()為true表明該Region是Meta region。

HRegionInfo其它的字段:

split:表明該region是否已經split了,并且包含daughters。

offLine: 表明該region是否是offline的

HRegionInfo提供了一個函數encodeRegionName,對Region名字進行編碼,在很多地方使用了這個編碼

結果。編碼采用了JenkinsHash,見http://burtleburtle.net/bob/hash/doobs.html

int encodeRegionName的實作(byte[] regionName):

Math.abs(JenkinsHash.hash(regionName, regionName.length, 0))

繼續閱讀