org.apache.hadoop.hbase.regionserver
Class HRegionServer

java.lang.Object
  extended by org.apache.hadoop.hbase.regionserver.HRegionServer
All Implemented Interfaces:
Runnable, HConstants, HRegionInterface, org.apache.hadoop.ipc.VersionedProtocol

public class HRegionServer
extends Object
implements HConstants, HRegionInterface, Runnable

HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There are many HRegionServers in a single HBase deployment.


Field Summary
protected  boolean abortRequested
           
protected  HBaseConfiguration conf
           
protected  boolean fsOk
           
protected  boolean isOnline
           
protected  ReentrantReadWriteLock lock
           
protected  HLog log
           
protected  int numRegionsToReport
           
protected  Map<Integer,HRegion> onlineRegions
           
protected  AtomicBoolean quiesced
           
static String REGIONSERVER
          region server process name
protected  HServerInfo serverInfo
           
protected  AtomicBoolean stopRequested
           
protected  int threadWakeFrequency
           
 
Fields inherited from interface org.apache.hadoop.hbase.HConstants
ALL_META_COLUMNS, ALL_VERSIONS, COL_REGIONINFO, COL_REGIONINFO_ARRAY, COL_SERVER, COL_SPLITA, COL_SPLITB, COL_STARTCODE, COLUMN_FAMILY, COLUMN_FAMILY_ARRAY, COLUMN_FAMILY_HISTORIAN, COLUMN_FAMILY_HISTORIAN_STR, COLUMN_FAMILY_STR, DEFAULT_CLIENT_RETRIES, DEFAULT_HOST, DEFAULT_MASTER_ADDRESS, DEFAULT_MASTER_INFOPORT, DEFAULT_MASTER_PORT, DEFAULT_MAX_FILE_SIZE, DEFAULT_REGION_SERVER_CLASS, DEFAULT_REGIONSERVER_ADDRESS, DEFAULT_REGIONSERVER_INFOPORT, DEFAULT_SIZE_RESERVATION_BLOCK, EMPTY_BYTE_ARRAY, EMPTY_END_ROW, EMPTY_START_ROW, FILE_SYSTEM_VERSION, FOREVER, HBASE_CLIENT_RETRIES_NUMBER_KEY, HBASE_DIR, HREGION_LOGDIR_NAME, HREGION_OLDLOGFILE_NAME, IN_MEMORY, LAST_ROW, LATEST_TIMESTAMP, MAJOR_COMPACTION_PERIOD, MASTER_ADDRESS, META_ROW_DELIMITER, META_TABLE_NAME, NAME, NINES, REGION_SERVER_CLASS, REGION_SERVER_IMPL, REGIONSERVER_ADDRESS, RETRY_BACKOFF, ROOT_TABLE_NAME, THREAD_WAKE_FREQUENCY, UTF8_ENCODING, VERSION_FILE_NAME, VERSIONS, ZERO_L, ZEROES
 
Fields inherited from interface org.apache.hadoop.hbase.ipc.HRegionInterface
versionID
 
Constructor Summary
HRegionServer(HBaseConfiguration conf)
          Starts a HRegionServer at the default location
HRegionServer(HServerAddress address, HBaseConfiguration conf)
          Starts a HRegionServer at the specified location
 
Method Summary
 void abort()
          Cause the server to exit without closing the regions it is serving, the log it is using and without notifying the master.
protected  void addProcessingMessage(HRegionInfo hri)
           
protected  long addScanner(InternalScanner s)
           
 void batchUpdate(byte[] regionName, BatchUpdate b)
          Applies a batch of updates via one RPC
protected  boolean checkFileSystem()
          Checks to see if the file system is still accessible.
protected  void checkOpen()
          Called to verify that this server is up and running.
 void close(long scannerId)
          Close a scanner
 void deleteAll(byte[] regionName, byte[] row, byte[] column, long timestamp)
          Delete all cells that match the passed row and column and whose timestamp is equal-to or older than the passed timestamp.
 void deleteAll(byte[] regionName, byte[] row, long timestamp)
          Delete all cells that match the passed row and whose timestamp is equal-to or older than the passed timestamp.
 void deleteFamily(byte[] regionName, byte[] row, byte[] family, long timestamp)
          Delete all cells for a row with matching column family with timestamps less than or equal to timestamp.
protected static void doMain(String[] args, Class<? extends HRegionServer> regionServerClass)
          Do class main.
 Cell get(byte[] regionName, byte[] row, byte[] column)
          Retrieve a single value from the specified region for the specified row and column keys
 Cell[] get(byte[] regionName, byte[] row, byte[] column, int numVersions)
          Get the specified number of versions of the specified row and column
 Cell[] get(byte[] regionName, byte[] row, byte[] column, long timestamp, int numVersions)
          Get the specified number of versions of the specified row and column with the specified timestamp.
 RowResult getClosestRowBefore(byte[] regionName, byte[] row)
          Return all the data for the row that matches row exactly, or the one that immediately preceeds it.
 HBaseConfiguration getConfiguration()
           
 SortedMap<Long,HRegion> getCopyOfOnlineRegionsSortedBySize()
           
protected  org.apache.hadoop.fs.FileSystem getFileSystem()
           
 FlushRequester getFlushRequester()
           
 long getGlobalMemcacheSize()
          Return the total size of all memcaches in every region.
 InfoServer getInfoServer()
           
protected  Leases getLeases()
           
protected  HRegionInfo[] getMostLoadedRegions()
          Get the top N most loaded regions this server is serving so we can tell the master which regions it can reallocate if we're overloaded.
 HRegion getOnlineRegion(byte[] regionName)
           
 Collection<HRegion> getOnlineRegions()
           
protected  List<HMsg> getOutboundMsgs()
           
 long getProtocolVersion(String protocol, long clientVersion)
          
protected  HRegion getRegion(byte[] regionName)
          Protected utility method for safely obtaining an HRegion handle.
 HRegionInfo getRegionInfo(byte[] regionName)
          Get metainfo about an HRegion
protected  Set<HRegion> getRegionsToCheck()
           
 AtomicInteger getRequestCount()
           
protected  org.apache.hadoop.fs.Path getRootDir()
           
 RowResult getRow(byte[] regionName, byte[] row, byte[][] columns, long ts)
          Get selected columns for the specified row at a given timestamp.
 HServerInfo getServerInfo()
           
 SortedSet<HRegionInfo> getSortedOnlineRegionInfos()
           
protected  void init(org.apache.hadoop.io.MapWritable c)
           
protected  HRegion instantiateRegion(HRegionInfo regionInfo)
           
 boolean isOnline()
          Report the status of the server.
 boolean isStopRequested()
           
static void main(String[] args)
           
 RowResult next(long scannerId)
          Get the next set of values
 long openScanner(byte[] regionName, byte[][] cols, byte[] firstRow, long timestamp, RowFilterInterface filter)
          Opens a remote scanner with a RowFilter.
 void run()
          The HRegionServer sticks in this loop until closed.
 void stop()
          Sets a flag that will cause all the HRegionServer threads to shut down in an orderly fashion.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

stopRequested

protected final AtomicBoolean stopRequested

quiesced

protected final AtomicBoolean quiesced

abortRequested

protected volatile boolean abortRequested

fsOk

protected volatile boolean fsOk

serverInfo

protected final HServerInfo serverInfo

conf

protected final HBaseConfiguration conf

onlineRegions

protected final Map<Integer,HRegion> onlineRegions

lock

protected final ReentrantReadWriteLock lock

threadWakeFrequency

protected final int threadWakeFrequency

numRegionsToReport

protected final int numRegionsToReport

REGIONSERVER

public static final String REGIONSERVER
region server process name

See Also:
Constant Field Values

log

protected HLog log

isOnline

protected volatile boolean isOnline
Constructor Detail

HRegionServer

public HRegionServer(HBaseConfiguration conf)
              throws IOException
Starts a HRegionServer at the default location

Parameters:
conf -
Throws:
IOException

HRegionServer

public HRegionServer(HServerAddress address,
                     HBaseConfiguration conf)
              throws IOException
Starts a HRegionServer at the specified location

Parameters:
address -
conf -
Throws:
IOException
Method Detail

run

public void run()
The HRegionServer sticks in this loop until closed. It repeatedly checks in with the HMaster, sending heartbeats & reports, and receiving HRegion load/unload instructions.

Specified by:
run in interface Runnable

init

protected void init(org.apache.hadoop.io.MapWritable c)
             throws IOException
Throws:
IOException

isOnline

public boolean isOnline()
Report the status of the server. A server is online once all the startup is completed (setting up filesystem, starting service threads, etc.). This method is designed mostly to be useful in tests.

Returns:
true if online, false if not.

stop

public void stop()
Sets a flag that will cause all the HRegionServer threads to shut down in an orderly fashion. Used by unit tests.


abort

public void abort()
Cause the server to exit without closing the regions it is serving, the log it is using and without notifying the master. Used unit testing and on catastrophic events such as HDFS is yanked out from under hbase or we OOME.


instantiateRegion

protected HRegion instantiateRegion(HRegionInfo regionInfo)
                             throws IOException
Throws:
IOException

addProcessingMessage

protected void addProcessingMessage(HRegionInfo hri)

getRegionInfo

public HRegionInfo getRegionInfo(byte[] regionName)
                          throws NotServingRegionException
Get metainfo about an HRegion

Specified by:
getRegionInfo in interface HRegionInterface
Parameters:
regionName - name of the region
Returns:
HRegionInfo object for region
Throws:
NotServingRegionException

get

public Cell get(byte[] regionName,
                byte[] row,
                byte[] column)
         throws IOException
Retrieve a single value from the specified region for the specified row and column keys

Specified by:
get in interface HRegionInterface
Parameters:
regionName - name of region
row - row key
column - column key
Returns:
alue for that region/row/column
Throws:
IOException

get

public Cell[] get(byte[] regionName,
                  byte[] row,
                  byte[] column,
                  int numVersions)
           throws IOException
Get the specified number of versions of the specified row and column

Specified by:
get in interface HRegionInterface
Parameters:
regionName - region name
row - row key
column - column key
numVersions - number of versions to return
Returns:
array of values
Throws:
IOException

get

public Cell[] get(byte[] regionName,
                  byte[] row,
                  byte[] column,
                  long timestamp,
                  int numVersions)
           throws IOException
Get the specified number of versions of the specified row and column with the specified timestamp.

Specified by:
get in interface HRegionInterface
Parameters:
regionName - region name
row - row key
column - column key
timestamp - timestamp
numVersions - number of versions to return
Returns:
array of values
Throws:
IOException

getRow

public RowResult getRow(byte[] regionName,
                        byte[] row,
                        byte[][] columns,
                        long ts)
                 throws IOException
Get selected columns for the specified row at a given timestamp.

Specified by:
getRow in interface HRegionInterface
Parameters:
regionName - region name
row - row key
Returns:
map of values
Throws:
IOException

getClosestRowBefore

public RowResult getClosestRowBefore(byte[] regionName,
                                     byte[] row)
                              throws IOException
Return all the data for the row that matches row exactly, or the one that immediately preceeds it.

Specified by:
getClosestRowBefore in interface HRegionInterface
Parameters:
regionName - region name
row - row key
Returns:
map of values
Throws:
IOException

next

public RowResult next(long scannerId)
               throws IOException
Get the next set of values

Specified by:
next in interface HRegionInterface
Parameters:
scannerId - clientId passed to openScanner
Returns:
map of values
Throws:
IOException

batchUpdate

public void batchUpdate(byte[] regionName,
                        BatchUpdate b)
                 throws IOException
Applies a batch of updates via one RPC

Specified by:
batchUpdate in interface HRegionInterface
Parameters:
regionName - name of the region to update
b - BatchUpdate
Throws:
IOException

openScanner

public long openScanner(byte[] regionName,
                        byte[][] cols,
                        byte[] firstRow,
                        long timestamp,
                        RowFilterInterface filter)
                 throws IOException
Opens a remote scanner with a RowFilter.

