|
||||||||||
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 HStore 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 HStore. The number of HStores should be configurable, so that data which is accessed together is stored in the same HStore. Right now, we approximate that by building a single HStore 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.
Field Summary | |
---|---|
protected Map<Integer,HStore> |
stores
|
Constructor Summary | |
---|---|
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. |
void |
batchUpdate(BatchUpdate b)
|
void |
batchUpdate(BatchUpdate b,
boolean writeToWAL)
|
void |
batchUpdate(BatchUpdate b,
Integer lockid)
|
void |
batchUpdate(BatchUpdate b,
Integer lockid,
boolean writeToWAL)
|
boolean |
checkAndSave(BatchUpdate b,
HbaseMapWritable<byte[],byte[]> expectedValues,
Integer lockid,
boolean writeToWAL)
Performs an atomic check and save operation. |
protected void |
checkReadOnly()
|
static void |
cleanRegionInMETA(HRegionInterface srvr,
byte[] metaRegionName,
HRegionInfo info)
Clean COL_SERVER and COL_STARTCODE for passed info in
.META. |
List<HStoreFile> |
close()
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 |
deleteAll(byte[] row,
byte[] column,
long ts,
Integer lockid)
Delete all cells of the same age as the passed timestamp or older. |
void |
deleteAll(byte[] row,
long ts,
Integer lockid)
Delete all cells of the same age as the passed timestamp or older. |
void |
deleteAllByRegex(byte[] row,
String columnRegex,
long timestamp,
Integer lockid)
Delete all cells for a row with matching columns with timestamps less than or equal to timestamp. |
void |
deleteFamily(byte[] row,
byte[] family,
long timestamp,
Integer lockid)
Delete all cells for a row with matching column family with timestamps less than or equal to timestamp. |
void |
deleteFamilyByRegex(byte[] row,
String familyRegex,
long timestamp,
Integer lockid)
Delete all cells for a row with all the matching column families by familyRegex with timestamps less than or equal to timestamp. |
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 |
exists(byte[] row,
byte[] column,
long timestamp,
Integer lockid)
Tests for the existence of any cells for a given coordinate. |
boolean |
flushcache()
Flush the cache. |
Cell[] |
get(byte[] row,
byte[] column,
long ts,
int nv)
Fetch multiple versions of a single data item, with timestamp. |
org.apache.hadoop.fs.Path |
getBaseDir()
|
RowResult |
getClosestRowBefore(byte[] row,
byte[] columnFamily)
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()
|
HbaseMapWritable<byte[],Cell> |
getFull(byte[] row,
Set<byte[]> columns,
long ts,
int numVersions,
Integer lockid)
Fetch all the columns for the indicated row at a specified timestamp. |
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()
|
InternalScanner |
getScanner(byte[][] cols,
byte[] firstRow,
long timestamp,
RowFilterInterface filter)
Return an iterator that scans over the HRegion, returning the indicated columns for only the rows that match the data filter. |
byte[] |
getStartKey()
|
HStore |
getStore(byte[] column)
Return HStore instance. |
HTableDescriptor |
getTableDesc()
|
int |
hashCode()
|
void |
initialize(org.apache.hadoop.fs.Path initialFiles,
org.apache.hadoop.util.Progressable reporter)
Initialize this region and get it ready to roll. |
protected HStore |
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 |
makeColumnFamilyDirs(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path basedir,
int encodedRegionName,
byte[] colFamily,
HTableDescriptor tabledesc)
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. |
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. |
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 |
String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected final Map<Integer,HStore> stores
Constructor Detail |
---|
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<HStoreFile> close() throws IOException
This method could take some time to execute, so don't call it from a time-sensitive thread.
IOException
public byte[] getStartKey()
public byte[] getEndKey()
public long getRegionId()
public byte[] getRegionName()
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()
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 Cell[] get(byte[] row, byte[] column, long ts, int nv) throws IOException
row
- column
- ts
- nv
-
IOException
public HbaseMapWritable<byte[],Cell> getFull(byte[] row, Set<byte[]> columns, long ts, int numVersions, Integer lockid) throws IOException
row
- columns
- Array of columns you'd like to retrieve. When null, get all.ts
- numVersions
- number of versions to retrievelockid
-
IOException
public RowResult getClosestRowBefore(byte[] row, byte[] columnFamily) throws IOException
row
- row keycolumnFamily
- Must include the column family delimiter character.
IOException
public InternalScanner getScanner(byte[][] cols, byte[] firstRow, long timestamp, RowFilterInterface filter) throws IOException
cols
- columns to scan. If column name is a column family, all
columns of the specified column family are returned. Its also possible
to pass a regex in the column qualifier. A column qualifier is judged to
be a regex if it contains at least one of the following characters:
\+|^&*$[]]}{)(
.firstRow
- row which is the starting point of the scantimestamp
- only return rows whose timestamp is <= this valuefilter
- row filter
IOException
public void batchUpdate(BatchUpdate b) throws IOException
b
-
IOException
public void batchUpdate(BatchUpdate b, boolean writeToWAL) throws IOException
b
- writeToWAL
-
IOException
public void batchUpdate(BatchUpdate b, Integer lockid) throws IOException
b
- lockid
-
IOException
public void batchUpdate(BatchUpdate b, Integer lockid, boolean writeToWAL) throws IOException
b
- lockid
- writeToWAL
- if true, then we write this update to the log
IOException
public boolean checkAndSave(BatchUpdate b, HbaseMapWritable<byte[],byte[]> expectedValues, Integer lockid, boolean writeToWAL) throws IOException
b
- the update to applyexpectedValues
- the expected values to checklockid
- writeToWAL
- whether or not to write to the write ahead log
IOException
public void deleteAll(byte[] row, byte[] column, long ts, Integer lockid) throws IOException
row
- column
- ts
- Delete all entries that have this timestamp or olderlockid
- Row lock
IOException
public void deleteAll(byte[] row, long ts, Integer lockid) throws IOException
row
- ts
- Delete all entries that have this timestamp or olderlockid
- Row lock
IOException
public void deleteAllByRegex(byte[] row, String columnRegex, long timestamp, Integer lockid) throws IOException
row
- The row to operate oncolumnRegex
- The column regextimestamp
- Timestamp to matchlockid
- Row lock
IOException
public void deleteFamily(byte[] row, byte[] family, long timestamp, Integer lockid) throws IOException
row
- The row to operate onfamily
- The column family to matchtimestamp
- Timestamp to matchlockid
- Row lock
IOException
public void deleteFamilyByRegex(byte[] row, String familyRegex, long timestamp, Integer lockid) throws IOException
row
- The row to operate onfamilyRegex
- The column family regex for matching. This regex
expression just match the family name, it didn't include :timestamp
- Timestamp to matchlockid
- Row lock
- Throws:
IOException
public boolean exists(byte[] row, byte[] column, long timestamp, Integer lockid) throws IOException
row
- the rowcolumn
- the column, or nulltimestamp
- the timestamp, or HConstants.LATEST_VERSION for anylockid
- the existing lock, or null
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 HStore 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 HStore getStore(byte[] column)
column
- Name of column family hosted by this region.
column
.
TODO: Make this lookup faster.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 basedir, int encodedRegionName, byte[] colFamily, HTableDescriptor tabledesc) throws IOException
fs
- the file systembasedir
- base directory where region will live (usually the table dir)encodedRegionName
- encoded region namecolFamily
- the column familytabledesc
- table descriptor of table
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
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |