[
https://issues.apache.org/jira/browse/HBASE-20654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16493514#comment-16493514
]
liubangchen commented on HBASE-20654:
-------------------------------------
Expose metrics to tag of Hadoop:service=HBase,name=Master,sub=AssignmentManager:
{code:json}
"beans" : [ {
"name" : "Hadoop:service=HBase,name=Master,sub=AssignmentManager",
"modelerType" : "Master,sub=AssignmentManager",
"tag.regionsOffline" :
"Namespace_tablename_regionname,Namespace_tablename_regionname",
"tag.regionsOpening" : "",
"tag.regionsOpen" : "",
"tag.regionsClosing" : "",
"tag.regionsClosed" : "",
"tag.regionsSplitting" : "",
"tag.regionsSplit" : "",
"tag.regionsFailedOpen" : "",
"tag.regionsFailedClose" : "",
"tag.regionsMerging" : "",
"tag.regionsMerged" : "",
"tag.regionsSplittingNew" : "",
"ritCount" : 0
} ]
}
{code}
1. Add metrics tags, add attributes to interface MetricsAssignmentManagerSource
{code:java}
String REGIONS_STATE_OFFLINE="regionsOffline";
String REGIONS_STATE_OFFLINE_DESC="Regions with state OFFLINE";
String REGIONS_STATE_OPENING="regionsOpening";
String REGIONS_STATE_OPENING_DESC="Regions with state OPENING";
String REGIONS_STATE_OPEN="regionsOpen";
String REGIONS_STATE_OPEN_DESC="Regions with state OPEN";
String REGIONS_STATE_CLOSING="regionsClosing";
String REGIONS_STATE_CLOSING_DESC="Regions with state CLOSING";
String REGIONS_STATE_CLOSED="regionsClosed";
String REGIONS_STATE_CLOSED_DESC="Regions with state CLOSED";
String REGIONS_STATE_SPLITTING="regionsSplitting";
String REGIONS_STATE_SPLITTING_DESC="Regions with state SPLITTING";
String REGIONS_STATE_SPLIT="regionsSplit";
String REGIONS_STATE_SPLIT_DESC="Regions with state SPLIT";
String REGIONS_STATE_FAILED_OPEN="regionsFailedOpen";
String REGIONS_STATE_FAILED_OPEN_DESC="Regions with state failed open";
String REGIONS_STATE_FAILED_CLOSE="regionsFailedClose";
String REGIONS_STATE_FAILED_CLOSE_DESC="Regions with state failed close";
String REGIONS_STATE_MERGING="regionsMerging";
String REGIONS_STATE_MERGING_DESC="Regions with state merging";
String REGIONS_STATE_MERGED="regionsMerged";
String REGIONS_STATE_MERGED_DESC="Regions with state merged";
String REGIONS_STATE_SPLITTING_NEW="regionsSplittingNew";
String REGIONS_STATE_SPLITTING_NEW_DESC="Regions with state";
{code}
2. Modify class MetricsAssignmentManagerSourceImpl
{code:java}
@Override
public void getMetrics(MetricsCollector metricsCollector, boolean all) {
MetricsRecordBuilder metricsRecordBuilder =
metricsCollector.addRecord(metricsName);
if(metricsRecordBuilder!=null){
metricsRecordBuilder.tag(Interns.info(REGIONS_STATE_OFFLINE,REGIONS_STATE_OFFLINE_DESC),metricsAssignmentWrapper.getOfflineRegions());
....
metricsRegistry.snapshot(metricsRecordBuilder, all);
}
{code}
3. Add new config is to control the number of region names in each region
state. How about naming the config:
hbase.assignment.metric.maxmum.regions.in.each.state
4. Get metrics by class MetricsAssignmentWrapperImpl
{code:java}
private String getRegionsListByState(RegionState.State state) {
List<String> regions = new LinkedList<String>();
RegionStates rstates = this.am.getRegionStates();
if (rstates == null) {
return "";
}
List<RegionStates.RegionStateNode> list =
rstates.getRegionsInTransition();
if (list == null || list.isEmpty()) {
return "";
}
List<RegionStates.RegionStateNode> metalist = new
LinkedList<RegionStates.RegionStateNode>();
List<RegionStates.RegionStateNode> datalist = new
LinkedList<RegionStates.RegionStateNode>();
int i = 0;
for (RegionStates.RegionStateNode rsn : list) {
if (rsn.getTable().isSystemTable()) {
metalist.add(rsn);
} else {
datalist.add(rsn);
}
}
datalist.addAll(metalist);
for (RegionStates.RegionStateNode rsn : datalist) {
if (rsn.getState().equals(state)) {
regions.add(String.format("%s_%s_%s",
rsn.getTable().getNamespaceAsString(), rsn.getTable().getNameAsString(),
rsn.getRegionInfo() == null ? "" : rsn.getRegionInfo().getEncodedName()));
i++;
}
if (i > this.am.getMaxnumRegionInEachState()) {
break;
}
}
return StringUtils.join(regions, ",");
}
{code}
[[email protected]] Can you give me some suggestions? Let me submit a
patch. you can help me review it. thanks.
> Expose regions in transition thru JMX
> -------------------------------------
>
> Key: HBASE-20654
> URL: https://issues.apache.org/jira/browse/HBASE-20654
> Project: HBase
> Issue Type: Improvement
> Reporter: Ted Yu
> Assignee: liubangchen
> Priority: Major
>
> Currently only the count of regions in transition is exposed thru JMX.
> Here is a sample snippet of the /jmx output:
> {code}
> {
> "beans" : [ {
> ...
> }, {
> "name" : "Hadoop:service=HBase,name=Master,sub=AssignmentManager",
> "modelerType" : "Master,sub=AssignmentManager",
> "tag.Context" : "master",
> ...
> "ritCount" : 3
> {code}
> It would be desirable to expose region name, state for the regions in
> transition as well.
> We can place configurable upper bound on the number of entries returned in
> case there're a lot of regions in transition.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)