All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hbase-webapps.master.table.jsp Maven / Gradle / Ivy

There is a newer version: 3.0.0-beta-1
Show newest version
<%--
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
--%>
<%@ page contentType="text/html;charset=UTF-8"
  import="static org.apache.commons.lang3.StringEscapeUtils.escapeXml"
  import="java.util.ArrayList"
  import="java.util.Collection"
  import="java.util.HashMap"
  import="java.util.LinkedHashMap"
  import="java.util.List"
  import="java.util.Map"
  import="java.util.Set"
  import="java.util.HashSet"
  import="java.util.Optional"
  import="java.util.TreeMap"
  import="java.util.concurrent.TimeUnit"
  import="org.apache.commons.lang3.StringEscapeUtils"
  import="org.apache.hadoop.conf.Configuration"
  import="org.apache.hadoop.hbase.HConstants"
  import="org.apache.hadoop.hbase.HRegionLocation"
  import="org.apache.hadoop.hbase.HTableDescriptor"
  import="org.apache.hadoop.hbase.NotServingRegionException"
  import="org.apache.hadoop.hbase.RegionMetrics"
  import="org.apache.hadoop.hbase.RegionMetricsBuilder"
  import="org.apache.hadoop.hbase.ServerMetrics"
  import="org.apache.hadoop.hbase.ServerName"
  import="org.apache.hadoop.hbase.Size"
  import="org.apache.hadoop.hbase.TableName"
  import="org.apache.hadoop.hbase.TableNotFoundException"
  import="org.apache.hadoop.hbase.client.AsyncAdmin"
  import="org.apache.hadoop.hbase.client.AsyncConnection"
  import="org.apache.hadoop.hbase.client.CompactionState"
  import="org.apache.hadoop.hbase.client.ConnectionFactory"
  import="org.apache.hadoop.hbase.client.RegionInfo"
  import="org.apache.hadoop.hbase.client.RegionInfoBuilder"
  import="org.apache.hadoop.hbase.client.RegionLocator"
  import="org.apache.hadoop.hbase.client.RegionReplicaUtil"
  import="org.apache.hadoop.hbase.client.Table"
  import="org.apache.hadoop.hbase.client.TableState"
  import="org.apache.hadoop.hbase.client.ColumnFamilyDescriptor"
  import="org.apache.hadoop.hbase.http.InfoServer"
  import="org.apache.hadoop.hbase.master.HMaster"
  import="org.apache.hadoop.hbase.master.RegionState"
  import="org.apache.hadoop.hbase.master.assignment.RegionStates"
  import="org.apache.hadoop.hbase.master.webapp.MetaBrowser"
  import="org.apache.hadoop.hbase.master.webapp.RegionReplicaInfo"
  import="org.apache.hadoop.hbase.quotas.QuotaSettingsFactory"
  import="org.apache.hadoop.hbase.quotas.QuotaTableUtil"%>
<%@ page import="org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot" %>
<%@ page import="org.apache.hadoop.hbase.quotas.ThrottleSettings" %>
<%@ page import="org.apache.hadoop.hbase.util.Bytes" %>
<%@ page import="org.apache.hadoop.hbase.util.FSUtils" %>
<%@ page import="org.apache.hadoop.hbase.zookeeper.MetaTableLocator" %>
<%@ page import="org.apache.hadoop.util.StringUtils" %>
<%@ page import="org.apache.hbase.thirdparty.com.google.protobuf.ByteString" %>
<%@ page import="org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos" %>
<%@ page import="org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos" %>
<%@ page import="org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas" %>
<%@ page import="org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceQuota" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.util.stream.Collectors" %>
<%!
  /**
   * @return An empty region load stamped with the passed in regionInfo
   * region name.
   */
  private static RegionMetrics getEmptyRegionMetrics(final RegionInfo regionInfo) {
    return RegionMetricsBuilder.toRegionMetrics(ClusterStatusProtos.RegionLoad.newBuilder().
            setRegionSpecifier(HBaseProtos.RegionSpecifier.newBuilder().
                    setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME).
                    setValue(ByteString.copyFrom(regionInfo.getRegionName())).build()).build());
  }

  /**
   * Given dicey information that may or not be available in meta, render a link to the region on
   * its region server.
   * @return an anchor tag if one can be built, {@code null} otherwise.
   */
  private static String buildRegionServerLink(final ServerName serverName, final int rsInfoPort,
    final RegionInfo regionInfo, final RegionState.State regionState) {
    if (serverName == null || regionInfo == null) { return null; }

    if (regionState != RegionState.State.OPEN) {
      // region is assigned to RS, but RS knows nothing of it. don't bother with a link.
      return serverName.getServerName();
    }

    final String socketAddress = serverName.getHostname() + ":" + rsInfoPort;
    final String URI = "//" + socketAddress + "/region.jsp"
      + "?name=" + regionInfo.getEncodedName();
    return "" + serverName.getServerName() + "";
  }
