|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.hadoop.hbase.regionserver.HRegion
public class HRegion
HRegion stores data for a certain region of a table. It stores all columns for each row. A given table consists of one or more HRegions.
We maintain multiple HStores for a single HRegion.
An Store is a set of rows with some column data; together, they make up all the data for the rows.
Each HRegion has a 'startKey' and 'endKey'.
The first is inclusive, the second is exclusive (except for the final region) The endKey of region 0 is the same as startKey for region 1 (if it exists). The startKey for the first region is null. The endKey for the final region is null.
Locking at the HRegion level serves only one purpose: preventing the region from being closed (and consequently split) while other operations are ongoing. Each row level operation obtains both a row lock and a region read lock for the duration of the operation. While a scanner is being constructed, getScanner holds a read lock. If the scanner is successfully constructed, it holds a read lock until it is closed. A close takes out a write lock and consequently will block for ongoing operations and will block new operations from starting while the close is in progress.
An HRegion is defined by its table and its key extent.
It consists of at least one Store. The number of Stores should be configurable, so that data which is accessed together is stored in the same Store. Right now, we approximate that by building a single Store for each column family. (This config info will be communicated via the tabledesc.)
The HTableDescriptor contains metainfo about the HRegion's table. regionName is a unique identifier for this HRegion. (startKey, endKey] defines the keyspace for this HRegion.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface org.apache.hadoop.hbase.HConstants |
---|
HConstants.Modify |
Field Summary | |
---|---|
static long |
DEEP_OVERHEAD
|
static long |
FIXED_OVERHEAD
|
static String |
REGIONINFO_FILE
Name of the region info file that resides just under the region directory. |
static byte[] |
REGIONINFO_FILE_BYTES
REGIONINFO_FILE as byte array. |
protected Map<byte[],Store> |
stores
|
Constructor Summary | |
---|---|
HRegion()
Should only be used for testing purposes |
|
HRegion(org.apache.hadoop.fs.Path basedir,
HLog log,
org.apache.hadoop.fs.FileSystem fs,
HBaseConfiguration conf,
HRegionInfo regionInfo,
FlushRequester flushListener)
HRegion constructor. |
Method Summary | |
---|---|
static void |
addRegionToMETA(HRegion meta,
HRegion r)
Inserts a new region's meta information into the passed meta region. |
boolean |
checkAndPut(byte[] row,
byte[] family,
byte[] qualifier,
byte[] expectedValue,
Put put,
Integer lockId,
boolean writeToWAL)
|
protected void |
checkReadOnly()
|
static void |
cleanRegionInMETA(HRegionInterface srvr,
byte[] metaRegionName,
HRegionInfo info)
Clean COL_SERVER and COL_STARTCODE for passed info in
.META. |
List<StoreFile> |
close()
Close down this HRegion. |
List<StoreFile> |
close(boolean abort)
Close down this HRegion. |
byte[] |
compactStores()
Called by compaction thread and after region is opened to compact the HStores if necessary. |
static HRegion |
createHRegion(HRegionInfo info,
org.apache.hadoop.fs.Path rootDir,
HBaseConfiguration conf)
Convenience method creating new HRegions. |
void |
delete(byte[] family,
List<KeyValue> kvs,
boolean writeToWAL)
|
void |
delete(Delete delete,
Integer lockid,
boolean writeToWAL)
|
static void |
deleteRegion(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path rootdir,
HRegionInfo info)
Deletes all the files for a HRegion |
protected void |
doReconstructionLog(org.apache.hadoop.fs.Path oldLogFile,
long minSeqId,
long maxSeqId,
org.apache.hadoop.util.Progressable reporter)
|
boolean |
equals(Object o)
|
boolean |
flushcache()
Flush the cache. |
Result |
get(Get get,
Integer lockid)
|
org.apache.hadoop.fs.Path |
getBaseDir()
|
Result |
getClosestRowBefore(byte[] row,
byte[] family)
Return all the data for the row that matches row exactly, or the one that immediately preceeds it, at or immediately before ts. |
protected long |
getCompleteCacheFlushSequenceId(long currentSequenceId)
Get the sequence number to be associated with this cache flush. |
HBaseConfiguration |
getConf()
|
byte[] |
getEndKey()
|
org.apache.hadoop.fs.FileSystem |
getFilesystem()
|
long |
getLargestHStoreSize()
|
long |
getLastFlushTime()
|
HLog |
getLog()
|
org.apache.hadoop.fs.Path |
getRegionDir()
|
static org.apache.hadoop.fs.Path |
getRegionDir(org.apache.hadoop.fs.Path rootdir,
HRegionInfo info)
Computes the Path of the HRegion |
static org.apache.hadoop.fs.Path |
getRegionDir(org.apache.hadoop.fs.Path tabledir,
int name)
Computes the Path of the HRegion |
long |
getRegionId()
|
HRegionInfo |
getRegionInfo()
|
byte[] |
getRegionName()
|
String |
getRegionNameAsString()
|
InternalScanner |
getScanner(Scan scan)
Return an iterator that scans over the HRegion, returning the indicated columns and rows specified by the Scan . |
protected InternalScanner |
getScanner(Scan scan,
List<KeyValueScanner> additionalScanners)
|
byte[] |
getStartKey()
|
Store |
getStore(byte[] column)
Return HStore instance. |
HTableDescriptor |
getTableDesc()
|
int |
hashCode()
|
boolean |
hasTooManyStoreFiles()
Checks every store to see if one has too many store files |
long |
heapSize()
|
long |
incrementColumnValue(byte[] row,
byte[] family,
byte[] qualifier,
long amount,
boolean writeToWAL)
|
void |
initialize(org.apache.hadoop.fs.Path initialFiles,
org.apache.hadoop.util.Progressable reporter)
Initialize this region and get it ready to roll. |
protected Store |
instantiateHStore(org.apache.hadoop.fs.Path baseDir,
HColumnDescriptor c,
org.apache.hadoop.fs.Path oldLogFile,
org.apache.hadoop.util.Progressable reporter)
|
boolean |
isClosed()
|
boolean |
isClosing()
|
static void |
main(String[] args)
Facility for dumping and compacting catalog tables. |
static void |
makeColumnFamilyDirs(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path tabledir,
HRegionInfo hri,
byte[] colFamily)
Make the directories for a specific column family |
static HRegion |
merge(HRegion a,
HRegion b)
Merge two regions whether they are adjacent or not. |
static HRegion |
mergeAdjacent(HRegion srcA,
HRegion srcB)
Merge two HRegions. |
Integer |
obtainRowLock(byte[] row)
Obtain a lock on the given row. |
static void |
offlineRegionInMETA(HRegionInterface srvr,
byte[] metaRegionName,
HRegionInfo info)
Utility method used by HMaster marking regions offlined. |
static HRegion |
openHRegion(HRegionInfo info,
org.apache.hadoop.fs.Path rootDir,
HLog log,
HBaseConfiguration conf)
Convenience method to open a HRegion outside of an HRegionServer context. |
protected void |
prepareToSplit()
|
void |
put(Put put)
|
void |
put(Put put,
boolean writeToWAL)
|
void |
put(Put put,
Integer lockid)
|
void |
put(Put put,
Integer lockid,
boolean writeToWAL)
|
static void |
removeRegionFromMETA(HRegionInterface srvr,
byte[] metaRegionName,
byte[] regionName)
Delete a region's meta information from the passed meta region. |
static boolean |
rowIsInRange(HRegionInfo info,
byte[] row)
Determines if the specified row is within the row range specified by the specified HRegionInfo |
boolean |
shouldSplit(boolean b)
For internal use in forcing splits ahead of file size limit. |
String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected final Map<byte[],Store> stores
public static final String REGIONINFO_FILE
public static final byte[] REGIONINFO_FILE_BYTES
public static final long FIXED_OVERHEAD
public static final long DEEP_OVERHEAD
Constructor Detail |
---|
public HRegion()
public HRegion(org.apache.hadoop.fs.Path basedir, HLog log, org.apache.hadoop.fs.FileSystem fs, HBaseConfiguration conf, HRegionInfo regionInfo, FlushRequester flushListener)
basedir
- qualified path of directory where region should be located,
usually the table directory.log
- The HLog is the outbound log for any updates to the HRegion
(There's a single HLog for all the HRegions on a single HRegionServer.)
The log file is a logfile from the previous execution that's
custom-computed for this HRegion. The HRegionServer computes and sorts the
appropriate log info for this HRegion. If there is a previous log file
(implying that the HRegion has been written-to before), then read it from
the supplied path.fs
- is the filesystem.conf
- is global configuration settings.regionInfo
- - HRegionInfo that describes the region
is new), then read them from the supplied path.flushListener
- an object that implements CacheFlushListener or null
making progress to master -- otherwise master might think region deploy
failed. Can be null.Method Detail |
---|
public void initialize(org.apache.hadoop.fs.Path initialFiles, org.apache.hadoop.util.Progressable reporter) throws IOException
initialFiles
- reporter
-
IOException
public HRegionInfo getRegionInfo()
public boolean isClosed()
public boolean isClosing()
public List<StoreFile> close() throws IOException
This method could take some time to execute, so don't call it from a time-sensitive thread.
IOException
public List<StoreFile> close(boolean abort) throws IOException
abort
- true if server is aborting (only during testing)
IOException
public byte[] getStartKey()
public byte[] getEndKey()
public long getRegionId()
public byte[] getRegionName()
public String getRegionNameAsString()
public HTableDescriptor getTableDesc()
public HLog getLog()
public HBaseConfiguration getConf()
public org.apache.hadoop.fs.Path getRegionDir()
public org.apache.hadoop.fs.FileSystem getFilesystem()
public long getLastFlushTime()
public long getLargestHStoreSize()
protected void prepareToSplit()
public byte[] compactStores() throws IOException
This operation could block for a long time, so don't call it from a time-sensitive thread. Note that no locking is necessary at this level because compaction only conflicts with a region split, and that cannot happen because the region server does them sequentially and not in parallel.
IOException
public boolean flushcache() throws IOException
This method may block for some time, so it should not be called from a time-sensitive thread.
IOException
DroppedSnapshotException
- Thrown when replay of hlog is required
because a Snapshot was not properly persisted.protected long getCompleteCacheFlushSequenceId(long currentSequenceId)
currentSequenceId
-
public Result getClosestRowBefore(byte[] row, byte[] family) throws IOException
row
- row keyfamily
-
IOException
public InternalScanner getScanner(Scan scan) throws IOException
Scan
.
This Iterator must be closed by the caller.
scan
- configured Scan
IOException
protected InternalScanner getScanner(Scan scan, List<KeyValueScanner> additionalScanners) throws IOException
IOException
public void delete(Delete delete, Integer lockid, boolean writeToWAL) throws IOException
delete
- lockid
- writeToWAL
-
IOException
public void delete(byte[] family, List<KeyValue> kvs, boolean writeToWAL) throws IOException
family
- kvs
- writeToWAL
-
IOException
public void put(Put put) throws IOException
put
-
IOException
public void put(Put put, boolean writeToWAL) throws IOException
put
- writeToWAL
-
IOException
public void put(Put put, Integer lockid) throws IOException
put
- lockid
-
IOException
public void put(Put put, Integer lockid, boolean writeToWAL) throws IOException
put
- lockid
- writeToWAL
-
IOException
public boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier, byte[] expectedValue, Put put, Integer lockId, boolean writeToWAL) throws IOException
row
- family
- qualifier
- expectedValue
- put
- lockId
- writeToWAL
-
IOException
protected void checkReadOnly() throws IOException
IOException
- Throws exception if region is in read-only mode.protected void doReconstructionLog(org.apache.hadoop.fs.Path oldLogFile, long minSeqId, long maxSeqId, org.apache.hadoop.util.Progressable reporter) throws UnsupportedEncodingException, IOException
UnsupportedEncodingException
IOException
protected Store instantiateHStore(org.apache.hadoop.fs.Path baseDir, HColumnDescriptor c, org.apache.hadoop.fs.Path oldLogFile, org.apache.hadoop.util.Progressable reporter) throws IOException
IOException
public Store getStore(byte[] column)
column
- Name of column family hosted by this region.
column
.
TODO: Make this lookup faster.public Integer obtainRowLock(byte[] row) throws IOException
ROWS ==> LOCKSas well as
LOCKS ==> ROWSBut it acts as a guard on the client; a miswritten client just can't submit the name of a row and start writing to it; it must know the correct lockid, which matches the lock list in memory.
It would be more memory-efficient to assume a correctly-written client, which maybe we'll do in the future.
row
- Name of row to lock.
IOException
public boolean equals(Object o)
equals
in class Object
public int hashCode()
hashCode
in class Object
public String toString()
toString
in class Object
public org.apache.hadoop.fs.Path getBaseDir()
public static HRegion createHRegion(HRegionInfo info, org.apache.hadoop.fs.Path rootDir, HBaseConfiguration conf) throws IOException
HLog
for the created region. It
needs to be closed explicitly. Use getLog()
to get
access.
info
- Info for region to create.rootDir
- Root directory for HBase instanceconf
-
IOException
public static HRegion openHRegion(HRegionInfo info, org.apache.hadoop.fs.Path rootDir, HLog log, HBaseConfiguration conf) throws IOException
info
- Info for region to be opened.rootDir
- Root directory for HBase instancelog
- HLog for region to use. This method will call
HLog#setSequenceNumber(long) passing the result of the call to
HRegion#getMinSequenceId() to ensure the log id is properly kept
up. HRegionStore does this every time it opens a new region.conf
-
IOException
public static void addRegionToMETA(HRegion meta, HRegion r) throws IOException
meta
region. Used by the HMaster bootstrap code adding
new table to ROOT table.
meta
- META HRegion to be updatedr
- HRegion to add to meta
IOException
public static void removeRegionFromMETA(HRegionInterface srvr, byte[] metaRegionName, byte[] regionName) throws IOException
meta
region. Removes content in the 'info' column family.
Does not remove region historian info.
srvr
- META server to be updatedmetaRegionName
- Meta region nameregionName
- HRegion to remove from meta
IOException
public static void offlineRegionInMETA(HRegionInterface srvr, byte[] metaRegionName, HRegionInfo info) throws IOException
srvr
- META server to be updatedmetaRegionName
- Meta region nameinfo
- HRegion to update in meta
IOException
public static void cleanRegionInMETA(HRegionInterface srvr, byte[] metaRegionName, HRegionInfo info) throws IOException
info
in
.META.
srvr
- metaRegionName
- info
-
IOException
public static void deleteRegion(org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.Path rootdir, HRegionInfo info) throws IOException
fs
- the file system objectrootdir
- qualified path of HBase root directoryinfo
- HRegionInfo for region to be deleted
IOException
public static org.apache.hadoop.fs.Path getRegionDir(org.apache.hadoop.fs.Path tabledir, int name)
tabledir
- qualified path for tablename
- ENCODED region name
public static org.apache.hadoop.fs.Path getRegionDir(org.apache.hadoop.fs.Path rootdir, HRegionInfo info)
rootdir
- qualified path of HBase root directoryinfo
- HRegionInfo for the region
public static boolean rowIsInRange(HRegionInfo info, byte[] row)
info
- HRegionInfo that specifies the row rangerow
- row to be checked
public static void makeColumnFamilyDirs(org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.Path tabledir, HRegionInfo hri, byte[] colFamily) throws IOException
fs
- the file systemtabledir
- base directory where region will live (usually the table dir)hri
- colFamily
- the column family
IOException
public static HRegion mergeAdjacent(HRegion srcA, HRegion srcB) throws IOException
srcA
- srcB
-
IOException
public static HRegion merge(HRegion a, HRegion b) throws IOException
a
- region ab
- region b
IOException
public Result get(Get get, Integer lockid) throws IOException
get
- lockid
-
IOException
public long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount, boolean writeToWAL) throws IOException
row
- family
- qualifier
- amount
-
IOException
public long heapSize()
heapSize
in interface HeapSize
public boolean shouldSplit(boolean b)
b
-
public boolean hasTooManyStoreFiles()
public static void main(String[] args) throws IOException
./bin/hbase org.apache.hadoop.hbase.regionserver.HRegion
args
-
IOException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |