hbase性能监控(三)

5 hbase中regionserver进程相关metric的计算采集

Regionserver的进程监控数据主要由RegionServerMetrics的实例来负责,主要采集的数据包括:

一,      region的信息,上线region数量,store的数量、storefile的大小、storefileindex的大小,读取时memstore命中的次数和缺失次数

二,      blockcache的信息,例如blockcache中使用多少、空闲多少、累计的缺失率、命中率等。

三,      读写请求的统计信息,例如最大最小读写响应时间,读写的表分布、来源ip分布、读写数据量、读写失败次数等。

四,      dfs操作的信息,例如读写延迟,sync延迟、flush时间和大小,hlog的写入时间、次数等

五,      compact与split的操作信息,例如队列的长度、操作次数和时间等

六,      handler的信息,例如队列长度、处于活跃handler的数量以及活跃的reader数量

监控数据的采集和推送分为两个异步的过程来进行,由GangliaContext31父类中的定时任务调用doUpdates来完成数据的推送,Regionserver的run方法中在固定间隔时间内来调用doMetrics来进行数据的采集。

5.1 region的metric采集

目前,在hbase中,region和storefile的信息都存储在类HRegionServer的成员onlineRegions,该成员是一个hash表的实例,具体为实例为ConcurrentHashMap<String, HRegion>(),key是region的名称。主要存储了上线的region的数量、region使用的memstore的大小,store的大小、storefile的数量、storefile的索引使用的内存大小。在进行打开或是关闭region这类操作时,都会及时更新   onlineRegions中相关的信息,具体的流程可以查看代码。

这些信息的统计过程较为简单:主要是访问onlineRegions,通过该hash表的size接口可以获得当前上线的region的数量,然后遍历onlineRegions中的每个HRegion对象,获得每个HRegion的memstore的大小,进行累积,接着遍历HRegion中的每个store的大小,获取每个store中storefile数量、以及使用索引内存的大小,进行累积。完成遍历制后,就获得了上线的region数量、memstore使用的内存大小,store的数量、storefile的数量、storefile的索引使用的内存大小。最后memstore使用的内存大小和storefile的索引使用的内存大小都是以兆为单位发送给gmond进程的。

在读取数据时,也会读取memstore的数据,因此在HRegionServer中有两个成员变量统计了读取memstore的数据时命中的次数和缺失的次数,这个主要是get和next方法中进行操作。

相关metric的说明:

metric rrd文件 说明
hbase.regionserver.regions.rrd Rs上region数量
hbase.regionserver.memStoreHitCount.rrd memStore命中次数
hbase.regionserver.memStoreMissCount.rrd memStore缺失次数
hbase.regionserver.memstoreSizeMB.rrd memStore大小
hbase.regionserver.storefileIndexSizeMB.rrd Storefileindex占用内存大小
hbase.regionserver.storefileSizeMB.rrd Storefile大小
hbase.regionserver.storefiles.rrd Storefile数量
hbase.regionserver.stores.rrd Store数量

 

   5.2 blockcache相关的metric采集

Blockcache的相关信息存储在storefile类的成员变量hfileBlockCache中,该成员变量是一个BlockCache的实例。这个实例中存储了block的数量、以及使用掉的内存数量与空闲内存大小、block命中的次数、缺失的次数、替换出的次数、命中率等。这些信息都是regionserver启动以来累积的统计值。

通过访问BlockCache的实例,可以直接获得当前缓存的block的数量(block的基本大小见cf的相应属性值),当前已经使用掉的blockcache的内存大小,和剩余的大小。

通过访问BlockCache的实例中的成员变量stats,可以获得block的命中次数,缺失次数,和被替换出的次数,以及命中率,命中率即命中的次数比上总的请求数获得比例。在regionserver在做RPC时,在读取某个block时会进行更新统计信息。

需要指出的是,在源码内部对于命中率有两个版本,一个是普通的命中率,一个caching命中率。普通的命中率就是通常意义上的命中率,caching命中率之的是某些特殊请求的命中率,这类请求设置了需要使用blockcache。

关于bc监控项说明:

metric rrd文件 说明
hbase.regionserver.metaBlockCacheHitCount.rrd Meta命中率
hbase.regionserver.metaBlockCacheHitRatio.rrd Meta命中次数
hbase.regionserver.metaBlockCacheMissCount.rrd Meta缺失次数
hbase.regionserver.blockCacheCount.rrd BC数量
hbase.regionserver.blockCacheEvictedCount.rrd BC换出次数
hbase.regionserver.blockCacheFree.rrd BC空闲内存
hbase.regionserver.blockCacheHitCachingRatio.rrd BC命中率(RPC指定使用缓存)
hbase.regionserver.blockCacheHitCachingRatio.rrd BC缺失率(RPC指定使用缓存)
hbase.regionserver.blockCacheHitRatio.rrd BC命中率
hbase.regionserver.blockCacheMissCount.rrd BC缺失次数
hbase.regionserver.blockCacheSize.rrd BC内存大小
hbase.regionserver.blockingUpdate_avg_time.rrd BC更新平均时间
hbase.regionserver.blockingUpdate_num_ops.rrd BC更新次数

 

   5.3 读写请求的metric采集

在hbase中,主要采用RPC的机制来处理客户端的请求,因此,在每个RPC内内部就可以完成对RPC请求数据的请求。由于读写请求在RPC中占据了绝大部分,因此,hbase对读写请求做了统计。

目前,regionserver中,对读写这两种比较多的请求的统计包括:读写的请求次数、来源ip的分布、读写的响应时间、读写请求失败的次数、最大读写响应时间、读写的数据量、以表为单位的读写请求分布信息等,另外,还统计了总的RPC次数和总的处理时间。

以读请求为例,在get方法中,获取当前时间戳,作为执行的开始时间,将RPC的总次数和读请求的次数加一,执行一个GET实例,获得客户端所需的数据,获取当前GET请求的表,将相应统计加一,获取客户端的ip,向一张hash表中该ip对应的统计值加一,获取当前的时间戳,减去刚才的开时间,作为执行GET所花费时间,加到读请求的累积处理时间中,获取GET 请求的结果集数据量,将数据量加入到累积的读取数据量中。

如果执行GET失败,那么,将会进入异常处理逻辑,会增加读请求失败的次数和请求的累积处理时间。

写请求的统计信息,基本上类似,这里就不再赘述。

为了对读写请求的表分布和ip来源分布进行统计,HRegionServer类中有四个Map<String,Integer>类型的成员变量来存储响应的数据。其他的数据都采用AtomicInteger类型来存储。

metric说明:

metric rrd说明 说明
hbase.regionserver.readDataSize.rrd 累积读取数据量
hbase.regionserver.readMaxResponseTime.rrd 最大读响应时间
hbase.regionserver.readRequest_IP_A.rrd 来自主机A的读请求数
hbase.regionserver.readRequests.rrd RS的读请求数
hbase.regionserver.readRequest_table_T.rrd 对表A的读请求数
hbase.regionserver.readResponseTime.rrd 读的累积响应时间
hbase.regionserver.writeDataSize.rrd 累积写入的数据量
hbase.regionserver.writeMaxResponseTime.rrd 最大写响应时间
hbase.regionserver.writeRequest_IP_A.rrd 来自主机A的写请求数
hbase.regionserver.writeRequests.rrd RS的写请求数
hbase.regionserver.writeRequest_table_A.rrd 对A表的写请求数
hbase.regionserver.writeResponseTime.rrd 写的累积总响应时间
hbase.regionserver.failedReadRequests.rrd 读失败次数
hbase.regionserver.failedWriteRequests.rrd 写失败次数
hbase.regionserver.requests.rrd 请求数(一个RPC可以有多个请求)
hbase.regionserver.rpcRequestCount.rrd Rpc请求数
hbase.regionserver.rpcRequestTime.rrd RPC累积的响应时间

 

   5.4 dfs操作的metric采集

在hbase中,主要通过HFile和Hlog这两个个类封装了对hdfs的请求,因此,这两个个类中在每次操作hdfs的时候,都进行了操作信息的统计。

Hbase对hdfs的操作主要包括读写和sync操作。在HFile主要负责普通regionfile的读写,sync操作由Hlog封装。

主要统计的信息,主要是一段时间以来,在读、写、sync操作的次数、消耗的时间、以及操作的数据量。这类操作的统计过程比较简单,主要是在进行操作时,将请求的数据量,完成请求的时间进行记录,更新响应的统计数据。

另外,hbase还会统计了flush操作。这个基本和写操作类似,最终还是由写操作来完成,但是相关信息是在HRegionServer类中记录的。主要统计了flush的累积次数和累积的数据量。

rrd文件说明:

metric rrd文件 说明
hbase.regionserver.hdfsBlocksLocalityIndex.rrd 数据本地化比例
hbase.regionserver.delayingFlush_avg_time.rrd Flush被推迟的平均时间
hbase.regionserver.delayingFlush_num_ops.rrd 推迟flush的次数
hbase.regionserver.doWALTime.rrd 写WAL时间
hbase.regionserver.flushQueueSize.rrd Flush队列长度
hbase.regionserver.flushSize_avg_time.rrd Flush操作的文件平均大小
hbase.regionserver.flushSize_num_ops.rrd Flush的文件次数
hbase.regionserver.flushTime_avg_time.rrd Flush操作的文件平均耗时
hbase.regionserver.flushTime_num_ops.rrd Flush的文件次数
hbase.regionserver.fsReadData.rrd 读数据量
hbase.regionserver.fsReadLatency_avg_time.rrd 读操作平均时延
hbase.regionserver.fsReadLatency_num_ops.rrd 读操作次数
hbase.regionserver.fsReadTime.rrd 读数据花费时间
hbase.regionserver.fsSyncLatency_avg_time.rrd Sync操作平均时延
hbase.regionserver.fsSyncLatency_num_ops.rrd Sync操作次数
hbase.regionserver.fsWriteData.rrd 写数据量
hbase.regionserver.fsWriteLatency_avg_time.rrd 写操作平均时延
hbase.regionserver.fsWriteLatency_num_ops.rrd 写操作次数
hbase.regionserver.fsWriteTime.rrd 写数据花费时间
hbase.regionserver.hlogCount.rrd Hlog数量
hbase.regionserver.hlogWriteOps.rrd Hlog写次数
hbase.regionserver.hlogWriteTime.rrd Hlog写时间

 

5.5 compact与split的操作数据采集

对于compact操作,主要是统计compact每次的时间开销和compact次数,以及平均每次compact的文件大小,以及compact队列的长度。

对于split操作,和compact操作所述的类似,统计了split的次数和文件大小.

监控项目说明:

监控项 说明
hbase.regionserver.compactFileNum.rrd 压缩文件数
hbase.regionserver.compactionQueueSize.rrd 队列长度
hbase.regionserver.compactionSize_avg_time.rrd 压缩操作的文件平均大小
hbase.regionserver.compactionSize_num_ops.rrd 压缩的操作次数
hbase.regionserver.compactionTime_avg_time.rrd 压缩操作的平均耗时
hbase.regionserver.compactionTime_num_ops.rrd 压缩的操作次数
hbase.regionserver.compactRate.rrd 压缩速率
hbase.regionserver.regionSplitTime_avg_time.rrd Split的平均时间
hbase.regionserver.regionSplitTime_num_ops.rrd Split的次数
hbase.regionserver.splitFileSize.rrd Split的文件累积大小
hbase.regionserver.splitRate.rrd Split速率

 

5.6 handler的metric采集

Handler的信息较为简单,就是hbase中handler线程处于忙碌状态的数量,以及处于等待状态的数量,在HRegionServer中,每次调用metrics方法,会遍历各个handler,获取其运行状态,最终统计出处于忙碌和等待状态的线程数量。

rrd文件说明:

rrd文件 说明
hbase.regionserver.handlerCount.rrd Handler数量
hbase.regionserver.handlerQueueSize.rrd Call队列的长度
hbase.regionserver.aliveHandlerNum.rrd 处于运行状态的线程数量
hbase.regionserver.aliveReaderNum.rrd 处于运行状态的RPC监听线程数量

 

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章