From 52c945d8ce1100254ed298a61bdf7035add4bde7 Mon Sep 17 00:00:00 2001 From: wenbang Date: Mon, 13 Aug 2018 15:07:33 +0800 Subject: [PATCH] Add RSgroup info for Region Servers and Tables --- .../apache/hadoop/hbase/RSGroupTableAccessor.java | 27 ++++++++++++++++++++++ .../hbase/tmpl/master/MasterStatusTmpl.jamon | 17 ++++++++++++++ .../hbase/tmpl/master/RegionServerListTmpl.jamon | 18 +++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java index 406c41e..7ed9eb4 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.apache.hadoop.hbase.client.Connection; @@ -27,6 +28,7 @@ import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.net.Address; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos; import org.apache.hadoop.hbase.rsgroup.RSGroupInfo; @@ -44,6 +46,8 @@ public final class RSGroupTableAccessor { TableName.valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "rsgroup"); private static final byte[] META_FAMILY_BYTES = Bytes.toBytes("m"); private static final byte[] META_QUALIFIER_BYTES = Bytes.toBytes("i"); + private static final String TABLE = "TABLE"; + private static final String SERVER = "SERVER"; private RSGroupTableAccessor() { } @@ -83,4 +87,27 @@ public final class RSGroupTableAccessor { return getRSGroupInfo(result); } } + + public static HashMap getAllRSGroupInfoMap(Connection connection) + throws IOException { + try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)) { + HashMap allRSGroupInfoMap = new HashMap<>(); + HashMap tableMap = new HashMap(); + HashMap serverMap = new HashMap(); + for (Result result : rsGroupTable.getScanner(new Scan())) { + RSGroupInfo rsGroupInfo = getRSGroupInfo(result); + if (rsGroupInfo != null) { + for (TableName table : rsGroupInfo.getTables()) { + tableMap.put(table, rsGroupInfo.getName()); + } + for (Address server : rsGroupInfo.getServers()) { + serverMap.put(server.toString(), rsGroupInfo.getName()); + } + } + } + allRSGroupInfoMap.put(TABLE, tableMap); + allRSGroupInfoMap.put(SERVER, serverMap); + return allRSGroupInfoMap; + } + } } diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon index 4085193..628d8b8 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon @@ -40,6 +40,7 @@ org.apache.hadoop.hbase.HBaseConfiguration; org.apache.hadoop.hbase.HConstants; org.apache.hadoop.hbase.HTableDescriptor; org.apache.hadoop.hbase.NamespaceDescriptor; +org.apache.hadoop.hbase.RSGroupTableAccessor; org.apache.hadoop.hbase.ServerName; org.apache.hadoop.hbase.TableName; org.apache.hadoop.hbase.client.Admin; @@ -455,6 +456,12 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); <%java> List tables = new ArrayList(); String errorMessage = getUserTables(master, tables); + boolean isRSGroupsEnabled = master.getMasterCoprocessorHost().findCoprocessor("RSGroupAdminEndpoint") != null ? true : false; + HashMap tableGroupMap = null; + if (isRSGroupsEnabled) { + HashMap allMap = RSGroupTableAccessor.getAllRSGroupInfoMap(master.getConnection()); + tableGroupMap = (HashMap) allMap.get("TABLE"); + } <%if (tables.size() == 0 && errorMessage != null)%>

<% errorMessage %>

@@ -474,6 +481,9 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); Split Regions Other Regions Description + <%if isRSGroupsEnabled %> + Group Name + <%for TableDescriptor desc : tables%> <%java> @@ -495,6 +505,10 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); otherRegionsCount = otherRegionsCount - openRegionsCount - failedRegionsCount - offlineRegionsCount - splitRegionsCount; + String groupName = null; + if (isRSGroupsEnabled) { + groupName = (String) tableGroupMap.get(tableName); + } <% tableName.getNamespaceAsString() %> @@ -508,6 +522,9 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); <% splitRegionsCount %> <% otherRegionsCount %> <% htDesc.toStringCustomizedValues() %> + <%if isRSGroupsEnabled %> + <% groupName %> +

<% tables.size() %> table(s) in set. [Details]

diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RegionServerListTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RegionServerListTmpl.jamon index 67d3305..f7fbd04 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RegionServerListTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RegionServerListTmpl.jamon @@ -29,6 +29,7 @@ HMaster master; org.apache.hadoop.hbase.procedure2.util.StringUtils; org.apache.hadoop.hbase.replication.ReplicationLoadSource; org.apache.hadoop.hbase.RegionMetrics; + org.apache.hadoop.hbase.RSGroupTableAccessor; org.apache.hadoop.hbase.ServerMetrics; org.apache.hadoop.hbase.ServerName; org.apache.hadoop.hbase.Size; @@ -90,12 +91,21 @@ Arrays.sort(serverNames); Version Requests Per Second Num. Regions + <%if master.getMasterCoprocessorHost().findCoprocessor("RSGroupAdminEndpoint") != null %> + Group Name + <%java> int totalRegions = 0; int totalRequestsPerSecond = 0; int inconsistentNodeNum = 0; String masterVersion = VersionInfo.getVersion(); + boolean isRSGroupsEnabled = master.getMasterCoprocessorHost().findCoprocessor("RSGroupAdminEndpoint") != null ? true : false; + HashMap serverGroupMap = null; + if (isRSGroupsEnabled) { + HashMap allMap = RSGroupTableAccessor.getAllRSGroupInfoMap(master.getConnection()); + serverGroupMap = (HashMap) allMap.get("SERVER"); + } for (ServerName serverName: serverNames) { ServerMetrics sl = master.getServerManager().getLoad(serverName); @@ -116,6 +126,10 @@ Arrays.sort(serverNames); lastContact = (System.currentTimeMillis() - sl.getReportTimestamp())/1000; } long startcode = serverName.getStartcode(); + String groupName = null; + if (isRSGroupsEnabled) { + groupName = (String) serverGroupMap.get(serverName.getHostAndPort()); + } <& serverNameLink; serverName=serverName; &> @@ -124,6 +138,9 @@ Arrays.sort(serverNames); <% version %> <% String.format("%.0f", requestsPerSecond) %> <% numRegionsOnline %> + <%if isRSGroupsEnabled %> + <% groupName %> + <%java> } @@ -138,6 +155,7 @@ Arrays.sort(serverNames); <% totalRequestsPerSecond %> <% totalRegions %> + -- 1.7.12.4