%>
<%
  final String ZEROMB = "0 MB";
  HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
  Configuration conf = master.getConfiguration();
  String fqtn = request.getParameter("name");
  final String escaped_fqtn = StringEscapeUtils.escapeHtml4(fqtn);
  Table table;
  boolean withReplica = false;
  boolean showFragmentation = conf.getBoolean("hbase.master.ui.fragmentation.enabled", false);
  boolean readOnly = !InfoServer.canUserModifyUI(request, getServletContext(), conf);
  int numMetaReplicas =
    master.getTableDescriptors().get(TableName.META_TABLE_NAME).getRegionReplication();
  Map frags = null;
  if (showFragmentation) {
    frags = FSUtils.getTableFragmentation(master);
  }
  boolean quotasEnabled = conf.getBoolean("hbase.quota.enabled", false);
  String action = request.getParameter("action");
  String key = request.getParameter("key");
  String left = request.getParameter("left");
  String right = request.getParameter("right");
  long totalStoreFileSizeMB = 0;

  final String numRegionsParam = request.getParameter("numRegions");
  // By default, the page render up to 10000 regions to improve the page load time
  int numRegionsToRender = 10000;
  if (numRegionsParam != null) {
    // either 'all' or a number
    if (numRegionsParam.equals("all")) {
      numRegionsToRender = -1;
    } else {
      try {
        numRegionsToRender = Integer.parseInt(numRegionsParam);
      } catch (NumberFormatException ex) {
        // ignore
      }
    }
  }
  int numRegions = 0;

  String pageTitle;
  if ( !readOnly && action != null ) {
    pageTitle = "HBase Master: " + StringEscapeUtils.escapeHtml4(master.getServerName().toString());
  } else {
    pageTitle = "Table: " + escaped_fqtn;
  }
  pageContext.setAttribute("pageTitle", pageTitle);
  final AsyncConnection connection = ConnectionFactory.createAsyncConnection(master.getConfiguration()).get();
  final AsyncAdmin admin = connection.getAdminBuilder()
    .setOperationTimeout(5, TimeUnit.SECONDS)
    .build();
  final MetaBrowser metaBrowser = new MetaBrowser(connection, request);
%>


  


