一個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))