获取Region监控信息页面:
http://regionServerName:16030/jmx?qry=Hadoop:service=HBase,name=RegionServer,sub=Regions
获得数据如下
参数代表含义
*** 为前缀代表:Namespace_${namespace}_table_${tableName}_region_${regionName}
***_metric_storeCount | 当前region中store个数,即列簇个数 |
***_metric_storeFileCount | 当前region中storeFile个数 |
***_metric_memStoreSize | 当前region的MemStoreSize,该值达到某一特定条件会flush到磁盘,生成一个storefile,每次MemStore Flush时,会对Store进行检验,如果Store中的StoreFile数量大于hbase.hstore.compactionThreshold 时,就会触发Compaction |
***_metric_storeFileSize | 当前region storeFIles 大小,即每个region大小,单位为byte(字节) |
***_metric_compactionsCompletedCount | 完成Compaction次数 |
***_metric_compactionsFailedCount | Compaction失败次数 |
***_metric_numBytesCompactedCount | 完成Compaction总大小 |
***_metric_numFilesCompactedCount | 完成Compaction总文件数量 |
***_metric_readRequestCount | 读请求数量,scan 1000条数据,该值会增加1000;get获取数据该数据存在会增加1,数据不存在不会增加;count 数据也会增加该值,count数据量多少,则增加多少 |
***_metric_filteredReadRequestCount | 使用过滤的读请求数 |
***_metric_writeRequestCount | 写请求数量 |
***_metric_compactionsQueuedCount | 压缩队列大小 |
***_metric_maxCompactionQueueSize | 该region最大一次Compaction队列大小 |
***_metric_maxFlushQueueSize | 该region最大一次MemStore刷新队列数量 |
***_metric_flushesQueuedCount | 当前MemStore Flush 队列数量 |
***_metric_maxStoreFileAge | storeFile存在最大时间,单位ms |
***_metric_minStoreFileAge | storeFile存在最小时间,单位ms |
***_metric_avgStoreFileAge | storeFile存在平均时间,单位ms |
***_metric_lastMajorCompactionAge | 最后一次执行MajorCompaction时间距离现在多久,单位毫秒 |
***_metric_putCount | put数据次数,重复数据也会增加该值 |
***_metric_deleteCount | 删除数据次数 |
***_metric_scanCount | scan数据次数;count也会增加该值,注意是后台查询的次数,比如 count 'tbName',{CACHE=>500},count 'tbName',{CACHE=>1000}执行的次数是不同的 |
***_metric_getCount | get查询数据次数 |
***_metric_appendCount | |
***_metric_incrementCount |
更多参数获取逻辑可阅读源码
实现类:org.apache.hadoop.hbase.regionserver.MetricsRegionWrapperImpl
http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
举例:获取 maxStoreFileAge,在org.apache.hadoop.hbase.regionserver.HStroe 类中
@Override
public long getMaxStoreFileAge() {long earliestTS = Long.MAX_VALUE;for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {StoreFile.Reader r = s.getReader();if (r == null) {LOG.warn("StoreFile " + s + " has a null Reader");continue;}if (!s.isHFile()) {continue;}long createdTS = s.getFileInfo().getCreatedTimestamp();earliestTS = (createdTS < earliestTS) ? createdTS : earliestTS;}long now = EnvironmentEdgeManager.currentTime();return now - earliestTS;
}