<%
  if (fqtn != null && master.isInitialized()) {
    try {
      table = master.getConnection().getTable(TableName.valueOf(fqtn));
      if (table.getTableDescriptor().getRegionReplication() > 1) {
        withReplica = true;
      }
      if ( !readOnly && action != null ) {
%>


<% if (action.equals("split")) { if (key != null && key.length() > 0) { admin.split(TableName.valueOf(fqtn), Bytes.toBytes(key)); } else { admin.split(TableName.valueOf(fqtn)); } %> Split request accepted. <% } else if (action.equals("compact")) { if (key != null && key.length() > 0) { List regions = admin.getRegions(TableName.valueOf(fqtn)).get(); byte[] row = Bytes.toBytes(key); for (RegionInfo region : regions) { if (region.containsRow(row)) { admin.compactRegion(region.getRegionName()); } } } else { admin.compact(TableName.valueOf(fqtn)); } %> Compact request accepted. <% } else if (action.equals("merge")) { if (left != null && left.length() > 0 && right != null && right.length() > 0) { admin.mergeRegions(Bytes.toBytesBinary(left), Bytes.toBytesBinary(right), false); } %> Merge request accepted. <% } %>

<% } else { %>
<% if(fqtn.equals(TableName.META_TABLE_NAME.getNameAsString())) { %>

Table Regions

<% if (withReplica) { %> <% } %> <% // NOTE: Presumes meta with one or more replicas for (int j = 0; j < numMetaReplicas; j++) { RegionInfo meta = RegionReplicaUtil.getRegionInfoForReplica( RegionInfoBuilder.FIRST_META_REGIONINFO, j); ServerName metaLocation = MetaTableLocator.waitMetaRegionLocation(master.getZooKeeper(), j, 1); for (int i = 0; i < 1; i++) { String hostAndPort = ""; String readReq = "N/A"; String writeReq = "N/A"; String fileSize = ZEROMB; String fileCount = "N/A"; String memSize = ZEROMB; if (metaLocation != null) { ServerMetrics sl = master.getServerManager().getLoad(metaLocation); // The host name portion should be safe, but I don't know how we handle IDNs so err on the side of failing safely. hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation); if (sl != null) { Map map = sl.getRegionMetrics(); if (map.containsKey(meta.getRegionName())) { RegionMetrics load = map.get(meta.getRegionName()); readReq = String.format("%,1d", load.getReadRequestCount()); writeReq = String.format("%,1d", load.getWriteRequestCount()); double rSize = load.getStoreFileSize().get(Size.Unit.BYTE); if (rSize > 0) { fileSize = StringUtils.byteDesc((long) rSize); } fileCount = String.format("%,1d", load.getStoreFileCount()); double mSize = load.getMemStoreSize().get(Size.Unit.BYTE); if (mSize > 0) { memSize = StringUtils.byteDesc((long)mSize); } } } } %> <% if (withReplica) { %> <% } %> <% } %> <%} %>
Name Region Server ReadRequests WriteRequests StorefileSize Num.Storefiles MemSize Start Key End KeyReplicaID
<%= escapeXml(meta.getRegionNameAsString()) %> <%= StringEscapeUtils.escapeHtml4(hostAndPort) %> <%= readReq%> <%= writeReq%> <%= fileSize%> <%= fileCount%> <%= memSize%> <%= escapeXml(Bytes.toString(meta.getStartKey())) %> <%= escapeXml(Bytes.toString(meta.getEndKey())) %><%= meta.getReplicaId() %>
<% // NOTE: Presumes meta with one or more replicas for (int j = 0; j < numMetaReplicas; j++) { RegionInfo meta = RegionReplicaUtil.getRegionInfoForReplica( RegionInfoBuilder.FIRST_META_REGIONINFO, j); ServerName metaLocation = MetaTableLocator.waitMetaRegionLocation(master.getZooKeeper(), j, 1); for (int i = 0; i < 1; i++) { String hostAndPort = ""; float locality = 0.0f; float localityForSsd = 0.0f; if (metaLocation != null) { ServerMetrics sl = master.getServerManager().getLoad(metaLocation); hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation); if (sl != null) { Map map = sl.getRegionMetrics(); if (map.containsKey(meta.getRegionName())) { RegionMetrics load = map.get(meta.getRegionName()); locality = load.getDataLocality(); localityForSsd = load.getDataLocalityForSsd(); } } } %> <% } %> <%} %>
Name Region Server Locality LocalityForSsd
<%= escapeXml(meta.getRegionNameAsString()) %> <%= StringEscapeUtils.escapeHtml4(hostAndPort) %> <%= locality%> <%= localityForSsd%>
<% // NOTE: Presumes meta with one or more replicas for (int j = 0; j < numMetaReplicas; j++) { RegionInfo meta = RegionReplicaUtil.getRegionInfoForReplica( RegionInfoBuilder.FIRST_META_REGIONINFO, j); ServerName metaLocation = MetaTableLocator.waitMetaRegionLocation(master.getZooKeeper(), j, 1); for (int i = 0; i < 1; i++) { String hostAndPort = ""; long compactingCells = 0; long compactedCells = 0; String compactionProgress = ""; if (metaLocation != null) { ServerMetrics sl = master.getServerManager().getLoad(metaLocation); hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation); if (sl != null) { Map map = sl.getRegionMetrics(); if (map.containsKey(meta.getRegionName())) { RegionMetrics load = map.get(meta.getRegionName()); compactingCells = load.getCompactingCellCount(); compactedCells = load.getCompactedCellCount(); if (compactingCells > 0) { compactionProgress = String.format("%.2f", 100 * ((float) compactedCells / compactingCells)) + "%"; } } } } %> <% } %> <%} %>
Name Region Server Num. Compacting Cells Num. Compacted Cells Remaining Cells Compaction Progress
<%= escapeXml(meta.getRegionNameAsString()) %> <%= StringEscapeUtils.escapeHtml4(hostAndPort) %> <%= String.format("%,1d", compactingCells)%> <%= String.format("%,1d", compactedCells)%> <%= String.format("%,1d", compactingCells - compactedCells)%> <%= compactionProgress%>

Meta Entries

<% if (!metaBrowser.getErrorMessages().isEmpty()) { for (final String errorMessage : metaBrowser.getErrorMessages()) { %> <% } } String regionInfoColumnName = HConstants.CATALOG_FAMILY_STR + ":" + HConstants.REGIONINFO_QUALIFIER_STR; String serverColumnName = HConstants.CATALOG_FAMILY_STR + ":" + HConstants.SERVER_QUALIFIER_STR; String startCodeColumnName = HConstants.CATALOG_FAMILY_STR + ":" + HConstants.STARTCODE_QUALIFIER_STR; String serverNameColumnName = HConstants.CATALOG_FAMILY_STR + ":" + HConstants.SERVERNAME_QUALIFIER_STR; String seqNumColumnName = HConstants.CATALOG_FAMILY_STR + ":" + HConstants.SEQNUM_QUALIFIER_STR; %>
<% final boolean metaScanHasMore; byte[] lastRow = null; try (final MetaBrowser.Results results = metaBrowser.getResults()) { for (final RegionReplicaInfo regionReplicaInfo : results) { lastRow = Optional.ofNullable(regionReplicaInfo) .map(RegionReplicaInfo::getRow) .orElse(null); if (regionReplicaInfo == null) { %> <% continue; } final String regionNameDisplay = regionReplicaInfo.getRegionName() != null ? Bytes.toStringBinary(regionReplicaInfo.getRegionName()) : ""; final String startKeyDisplay = regionReplicaInfo.getStartKey() != null ? Bytes.toStringBinary(regionReplicaInfo.getStartKey()) : ""; final String endKeyDisplay = regionReplicaInfo.getEndKey() != null ? Bytes.toStringBinary(regionReplicaInfo.getEndKey()) : ""; final String replicaIdDisplay = regionReplicaInfo.getReplicaId() != null ? regionReplicaInfo.getReplicaId().toString() : ""; final String regionStateDisplay = regionReplicaInfo.getRegionState() != null ? regionReplicaInfo.getRegionState().toString() : ""; final RegionInfo regionInfo = regionReplicaInfo.getRegionInfo(); final ServerName serverName = regionReplicaInfo.getServerName(); final RegionState.State regionState = regionReplicaInfo.getRegionState(); final int rsPort = master.getRegionServerInfoPort(serverName); final long seqNum = regionReplicaInfo.getSeqNum(); final String regionSpanFormat = "%s"; final String targetServerName = regionReplicaInfo.getTargetServerName().toString(); final Map mergeRegions = regionReplicaInfo.getMergeRegionInfo(); final String mergeRegionNames = (mergeRegions == null) ? "" : mergeRegions.entrySet().stream() .map(entry -> String.format(regionSpanFormat, entry.getKey(), entry.getValue().getRegionNameAsString())) .collect(Collectors.joining("
")); final Map splitRegions = regionReplicaInfo.getSplitRegionInfo(); final String splitName = (splitRegions == null) ? "" : splitRegions.entrySet().stream() .map(entry -> String.format(regionSpanFormat, entry.getKey(), entry.getValue().getRegionNameAsString())) .collect(Collectors.joining("
")); %>
<% } metaScanHasMore = results.hasMoreResults(); } %>
RegionName Start Key End Key Replica ID RegionState Server Sequence Number Target Server info:merge* info:split*
Null result
<%= regionNameDisplay %> <%= startKeyDisplay %> <%= endKeyDisplay %> <%= replicaIdDisplay %> <%= regionStateDisplay %> "><%= buildRegionServerLink(serverName, rsPort, regionInfo, regionState) %> <%= seqNum %> <%= targetServerName %> <%= mergeRegionNames %> <%= splitName %>
  • > aria-label="Next">
aria-describedby="scan-limit" style="display:inline; width:auto" /> aria-describedby="scan-filter-table" style="display:inline; width:auto" />
<%} else { RegionStates states = master.getAssignmentManager().getRegionStates(); Map> regionStates = states.getRegionByStateOfTable(table.getName()); Map stateMap = new HashMap<>(); for (RegionState.State regionState : regionStates.keySet()) { for (RegionInfo regionInfo : regionStates.get(regionState)) { stateMap.put(regionInfo.getEncodedName(), regionState); } } RegionLocator r = master.getConnection().getRegionLocator(table.getName()); try { %>

Table Attributes

<% if (showFragmentation) { %> <% } %> <% if (quotasEnabled) { TableName tn = TableName.valueOf(fqtn); SpaceQuotaSnapshot masterSnapshot = null; Quotas quota = QuotaTableUtil.getTableQuota(master.getConnection(), tn); if (quota == null || !quota.hasSpace()) { quota = QuotaTableUtil.getNamespaceQuota(master.getConnection(), tn.getNamespaceAsString()); if (quota != null) { masterSnapshot = master.getQuotaObserverChore().getNamespaceQuotaSnapshots() .get(tn.getNamespaceAsString()); } } else { masterSnapshot = master.getQuotaObserverChore().getTableQuotaSnapshots().get(tn); } if (quota != null && quota.hasSpace()) { SpaceQuota spaceQuota = quota.getSpace(); %> <% } if (quota != null && quota.hasThrottle()) { List throttles = QuotaSettingsFactory.fromTableThrottles(table.getName(), quota.getThrottle()); if (throttles.size() > 0) { %> <% } } } %>
Attribute Name Value Description
Enabled <%= master.getTableStateManager().isTableState(table.getName(), TableState.State.ENABLED) %> Is the table enabled
Compaction <% if (master.getTableStateManager().isTableState(table.getName(), TableState.State.ENABLED)) { CompactionState compactionState = master.getCompactionState(table.getName()); %><%= compactionState==null?"UNKNOWN":compactionState %><% } else { %><%= CompactionState.NONE %><% } %> Is the table compacting
Fragmentation <%= frags.get(fqtn) != null ? frags.get(fqtn).intValue() + "%" : "n/a" %> How fragmented is the table. After a major compaction it is 0%.
Space Quota <% if (masterSnapshot != null) { %> <% } %>
Property Value
Limit <%= StringUtils.byteDesc(spaceQuota.getSoftLimit()) %>
Policy <%= spaceQuota.getViolationPolicy() %>
Usage <%= StringUtils.byteDesc(masterSnapshot.getUsage()) %>
State <%= masterSnapshot.getQuotaStatus().isInViolation() ? "In Violation" : "In Observance" %>
Information about a Space Quota on this table, if set.
Throttle Quota <% for (ThrottleSettings throttle : throttles) { %> <% } %>
Limit Type TimeUnit Scope
<%= throttle.getSoftLimit() %> <%= throttle.getThrottleType() %> <%= throttle.getTimeUnit() %> <%= throttle.getQuotaScope() %>
Information about a Throttle Quota on this table, if set.

Table Schema

<% ColumnFamilyDescriptor[] families = table.getDescriptor().getColumnFamilies(); Set familyKeySet = new HashSet<>(); for (ColumnFamilyDescriptor family: families) { familyKeySet.addAll(family.getValues().keySet()); } %> <% for (ColumnFamilyDescriptor family: families) { %> <% } %> <% for (Bytes familyKey: familyKeySet) { %> <% for (ColumnFamilyDescriptor family: families) { String familyValue = "-"; if(family.getValues().containsKey(familyKey)){ familyValue = family.getValues().get(familyKey).toString(); } %> <% } %> <% } %>
Property \ Column Family Name <%= StringEscapeUtils.escapeHtml4(family.getNameAsString()) %>
<%= StringEscapeUtils.escapeHtml4(familyKey.toString()) %> <%= StringEscapeUtils.escapeHtml4(familyValue) %>
<% long totalReadReq = 0; long totalWriteReq = 0; long totalSize = 0; long totalStoreFileCount = 0; long totalMemSize = 0; long totalCompactingCells = 0; long totalCompactedCells = 0; long totalBlocksTotalWeight = 0; long totalBlocksLocalWeight = 0; long totalBlocksLocalWithSsdWeight = 0; String totalCompactionProgress = ""; String totalMemSizeStr = ZEROMB; String totalSizeStr = ZEROMB; String totalLocality = ""; String totalLocalityForSsd = ""; String urlRegionServer = null; Map regDistribution = new TreeMap<>(); Map primaryRegDistribution = new TreeMap<>(); List regions = r.getAllRegionLocations(); Map regionsToLoad = new LinkedHashMap<>(); Map regionsToServer = new LinkedHashMap<>(); for (HRegionLocation hriEntry : regions) { RegionInfo regionInfo = hriEntry.getRegionInfo(); ServerName addr = hriEntry.getServerName(); regionsToServer.put(regionInfo, addr); if (addr != null) { ServerMetrics sl = master.getServerManager().getLoad(addr); if (sl != null) { RegionMetrics regionMetrics = sl.getRegionMetrics().get(regionInfo.getRegionName()); regionsToLoad.put(regionInfo, regionMetrics); if (regionMetrics != null) { totalReadReq += regionMetrics.getReadRequestCount(); totalWriteReq += regionMetrics.getWriteRequestCount(); totalSize += regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE); totalStoreFileCount += regionMetrics.getStoreFileCount(); totalMemSize += regionMetrics.getMemStoreSize().get(Size.Unit.MEGABYTE); totalStoreFileSizeMB += regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE); totalCompactingCells += regionMetrics.getCompactingCellCount(); totalCompactedCells += regionMetrics.getCompactedCellCount(); totalBlocksTotalWeight += regionMetrics.getBlocksTotalWeight(); totalBlocksLocalWeight += regionMetrics.getBlocksLocalWeight(); totalBlocksLocalWithSsdWeight += regionMetrics.getBlocksLocalWithSsdWeight(); } else { RegionMetrics load0 = getEmptyRegionMetrics(regionInfo); regionsToLoad.put(regionInfo, load0); } } else{ RegionMetrics load0 = getEmptyRegionMetrics(regionInfo); regionsToLoad.put(regionInfo, load0); } } else { RegionMetrics load0 = getEmptyRegionMetrics(regionInfo); regionsToLoad.put(regionInfo, load0); } } if (totalSize > 0) { totalSizeStr = StringUtils.byteDesc(totalSize*1024l*1024); } if (totalMemSize > 0) { totalMemSizeStr = StringUtils.byteDesc(totalMemSize*1024l*1024); } if (totalCompactingCells > 0) { totalCompactionProgress = String.format("%.2f", 100 * ((float) totalCompactedCells / totalCompactingCells)) + "%"; } if (totalBlocksTotalWeight > 0) { totalLocality = String.format("%.1f", ((float) totalBlocksLocalWeight / totalBlocksTotalWeight)); totalLocalityForSsd = String.format("%.1f", ((float) totalBlocksLocalWithSsdWeight / totalBlocksTotalWeight)); } if(regions != null && regions.size() > 0) { %>

Table Regions

<% if (withReplica) { %> <% } %> <% List> entryList = new ArrayList<>(regionsToLoad.entrySet()); numRegions = regions.size(); int numRegionsRendered = 0; // render all regions if (numRegionsToRender < 0) { numRegionsToRender = numRegions; } for (Map.Entry hriEntry : entryList) { RegionInfo regionInfo = hriEntry.getKey(); ServerName addr = regionsToServer.get(regionInfo); RegionMetrics load = hriEntry.getValue(); String readReq = "N/A"; String writeReq = "N/A"; String regionSize = ZEROMB; String fileCount = "N/A"; String memSize = ZEROMB; String state = "N/A"; if (load != null) { readReq = String.format("%,1d", load.getReadRequestCount()); writeReq = String.format("%,1d", load.getWriteRequestCount()); double rSize = load.getStoreFileSize().get(Size.Unit.BYTE); if (rSize > 0) { regionSize = StringUtils.byteDesc((long)rSize); } fileCount = String.format("%,1d", load.getStoreFileCount()); double mSize = load.getMemStoreSize().get(Size.Unit.BYTE); if (mSize > 0) { memSize = StringUtils.byteDesc((long)mSize); } } if (stateMap.containsKey(regionInfo.getEncodedName())) { state = stateMap.get(regionInfo.getEncodedName()).toString(); } if (addr != null) { ServerMetrics sl = master.getServerManager().getLoad(addr); // This port might be wrong if RS actually ended up using something else. urlRegionServer = "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status"; if(sl != null) { Integer i = regDistribution.get(addr); if (null == i) i = Integer.valueOf(0); regDistribution.put(addr, i + 1); if (withReplica && RegionReplicaUtil.isDefaultReplica(regionInfo.getReplicaId())) { i = primaryRegDistribution.get(addr); if (null == i) i = Integer.valueOf(0); primaryRegDistribution.put(addr, i+1); } } } if (numRegionsRendered < numRegionsToRender) { numRegionsRendered++; %> <% if (urlRegionServer != null) { %> <% } else { %> <% } %> <% if (withReplica) { %> <% } %> <% } %> <% } %>
Name(<%= String.format("%,1d", regions.size())%>) Region Server ReadRequests
(<%= String.format("%,1d", totalReadReq)%>)
WriteRequests
(<%= String.format("%,1d", totalWriteReq)%>)
StorefileSize
(<%= totalSizeStr %>)
Num.Storefiles
(<%= String.format("%,1d", totalStoreFileCount)%>)
MemSize
(<%= totalMemSizeStr %>)
Start Key End Key Region StateReplicaID
<%= escapeXml(Bytes.toStringBinary(regionInfo.getRegionName())) %> <%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %> not deployed<%= readReq%> <%= writeReq%> <%= regionSize%> <%= fileCount%> <%= memSize%> <%= escapeXml(Bytes.toStringBinary(regionInfo.getStartKey()))%> <%= escapeXml(Bytes.toStringBinary(regionInfo.getEndKey()))%> <%= state%><%= regionInfo.getReplicaId() %>
<% if (numRegions > numRegionsRendered) { String allRegionsUrl = "?name=" + URLEncoder.encode(fqtn,"UTF-8") + "&numRegions=all"; %>

This table has <%= numRegions %> regions in total, in order to improve the page load time, only <%= numRegionsRendered %> regions are displayed here, click here to see all regions.

<% } %>
<% numRegionsRendered = 0; for (Map.Entry hriEntry : entryList) { RegionInfo regionInfo = hriEntry.getKey(); ServerName addr = regionsToServer.get(regionInfo); RegionMetrics load = hriEntry.getValue(); float locality = 0.0f; float localityForSsd = 0.0f; String state = "N/A"; if (load != null) { locality = load.getDataLocality(); localityForSsd = load.getDataLocalityForSsd(); } if (addr != null) { // This port might be wrong if RS actually ended up using something else. urlRegionServer = "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status"; } if (numRegionsRendered < numRegionsToRender) { numRegionsRendered++; %> <% if (urlRegionServer != null) { %> <% } else { %> <% } %> <% } %> <% } %>
Name(<%= String.format("%,1d", regions.size())%>) Region Server Locality
(<%= totalLocality %>)
LocalityForSsd
(<%= totalLocalityForSsd %>)
<%= escapeXml(Bytes.toStringBinary(regionInfo.getRegionName())) %> <%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %> not deployed<%= locality%> <%= localityForSsd%>
<% numRegionsRendered = 0; for (Map.Entry hriEntry : entryList) { RegionInfo regionInfo = hriEntry.getKey(); ServerName addr = regionsToServer.get(regionInfo); RegionMetrics load = hriEntry.getValue(); long compactingCells = 0; long compactedCells = 0; String compactionProgress = ""; if (load != null) { compactingCells = load.getCompactingCellCount(); compactedCells = load.getCompactedCellCount(); if (compactingCells > 0) { compactionProgress = String.format("%.2f", 100 * ((float) compactedCells / compactingCells)) + "%"; } } if (addr != null) { // This port might be wrong if RS actually ended up using something else. urlRegionServer = "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status"; } if (numRegionsRendered < numRegionsToRender) { numRegionsRendered++; %> <% if (urlRegionServer != null) { %> <% } else { %> <% } %> <% } %> <% } %>
Name(<%= String.format("%,1d", regions.size())%>) Region Server Num. Compacting Cells
(<%= String.format("%,1d", totalCompactingCells)%>)
Num. Compacted Cells
(<%= String.format("%,1d", totalCompactedCells)%>)
Remaining Cells
(<%= String.format("%,1d", totalCompactingCells-totalCompactedCells)%>)
Compaction Progress
(<%= totalCompactionProgress %>)
<%= escapeXml(Bytes.toStringBinary(regionInfo.getRegionName())) %> <%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %> not deployed<%= String.format("%,1d", compactingCells)%> <%= String.format("%,1d", compactedCells)%> <%= String.format("%,1d", compactingCells - compactedCells)%> <%= compactionProgress%>
<% if (numRegions > numRegionsRendered) { String allRegionsUrl = "?name=" + URLEncoder.encode(fqtn,"UTF-8") + "&numRegions=all"; %>

This table has <%= numRegions %> regions in total, in order to improve the page load time, only <%= numRegionsRendered %> regions are displayed here, click here to see all regions.

<% } %>

Regions by Region Server

<% if (withReplica) { %> <% } else { %>
Region ServerRegion CountPrimary Region Count
<% } %> <% for (Map.Entry rdEntry : regDistribution.entrySet()) { ServerName addr = rdEntry.getKey(); String url = "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status"; %> <% if (withReplica) { %> <% } %> <% } %>
Region ServerRegion Count
<%= StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %> <%= rdEntry.getValue()%><%= primaryRegDistribution.get(addr)%>
<% } } catch(Exception ex) { for(StackTraceElement element : ex.getStackTrace()) { %><%= StringEscapeUtils.escapeHtml4(element.toString()) %><% } } finally { connection.close(); } } // end else %>

Table Stats

<% } else { %> 0 MB <% } %>
Name Value Description
Size <% if (totalStoreFileSizeMB > 0) { %> <%= StringUtils.TraditionalBinaryPrefix. long2String(totalStoreFileSizeMB * 1024 * 1024, "B", 2)%>Total size of store files
<% if (!readOnly) { %>


Actions:

This action will force a compaction of all regions of the table, or, if a key is supplied, only the region containing the given key.
This action will force a split of all eligible regions of the table, or, if a key is supplied, only the region containing the given key. An eligible region is one that does not contain any references to other regions. Split requests for noneligible regions will be ignored.
This action will merge two regions of the table, Merge requests for noneligible regions will be ignored.

<% } %>
<% } } catch(TableNotFoundException e) { %>


Go Back

<% } catch(IllegalArgumentException e) { %>


Go Back

<% } } else { // handle the case for fqtn is null or master is not initialized with error message + redirect %>


<% } %>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy