HBASE-1089 Add count of regions on filesystem to master UI; add percentage online as difference between whats open and whats on filesystem

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@735837 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2009-01-19 21:43:48 +00:00
parent 557f050021
commit 2a3f6a5c97
6 changed files with 70 additions and 1 deletions

View File

@ -6,6 +6,11 @@ Release 0.20.0 - Unreleased
HBASE-1136 HashFunction inadvertently destroys some randomness
(Jonathan Ellis via Stack)
IMPROVEMENTS
HBASE-1089 Add count of regions on filesystem to master UI; add percentage
online as difference between whats open and whats on filesystem
(Samuel Guo via Stack)
Release 0.19.0 - Unreleased
INCOMPATIBLE CHANGES
HBASE-885 TableMap and TableReduce should be interfaces

View File

@ -111,6 +111,9 @@ public interface HConstants {
/** Name of old log file for reconstruction */
static final String HREGION_OLDLOGFILE_NAME = "oldlogfile.log";
/** Used to construct the name of the compaction directory during compaction */
static final String HREGION_COMPACTIONDIR_NAME = "compaction.dir";
/** Default maximum file size */
static final long DEFAULT_MAX_FILE_SIZE = 256 * 1024 * 1024;

View File

@ -79,6 +79,7 @@ import org.apache.hadoop.io.MapWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.ipc.RemoteException;
import org.apache.hadoop.util.StringUtils;
/**
* HMaster is the "master server" for a HBase.
@ -317,6 +318,17 @@ public class HMaster extends Thread implements HConstants, HMasterInterface,
return serverManager.getAverageLoad();
}
/** @return the number of regions on filesystem */
public int countRegionsOnFS() {
try {
return regionManager.countRegionsOnFS();
} catch (IOException e) {
LOG.warn("Get count of Regions on FileSystem error : " +
StringUtils.stringifyException(e));
}
return -1;
}
/**
* @return Location of the <code>-ROOT-</code> region.
*/

View File

@ -38,6 +38,9 @@ import java.util.concurrent.ConcurrentSkipListMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HServerInfo;
@ -447,6 +450,51 @@ class RegionManager implements HConstants {
LOG.info("Skipped " + skipped + " region(s) that are in transition states");
}
static class TableDirFilter implements PathFilter {
@Override
public boolean accept(Path path) {
// skip the region servers' log dirs && version file
// HBASE-1112 want to sperate the log dirs from table's data dirs by a special character.
String pathname = path.getName();
return !pathname.startsWith("log_") && !pathname.equals(VERSION_FILE_NAME);
}
}
static class RegionDirFilter implements PathFilter {
@Override
public boolean accept(Path path) {
return !path.getName().equals(HREGION_COMPACTIONDIR_NAME);
}
}
/**
* @return the rough number of the regions on fs
* Note: this method simply counts the regions on fs by accumulating all the dirs
* in each table dir (${HBASE_ROOT}/$TABLE) and skipping logfiles, compaction dirs.
* @throws IOException
*/
public int countRegionsOnFS() throws IOException {
int regions = 0;
FileStatus[] tableDirs =
master.fs.listStatus(master.rootdir, new TableDirFilter());
FileStatus[] regionDirs;
RegionDirFilter rdf = new RegionDirFilter();
for(FileStatus tabledir : tableDirs) {
if(tabledir.isDir()) {
regionDirs = master.fs.listStatus(tabledir.getPath(), rdf);
regions += regionDirs.length;
}
}
return regions;
}
/**
* @return Read-only map of online regions.
*/

View File

@ -632,7 +632,7 @@ public class HRegion implements HConstants {
* @return compaction directory for the passed in <code>dir</code>
*/
static Path getCompactionDir(final Path dir) {
return new Path(dir, "compaction.dir");
return new Path(dir, HREGION_COMPACTIONDIR_NAME);
}
/*

View File

@ -46,6 +46,7 @@
<tr><td>Hadoop Compiled</td><td><%= org.apache.hadoop.util.VersionInfo.getDate() %>, <%= org.apache.hadoop.util.VersionInfo.getUser() %></td><td>When Hadoop version was compiled and by whom</td></tr>
<tr><td>HBase Root Directory</td><td><%= master.getRootDir().toString() %></td><td>Location of HBase home directory</td></tr>
<tr><td>Load average</td><td><%= master.getAverageLoad() %></td><td>Average load across all region servers. Naive computation.</td></tr>
<tr><td>Regions On FS</td><td><%= master.countRegionsOnFS() %></td><td>The Number of regions on FileSystem. Rough count.</td></tr>
</table>
<h2>Catalog Tables</h2>