|
@@ -0,0 +1,310 @@
|
|
|
|
+/**
|
|
|
|
+ * 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
|
|
|
|
+ * <p>
|
|
|
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
+ * <p>
|
|
|
|
+ * 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.
|
|
|
|
+ */
|
|
|
|
+package org.apache.hadoop.yarn.server.router.webapp.dao;
|
|
|
|
+
|
|
|
|
+import org.apache.hadoop.util.StringUtils;
|
|
|
|
+import org.apache.hadoop.yarn.api.records.Resource;
|
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
|
|
|
|
+import org.apache.hadoop.yarn.util.resource.Resources;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+
|
|
|
|
+import javax.xml.bind.annotation.XmlAccessType;
|
|
|
|
+import javax.xml.bind.annotation.XmlAccessorType;
|
|
|
|
+import javax.xml.bind.annotation.XmlRootElement;
|
|
|
|
+
|
|
|
|
+@XmlRootElement
|
|
|
|
+@XmlAccessorType(XmlAccessType.FIELD)
|
|
|
|
+public class RouterClusterMetrics {
|
|
|
|
+
|
|
|
|
+ protected static final long BYTES_IN_MB = 1024 * 1024;
|
|
|
|
+ private static final Logger LOG = LoggerFactory.getLogger(RouterClusterMetrics.class);
|
|
|
|
+
|
|
|
|
+ // Application Information.
|
|
|
|
+ private String appsSubmitted = "N/A";
|
|
|
|
+ private String appsCompleted = "N/A";
|
|
|
|
+ private String appsPending = "N/A";
|
|
|
|
+ private String appsRunning = "N/A";
|
|
|
|
+ private String appsFailed = "N/A";
|
|
|
|
+ private String appsKilled = "N/A";
|
|
|
|
+
|
|
|
|
+ // Memory Information.
|
|
|
|
+ private String totalMemory = "N/A";
|
|
|
|
+ private String reservedMemory = "N/A";
|
|
|
|
+ private String availableMemory = "N/A";
|
|
|
|
+ private String allocatedMemory = "N/A";
|
|
|
|
+ private String pendingMemory = "N/A";
|
|
|
|
+
|
|
|
|
+ // VirtualCores Information.
|
|
|
|
+ private String reservedVirtualCores = "N/A";
|
|
|
|
+ private String availableVirtualCores = "N/A";
|
|
|
|
+ private String allocatedVirtualCores = "N/A";
|
|
|
|
+ private String pendingVirtualCores = "N/A";
|
|
|
|
+ private String totalVirtualCores = "N/A";
|
|
|
|
+
|
|
|
|
+ // Resources Information.
|
|
|
|
+ private String usedResources = "N/A";
|
|
|
|
+ private String totalResources = "N/A";
|
|
|
|
+ private String reservedResources = "N/A";
|
|
|
|
+ private String allocatedContainers = "N/A";
|
|
|
|
+
|
|
|
|
+ // Resource Percent Information.
|
|
|
|
+ private String utilizedMBPercent = "N/A";
|
|
|
|
+ private String utilizedVirtualCoresPercent = "N/A";
|
|
|
|
+
|
|
|
|
+ // Node Information.
|
|
|
|
+ private String activeNodes = "N/A";
|
|
|
|
+ private String decommissioningNodes = "N/A";
|
|
|
|
+ private String decommissionedNodes = "N/A";
|
|
|
|
+ private String lostNodes = "N/A";
|
|
|
|
+ private String unhealthyNodes = "N/A";
|
|
|
|
+ private String rebootedNodes = "N/A";
|
|
|
|
+ private String shutdownNodes = "N/A";
|
|
|
|
+
|
|
|
|
+ public RouterClusterMetrics() {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public RouterClusterMetrics(ClusterMetricsInfo metrics) {
|
|
|
|
+ if (metrics != null) {
|
|
|
|
+ // Application Information Conversion.
|
|
|
|
+ conversionApplicationInformation(metrics);
|
|
|
|
+
|
|
|
|
+ // Memory Information Conversion.
|
|
|
|
+ conversionMemoryInformation(metrics);
|
|
|
|
+
|
|
|
|
+ // Resources Information Conversion.
|
|
|
|
+ conversionResourcesInformation(metrics);
|
|
|
|
+
|
|
|
|
+ // Percent Information Conversion.
|
|
|
|
+ conversionResourcesPercent(metrics);
|
|
|
|
+
|
|
|
|
+ // Node Information Conversion.
|
|
|
|
+ conversionNodeInformation(metrics);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Get Key Metric Information
|
|
|
|
+ public String getAppsSubmitted() {
|
|
|
|
+ return appsSubmitted;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAppsCompleted() {
|
|
|
|
+ return appsCompleted;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAppsPending() {
|
|
|
|
+ return appsPending;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAppsRunning() {
|
|
|
|
+ return appsRunning;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAppsFailed() {
|
|
|
|
+ return appsFailed;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAppsKilled() {
|
|
|
|
+ return appsKilled;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getTotalMemory() {
|
|
|
|
+ return totalMemory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getReservedMemory() {
|
|
|
|
+ return reservedMemory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAvailableMemory() {
|
|
|
|
+ return availableMemory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAllocatedMemory() {
|
|
|
|
+ return allocatedMemory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getPendingMemory() {
|
|
|
|
+ return pendingMemory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getReservedVirtualCores() {
|
|
|
|
+ return reservedVirtualCores;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAvailableVirtualCores() {
|
|
|
|
+ return availableVirtualCores;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAllocatedVirtualCores() {
|
|
|
|
+ return allocatedVirtualCores;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getPendingVirtualCores() {
|
|
|
|
+ return pendingVirtualCores;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getTotalVirtualCores() {
|
|
|
|
+ return totalVirtualCores;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getUsedResources() {
|
|
|
|
+ return usedResources;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getTotalResources() {
|
|
|
|
+ return totalResources;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getReservedResources() {
|
|
|
|
+ return reservedResources;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getAllocatedContainers() {
|
|
|
|
+ return allocatedContainers;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getUtilizedMBPercent() {
|
|
|
|
+ return utilizedMBPercent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getUtilizedVirtualCoresPercent() {
|
|
|
|
+ return utilizedVirtualCoresPercent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getActiveNodes() {
|
|
|
|
+ return activeNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getDecommissioningNodes() {
|
|
|
|
+ return decommissioningNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getDecommissionedNodes() {
|
|
|
|
+ return decommissionedNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getLostNodes() {
|
|
|
|
+ return lostNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getUnhealthyNodes() {
|
|
|
|
+ return unhealthyNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getRebootedNodes() {
|
|
|
|
+ return rebootedNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getShutdownNodes() {
|
|
|
|
+ return shutdownNodes;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Metric Information Conversion
|
|
|
|
+ public void conversionApplicationInformation(ClusterMetricsInfo metrics) {
|
|
|
|
+ try {
|
|
|
|
+ // Application Information.
|
|
|
|
+ this.appsSubmitted = String.valueOf(metrics.getAppsSubmitted());
|
|
|
|
+ this.appsCompleted = String.valueOf(metrics.getAppsCompleted() +
|
|
|
|
+ metrics.getAppsFailed() + metrics.getAppsKilled());
|
|
|
|
+ this.appsPending = String.valueOf(metrics.getAppsPending());
|
|
|
|
+ this.appsRunning = String.valueOf(metrics.getAppsRunning());
|
|
|
|
+ this.appsFailed = String.valueOf(metrics.getAppsFailed());
|
|
|
|
+ this.appsKilled = String.valueOf(metrics.getAppsKilled());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ LOG.error("conversionApplicationInformation error.", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Metric Memory Information
|
|
|
|
+ public void conversionMemoryInformation(ClusterMetricsInfo metrics) {
|
|
|
|
+ try {
|
|
|
|
+ // Memory Information.
|
|
|
|
+ this.totalMemory = StringUtils.byteDesc(metrics.getTotalMB() * BYTES_IN_MB);
|
|
|
|
+ this.reservedMemory = StringUtils.byteDesc(metrics.getReservedMB() * BYTES_IN_MB);
|
|
|
|
+ this.availableMemory = StringUtils.byteDesc(metrics.getAvailableMB() * BYTES_IN_MB);
|
|
|
|
+ this.allocatedMemory = StringUtils.byteDesc(metrics.getAllocatedMB() * BYTES_IN_MB);
|
|
|
|
+ this.pendingMemory = StringUtils.byteDesc(metrics.getPendingMB() * BYTES_IN_MB);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ LOG.error("conversionMemoryInformation error.", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // ResourcesInformation Conversion
|
|
|
|
+ public void conversionResourcesInformation(ClusterMetricsInfo metrics) {
|
|
|
|
+ try {
|
|
|
|
+ // Parse resource information from metrics.
|
|
|
|
+ Resource metricUsedResources;
|
|
|
|
+ Resource metricTotalResources;
|
|
|
|
+ Resource metricReservedResources;
|
|
|
|
+
|
|
|
|
+ int metricAllocatedContainers;
|
|
|
|
+ if (metrics.getCrossPartitionMetricsAvailable()) {
|
|
|
|
+ metricAllocatedContainers = metrics.getTotalAllocatedContainersAcrossPartition();
|
|
|
|
+ metricUsedResources = metrics.getTotalUsedResourcesAcrossPartition().getResource();
|
|
|
|
+ metricTotalResources = metrics.getTotalClusterResourcesAcrossPartition().getResource();
|
|
|
|
+ metricReservedResources = metrics.getTotalReservedResourcesAcrossPartition().getResource();
|
|
|
|
+ // getTotalUsedResourcesAcrossPartition includes reserved resources.
|
|
|
|
+ Resources.subtractFrom(metricUsedResources, metricReservedResources);
|
|
|
|
+ } else {
|
|
|
|
+ metricAllocatedContainers = metrics.getContainersAllocated();
|
|
|
|
+ metricUsedResources = Resource.newInstance(metrics.getAllocatedMB(),
|
|
|
|
+ (int) metrics.getAllocatedVirtualCores());
|
|
|
|
+ metricTotalResources = Resource.newInstance(metrics.getTotalMB(),
|
|
|
|
+ (int) metrics.getTotalVirtualCores());
|
|
|
|
+ metricReservedResources = Resource.newInstance(metrics.getReservedMB(),
|
|
|
|
+ (int) metrics.getReservedVirtualCores());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Convert to standard format.
|
|
|
|
+ usedResources = metricUsedResources.getFormattedString();
|
|
|
|
+ totalResources = metricTotalResources.getFormattedString();
|
|
|
|
+ reservedResources = metricReservedResources.getFormattedString();
|
|
|
|
+ allocatedContainers = String.valueOf(metricAllocatedContainers);
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ LOG.error("conversionResourcesInformation error.", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // ResourcesPercent Conversion
|
|
|
|
+ public void conversionResourcesPercent(ClusterMetricsInfo metrics) {
|
|
|
|
+ try {
|
|
|
|
+ this.utilizedMBPercent = String.valueOf(metrics.getUtilizedMBPercent());
|
|
|
|
+ this.utilizedVirtualCoresPercent = String.valueOf(metrics.getUtilizedVirtualCoresPercent());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ LOG.error("conversionResourcesPercent error.", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // NodeInformation Conversion
|
|
|
|
+ public void conversionNodeInformation(ClusterMetricsInfo metrics) {
|
|
|
|
+ try {
|
|
|
|
+ this.activeNodes = String.valueOf(metrics.getActiveNodes());
|
|
|
|
+ this.decommissioningNodes = String.valueOf(metrics.getDecommissioningNodes());
|
|
|
|
+ this.decommissionedNodes = String.valueOf(metrics.getDecommissionedNodes());
|
|
|
|
+ this.lostNodes = String.valueOf(metrics.getLostNodes());
|
|
|
|
+ this.unhealthyNodes = String.valueOf(metrics.getUnhealthyNodes());
|
|
|
|
+ this.rebootedNodes = String.valueOf(metrics.getRebootedNodes());
|
|
|
|
+ this.shutdownNodes = String.valueOf(metrics.getShutdownNodes());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ LOG.error("conversionNodeInformation error.", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|