Author: mahadev
Date: Fri Jan 18 23:54:49 2013
New Revision: 1435419
URL: http://svn.apache.org/viewvc?rev=1435419&view=rev
Log:
AMBARI-1198. Ambari API Performance: Parsing of Ganglia json data is slow.
(jspeidel via mahadev)
Added:
incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia_data.txt
Removed:
incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia.json
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-agent/src/main/puppet/modules/hdp-ganglia/files/rrd.py
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceImpl.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXMetricHolder.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/TestStreamProvider.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Fri Jan 18 23:54:49 2013
@@ -43,6 +43,9 @@ Trunk (unreleased changes):
AMBARI-1181. Clean up table header UI for sorting and filter clear "x" for
Hosts table. (yusaku)
+ AMBARI-1198. Ambari API Performance: Parsing of Ganglia json data is slow.
+ (jspeidel via mahadev)
+
BUG FIXES
AMBARI-1203. mapred-site.xml default system directory is not set
Modified:
incubator/ambari/trunk/ambari-agent/src/main/puppet/modules/hdp-ganglia/files/rrd.py
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/src/main/puppet/modules/hdp-ganglia/files/rrd.py?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-agent/src/main/puppet/modules/hdp-ganglia/files/rrd.py
(original)
+++
incubator/ambari/trunk/ambari-agent/src/main/puppet/modules/hdp-ganglia/files/rrd.py
Fri Jan 18 23:54:49 2013
@@ -19,67 +19,81 @@ limitations under the License.
'''
import cgi
-#import cgitb
import os
import rrdtool
import sys
+import time
# place this script in /var/www/cgi-bin of the Ganglia collector
# requires 'yum install rrdtool-python' on the Ganglia collector
-#cgitb.enable()
-def printMetric(clusterName, hostName, metricName, file, cf, start, end,
resolution):
+def printMetric(clusterName, hostName, metricName, file, cf, start, end,
resolution, pointInTime):
if clusterName.endswith("rrds"):
clusterName = ""
args = [file, cf]
if start is not None:
- args.extend(["-s", start])
+ args.extend(["-s", start])
if end is not None:
- args.extend(["-e", end])
+ args.extend(["-e", end])
if resolution is not None:
- args.extend(["-r", resolution])
+ args.extend(["-r", resolution])
rrdMetric = rrdtool.fetch(args)
+ # ds_name
+ sys.stdout.write(rrdMetric[1][0])
+ sys.stdout.write("\n")
+
+ sys.stdout.write(clusterName)
+ sys.stdout.write("\n")
+ sys.stdout.write(hostName)
+ sys.stdout.write("\n")
+ sys.stdout.write(metricName)
+ sys.stdout.write("\n")
+
+ # write time
+ sys.stdout.write(str(rrdMetric[0][0]))
+ sys.stdout.write("\n")
+ # write step
+ sys.stdout.write(str(rrdMetric[0][2]))
+ sys.stdout.write("\n")
+
+ if not pointInTime:
+ for tuple in rrdMetric[2]:
+ if tuple[0] is not None:
+ sys.stdout.write(str(tuple[0]))
+ sys.stdout.write("\n")
+ else:
+ value = None
+ idx = -1
+ tuple = rrdMetric[2]
+ tupleLastIdx = len(tuple) * -1
+
+ while value is None and idx >= tupleLastIdx:
+ value = tuple[idx][0]
+ idx-=1
+
+ if value is not None:
+ sys.stdout.write(str(value))
+ sys.stdout.write("\n")
- time = rrdMetric[0][0]
- step = rrdMetric[0][2]
-
- sys.stdout.write(" {\n \"ds_name\":\"" + rrdMetric[1][0] +\
- "\",\n \"cluster_name\":\"" + clusterName +\
- "\",\n \"host_name\":\"" + hostName +\
- "\",\n \"metric_name\":\"" + metricName + "\",\n")
-
- firstDP = True
- sys.stdout.write(" \"datapoints\":[\n")
- for tuple in rrdMetric[2]:
- if tuple[0] is not None:
- if not firstDP:
- sys.stdout.write(",\n")
- firstDP = False
- sys.stdout.write(" [")
- sys.stdout.write(str(tuple[0]))
- sys.stdout.write(",")
- sys.stdout.write(str(time))
- sys.stdout.write("]")
- time = time + step
- sys.stdout.write("\n ]\n }")
+ sys.stdout.write("[AMBARI_DP_END]\n")
return
def stripList(l):
return([x.strip() for x in l])
-sys.stdout.write("Content-type: application/json\n\n")
-
-queryString = dict(cgi.parse_qsl(os.environ['QUERY_STRING']));
+sys.stdout.write("Content-type: text/plain\n\n")
-sys.stdout.write("[\n")
+# write start time
+sys.stdout.write(str(time.mktime(time.gmtime())))
+sys.stdout.write("\n")
-firstMetric = True
+queryString = dict(cgi.parse_qsl(os.environ['QUERY_STRING']));
if "m" in queryString:
metricParts = queryString["m"].split(",")
@@ -120,6 +134,11 @@ if "cf" in queryString:
else:
cf = "AVERAGE"
+if "pt" in queryString:
+ pointInTime = True
+else:
+ pointInTime = False
+
for cluster in clusterParts:
for path, dirs, files in os.walk(rrdPath + cluster):
pathParts = path.split("/")
@@ -127,12 +146,13 @@ for cluster in clusterParts:
for file in files:
for metric in metricParts:
if file.endswith(metric + ".rrd"):
- if not firstMetric:
- sys.stdout.write(",\n")
- printMetric(pathParts[-2], pathParts[-1], file[:-4],
os.path.join(path, file), cf, start, end, resolution)
+ printMetric(pathParts[-2], pathParts[-1], file[:-4],
+ os.path.join(path, file), cf, start, end, resolution,
pointInTime)
- firstMetric = False
+sys.stdout.write("[AMBARI_END]\n")
+# write end time
+sys.stdout.write(str(time.mktime(time.gmtime())))
+sys.stdout.write("\n")
-sys.stdout.write("\n]\n")
sys.stdout.flush
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java
Fri Jan 18 23:54:49 2013
@@ -147,6 +147,11 @@ public class QueryImpl implements Query
m_mapSubResources.putAll(m_resource.getSubResources());
}
+ if (LOG.isInfoEnabled()) {
+ //todo: include predicate info. Need to implement toString for all
predicates.
+ LOG.info("Executing resource query: " + m_resource.getIds());
+ }
+
Predicate predicate = createPredicate(m_resource);
Iterable<Resource> iterResource = getClusterController().getResources(
resourceType, createRequest(), predicate);
@@ -157,7 +162,7 @@ public class QueryImpl implements Query
// add a child node for the resource and provide a unique name. The
name is never used.
//todo: provide a more meaningful node name
TreeNode<Resource> node = tree.addChild(resource, resource.getType() +
":" + count++);
- for (Map.Entry<String, ResourceInstance> entry :
m_mapSubResources.entrySet()) {
+ for (Map.Entry<String, ResourceInstance> entry :
m_mapSubResources.entrySet()) {
String subResCategory = entry.getKey();
ResourceInstance r = entry.getValue();
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceImpl.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceImpl.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceInstanceImpl.java
Fri Jan 18 23:54:49 2013
@@ -139,7 +139,7 @@ public class ResourceInstanceImpl implem
ResourceInstanceImpl that = (ResourceInstanceImpl) o;
return m_mapResourceIds.equals(that.m_mapResourceIds) &&
- m_query.equals(that.m_query) &&
+ m_query == that.m_query &&
m_resourceDefinition.equals(that.m_resourceDefinition) &&
m_mapSubResources == null ? that.m_mapSubResources == null :
m_mapSubResources.equals(that.m_mapSubResources);
@@ -147,7 +147,7 @@ public class ResourceInstanceImpl implem
@Override
public int hashCode() {
- int result =m_query.hashCode();
+ int result = 13;
result = 31 * result + m_mapResourceIds.hashCode();
result = 31 * result + m_resourceDefinition.hashCode();
result = 31 * result + (m_mapSubResources != null ?
m_mapSubResources.hashCode() : 0);
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
Fri Jan 18 23:54:49 2013
@@ -152,4 +152,22 @@ public class GangliaMetric {
return stringBuilder.toString();
}
+
+ public static class TemporalMetric {
+ private Number m_value;
+ private Number m_time;
+
+ public TemporalMetric(Number value, Number time) {
+ m_value = value;
+ m_time = time;
+ }
+
+ public Number getValue() {
+ return m_value;
+ }
+
+ public Number getTime() {
+ return m_time;
+ }
+ }
}
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
Fri Jan 18 23:54:49 2013
@@ -22,19 +22,14 @@ import org.apache.ambari.server.controll
import org.apache.ambari.server.controller.spi.*;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.controller.utilities.StreamProvider;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.BufferedReader;
import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.*;
/**
* Abstract property provider implementation for a Ganglia source.
@@ -59,6 +54,7 @@ public abstract class GangliaPropertyPro
private final String componentNamePropertyId;
+
/**
* Map of Ganglia cluster names keyed by component type.
*/
@@ -92,7 +88,8 @@ public abstract class GangliaPropertyPro
this.hostNamePropertyId = hostNamePropertyId;
this.componentNamePropertyId = componentNamePropertyId;
- propertyIds = new HashSet<String>();
+ propertyIds = new HashSet<String>();
+
for (Map.Entry<String, Map<String, PropertyInfo>> entry :
componentPropertyInfoMap.entrySet()) {
propertyIds.addAll(entry.getValue().keySet());
}
@@ -118,9 +115,11 @@ public abstract class GangliaPropertyPro
for (Map.Entry<String, Map<TemporalInfo, RRDRequest>> clusterEntry :
requestMap.entrySet()) {
// For each request ...
for (RRDRequest rrdRequest : clusterEntry.getValue().values() ) {
+ //todo: property provider can reduce set of resources
keepers.addAll(rrdRequest.populateResources());
}
}
+ //todo: ignoring keepers returned by the provider
return resources;
}
@@ -311,6 +310,7 @@ public abstract class GangliaPropertyPro
}
else {
sb.append("&e=now");
+ sb.append("&pt=true");
}
return sb.toString();
@@ -414,31 +414,76 @@ public abstract class GangliaPropertyPro
public Collection<Resource> populateResources() throws SystemException {
String spec = getSpec(clusterName, clusterSet, hostSet,
metrics.keySet(), temporalInfo);
- Collection<Resource> populatedResources = new HashSet<Resource>();
-
+ BufferedReader reader = null;
try {
- List<GangliaMetric> gangliaMetrics = new
ObjectMapper().readValue(getStreamProvider().readFrom(spec),
- new TypeReference<List<GangliaMetric>>() {
- });
-
- if (gangliaMetrics != null) {
- for (GangliaMetric gangliaMetric : gangliaMetrics) {
-
- ResourceKey key = new ResourceKey(gangliaMetric.getHost_name(),
gangliaMetric.getCluster_name());
- Set<Resource> resourceSet = resources.get(key);
- if (resourceSet != null) {
- for (Resource resource : resourceSet) {
- populateResource(resource, gangliaMetric);
- }
+ reader = new BufferedReader(new InputStreamReader(
+ getStreamProvider().readFrom(spec)));
+
+ int startTime = convertToNumber(reader.readLine()).intValue();
+
+ String dsName = reader.readLine();
+ while(! dsName.equals("[AMBARI_END]")) {
+ GangliaMetric metric = new GangliaMetric();
+ List<GangliaMetric.TemporalMetric> listTemporalMetrics =
+ new ArrayList<GangliaMetric.TemporalMetric>();
+
+ metric.setDs_name(dsName);
+ metric.setCluster_name(reader.readLine());
+ metric.setHost_name(reader.readLine());
+ metric.setMetric_name(reader.readLine());
+
+ int time = convertToNumber(reader.readLine()).intValue();
+ int step = convertToNumber(reader.readLine()).intValue();
+
+ String val = reader.readLine();
+ while(! val.equals("[AMBARI_DP_END]")) {
+ listTemporalMetrics.add(
+ new GangliaMetric.TemporalMetric(convertToNumber(val), time));
+ time += step;
+ val = reader.readLine();
+ }
+
+ //todo: change setter in GangliaMetric to take collection
+ Number[][] datapointsArray = new
Number[listTemporalMetrics.size()][2];
+ for (int i = 0; i < listTemporalMetrics.size(); ++i) {
+ GangliaMetric.TemporalMetric m = listTemporalMetrics.get(i);
+ datapointsArray[i][0] = m.getValue();
+ datapointsArray[i][1] = m.getTime();
+ }
+ metric.setDatapoints(datapointsArray);
+
+ ResourceKey key = new ResourceKey(metric.getHost_name(),
metric.getCluster_name());
+ Set<Resource> resourceSet = resources.get(key);
+ if (resourceSet != null) {
+ for (Resource resource : resourceSet) {
+ populateResource(resource, metric);
}
}
+
+ dsName = reader.readLine();
+ }
+ int endTime = convertToNumber(reader.readLine()).intValue();
+
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Ganglia resource population time: " + (endTime -
startTime));
}
} catch (IOException e) {
if (LOG.isErrorEnabled()) {
LOG.error("Caught exception getting Ganglia metrics : spec=" + spec,
e);
}
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Unable to close http input steam : spec=" + spec, e);
+ }
+ }
+ }
}
- return populatedResources;
+ //todo: filter out resources and return keepers
+ return Collections.emptySet();
}
/**
@@ -462,6 +507,10 @@ public abstract class GangliaPropertyPro
}
}
}
+
+ private Number convertToNumber(String s) {
+ return s.contains(".") ? Double.parseDouble(s) : Long.parseLong(s);
+ }
}
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXMetricHolder.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXMetricHolder.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXMetricHolder.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXMetricHolder.java
Fri Jan 18 23:54:49 2013
@@ -24,7 +24,7 @@ import java.util.Map;
/**
*
*/
-public class JMXMetricHolder {
+public final class JMXMetricHolder {
private List<Map<String, Object>> beans;
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
Fri Jan 18 23:54:49 2013
@@ -22,11 +22,14 @@ import org.apache.ambari.server.controll
import org.apache.ambari.server.controller.spi.*;
import org.apache.ambari.server.controller.utilities.StreamProvider;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.ObjectReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -62,6 +65,8 @@ public class JMXPropertyProvider impleme
private final String componentNamePropertyId;
+ private final static ObjectReader objectReader;
+
static {
JMX_PORTS.put("NAMENODE", "50070");
@@ -69,6 +74,10 @@ public class JMXPropertyProvider impleme
JMX_PORTS.put("JOBTRACKER", "50030");
JMX_PORTS.put("TASKTRACKER", "50060");
JMX_PORTS.put("HBASE_MASTER", "60010");
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS,
false);
+ objectReader = objectMapper.reader(JMXMetricHolder.class);
}
protected final static Logger LOG =
@@ -177,9 +186,10 @@ public class JMXPropertyProvider impleme
}
String spec = getSpec(hostName + ":" + port);
-
+ InputStream in = null;
try {
- JMXMetricHolder metricHolder = new
ObjectMapper().readValue(streamProvider.readFrom(spec), JMXMetricHolder.class);
+ in = streamProvider.readFrom(spec);
+ JMXMetricHolder metricHolder = objectReader.readValue(in);
Map<String, Map<String, Object>> categories = new HashMap<String,
Map<String, Object>>();
@@ -243,6 +253,16 @@ public class JMXPropertyProvider impleme
if (LOG.isErrorEnabled()) {
LOG.error("Caught exception getting JMX metrics : spec=" + spec, e);
}
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Unable to close http input steam : spec=" + spec, e);
+ }
+ }
+ }
}
return true;
Modified:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/TestStreamProvider.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/TestStreamProvider.java?rev=1435419&r1=1435418&r2=1435419&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/TestStreamProvider.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/TestStreamProvider.java
Fri Jan 18 23:54:49 2013
@@ -30,7 +30,7 @@ public class TestStreamProvider implemen
@Override
public InputStream readFrom(String spec) throws IOException {
lastSpec = spec;
- return ClassLoader.getSystemResourceAsStream("temporal_ganglia.json");
+ return ClassLoader.getSystemResourceAsStream("temporal_ganglia_data.txt");
}
public String getLastSpec() {
Added:
incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia_data.txt
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia_data.txt?rev=1435419&view=auto
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia_data.txt
(added)
+++
incubator/ambari/trunk/ambari-server/src/test/resources/temporal_ganglia_data.txt
Fri Jan 18 23:54:49 2013
@@ -0,0 +1,747 @@
+1111111111
+sum
+HDPSlaves
+domU-12-31-39-0E-34-E1.compute-1.internal
+jvm.metrics.gcCount
+1349899845
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1.85333333
+12.0466667
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+[AMBARI_DP_END]
+sum
+HDPSlaves
+domU-12-31-39-0E-34-E2.compute-1.internal
+jvm.metrics.gcCount
+1349899845
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1.85333333
+12.0466667
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+[AMBARI_DP_END]
+sum
+HDPSlaves
+domU-12-31-39-0E-34-E3.compute-1.internal
+jvm.metrics.gcCount
+1349899845
+15
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1.85333333
+12.0466667
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+[AMBARI_DP_END]
+[AMBARI_END]
+999999999
\ No newline at end of file