Specified by:
openScanner in interface HRegionInterface
Parameters:
regionName - name of region to scan
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 for column family name. A column name is judged to be regex if it contains at least one of the following characters: \+|^&*$[]]}{)(.
firstRow - starting row to scan
timestamp - only return values whose timestamp is <= this value
filter - RowFilter for filtering results at the row-level.
Returns:
scannerId scanner identifier used in other calls
Throws:
IOException

addScanner

protected long addScanner(InternalScanner s)
                   throws Leases.LeaseStillHeldException
Throws:
Leases.LeaseStillHeldException

close

public void close(long scannerId)
           throws IOException
Close a scanner

Specified by:
close in interface HRegionInterface
Parameters:
scannerId - the scanner id returned by openScanner
Throws:
IOException

deleteAll

public void deleteAll(byte[] regionName,
                      byte[] row,
                      byte[] column,
                      long timestamp)
               throws IOException
Delete all cells that match the passed row and column and whose timestamp is equal-to or older than the passed timestamp.

Specified by:
deleteAll in interface HRegionInterface
Parameters:
regionName - region name
row - row key
column - column key
timestamp - Delete all entries that have this timestamp or older
Throws:
IOException

deleteAll

public void deleteAll(byte[] regionName,
                      byte[] row,
                      long timestamp)
               throws IOException
Delete all cells that match the passed row and whose timestamp is equal-to or older than the passed timestamp.

Specified by:
deleteAll in interface HRegionInterface
Parameters:
regionName - region name
row - row key
timestamp - Delete all entries that have this timestamp or older
Throws:
IOException

deleteFamily

public void deleteFamily(byte[] regionName,
                         byte[] row,
                         byte[] family,
                         long timestamp)
                  throws IOException
Delete all cells for a row with matching column family with timestamps less than or equal to timestamp.

Specified by:
deleteFamily in interface HRegionInterface
Parameters:
regionName - The name of the region to operate on
row - The row to operate on
family - The column family to match
timestamp - Timestamp to match
Throws:
IOException

getServerInfo

public HServerInfo getServerInfo()
Returns:
Info on this server.

getInfoServer

public InfoServer getInfoServer()
Returns:
the info server

isStopRequested

public boolean isStopRequested()
Returns:
true if a stop has been requested.

getConfiguration

public HBaseConfiguration getConfiguration()
Returns:
the configuration

getOnlineRegions

public Collection<HRegion> getOnlineRegions()
Returns:
Immutable list of this servers regions.

getSortedOnlineRegionInfos

public SortedSet<HRegionInfo> getSortedOnlineRegionInfos()
Returns:
The HRegionInfos from online regions sorted

getCopyOfOnlineRegionsSortedBySize

public SortedMap<Long,HRegion> getCopyOfOnlineRegionsSortedBySize()
Returns:
A new Map of online regions sorted by region size with the first entry being the biggest.

getOnlineRegion

public HRegion getOnlineRegion(byte[] regionName)
Parameters:
regionName -
Returns:
HRegion for the passed regionName or null if named region is not member of the online regions.

getRequestCount

public AtomicInteger getRequestCount()
Returns:
the request count

getFlushRequester

public FlushRequester getFlushRequester()
Returns:
reference to FlushRequester

getRegion

protected HRegion getRegion(byte[] regionName)
                     throws NotServingRegionException
Protected utility method for safely obtaining an HRegion handle.

Parameters:
regionName - Name of online HRegion to return
Returns:
HRegion for regionName
Throws:
NotServingRegionException

getMostLoadedRegions

protected HRegionInfo[] getMostLoadedRegions()
Get the top N most loaded regions this server is serving so we can tell the master which regions it can reallocate if we're overloaded. TODO: actually calculate which regions are most loaded. (Right now, we're just grabbing the first N regions being served regardless of load.)


checkOpen

protected void checkOpen()
                  throws IOException
Called to verify that this server is up and running.

Throws:
IOException

checkFileSystem

protected boolean checkFileSystem()
Checks to see if the file system is still accessible. If not, sets abortRequested and stopRequested

Returns:
false if file system is not available

getRegionsToCheck

protected Set<HRegion> getRegionsToCheck()
Returns:
Returns list of non-closed regions hosted on this server. If no regions to check, returns an empty list.

getProtocolVersion

public long getProtocolVersion(String protocol,
                               long clientVersion)
                        throws IOException

Specified by:
getProtocolVersion in interface org.apache.hadoop.ipc.VersionedProtocol
Throws:
IOException

getOutboundMsgs

protected List<HMsg> getOutboundMsgs()
Returns:
Queue to which you can add outbound messages.

getGlobalMemcacheSize

public long getGlobalMemcacheSize()
Return the total size of all memcaches in every region.

Returns:
memcache size in bytes

getLeases

protected Leases getLeases()
Returns:
Return the leases.

getRootDir

protected org.apache.hadoop.fs.Path getRootDir()
Returns:
Return the rootDir.

getFileSystem

protected org.apache.hadoop.fs.FileSystem getFileSystem()
Returns:
Return the fs.

doMain

protected static void doMain(String[] args,
                             Class<? extends HRegionServer> regionServerClass)
Do class main.

Parameters:
args -
regionServerClass - HRegionServer to instantiate.

main

public static void main(String[] args)
Parameters:
args -


Copyright © 2008 The Apache Software Foundation