001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.hadoop.mapreduce;
019
020 import java.io.DataInput;
021 import java.io.DataOutput;
022 import java.io.IOException;
023
024 import org.apache.hadoop.classification.InterfaceAudience;
025 import org.apache.hadoop.classification.InterfaceStability;
026 import org.apache.hadoop.io.Writable;
027
028 /**
029 * Status information on the current state of the Map-Reduce cluster.
030 *
031 * <p><code>ClusterMetrics</code> provides clients with information such as:
032 * <ol>
033 * <li>
034 * Size of the cluster.
035 * </li>
036 * <li>
037 * Number of blacklisted and decommissioned trackers.
038 * </li>
039 * <li>
040 * Slot capacity of the cluster.
041 * </li>
042 * <li>
043 * The number of currently occupied/reserved map & reduce slots.
044 * </li>
045 * <li>
046 * The number of currently running map & reduce tasks.
047 * </li>
048 * <li>
049 * The number of job submissions.
050 * </li>
051 * </ol></p>
052 *
053 * <p>Clients can query for the latest <code>ClusterMetrics</code>, via
054 * {@link Cluster#getClusterStatus()}.</p>
055 *
056 * @see Cluster
057 */
058 @InterfaceAudience.Public
059 @InterfaceStability.Evolving
060 public class ClusterMetrics implements Writable {
061 private int runningMaps;
062 private int runningReduces;
063 private int occupiedMapSlots;
064 private int occupiedReduceSlots;
065 private int reservedMapSlots;
066 private int reservedReduceSlots;
067 private int totalMapSlots;
068 private int totalReduceSlots;
069 private int totalJobSubmissions;
070 private int numTrackers;
071 private int numBlacklistedTrackers;
072 private int numDecommissionedTrackers;
073
074 public ClusterMetrics() {
075 }
076
077 public ClusterMetrics(int runningMaps, int runningReduces,
078 int occupiedMapSlots, int occupiedReduceSlots,
079 int reservedMapSlots, int reservedReduceSlots,
080 int mapSlots, int reduceSlots,
081 int totalJobSubmissions,
082 int numTrackers, int numBlacklistedTrackers,
083 int numDecommissionedNodes) {
084 this.runningMaps = runningMaps;
085 this.runningReduces = runningReduces;
086 this.occupiedMapSlots = occupiedMapSlots;
087 this.occupiedReduceSlots = occupiedReduceSlots;
088 this.reservedMapSlots = reservedMapSlots;
089 this.reservedReduceSlots = reservedReduceSlots;
090 this.totalMapSlots = mapSlots;
091 this.totalReduceSlots = reduceSlots;
092 this.totalJobSubmissions = totalJobSubmissions;
093 this.numTrackers = numTrackers;
094 this.numBlacklistedTrackers = numBlacklistedTrackers;
095 this.numDecommissionedTrackers = numDecommissionedNodes;
096 }
097
098 /**
099 * Get the number of running map tasks in the cluster.
100 *
101 * @return running maps
102 */
103 public int getRunningMaps() {
104 return runningMaps;
105 }
106
107 /**
108 * Get the number of running reduce tasks in the cluster.
109 *
110 * @return running reduces
111 */
112 public int getRunningReduces() {
113 return runningReduces;
114 }
115
116 /**
117 * Get number of occupied map slots in the cluster.
118 *
119 * @return occupied map slot count
120 */
121 public int getOccupiedMapSlots() {
122 return occupiedMapSlots;
123 }
124
125 /**
126 * Get the number of occupied reduce slots in the cluster.
127 *
128 * @return occupied reduce slot count
129 */
130 public int getOccupiedReduceSlots() {
131 return occupiedReduceSlots;
132 }
133
134 /**
135 * Get number of reserved map slots in the cluster.
136 *
137 * @return reserved map slot count
138 */
139 public int getReservedMapSlots() {
140 return reservedMapSlots;
141 }
142
143 /**
144 * Get the number of reserved reduce slots in the cluster.
145 *
146 * @return reserved reduce slot count
147 */
148 public int getReservedReduceSlots() {
149 return reservedReduceSlots;
150 }
151
152 /**
153 * Get the total number of map slots in the cluster.
154 *
155 * @return map slot capacity
156 */
157 public int getMapSlotCapacity() {
158 return totalMapSlots;
159 }
160
161 /**
162 * Get the total number of reduce slots in the cluster.
163 *
164 * @return reduce slot capacity
165 */
166 public int getReduceSlotCapacity() {
167 return totalReduceSlots;
168 }
169
170 /**
171 * Get the total number of job submissions in the cluster.
172 *
173 * @return total number of job submissions
174 */
175 public int getTotalJobSubmissions() {
176 return totalJobSubmissions;
177 }
178
179 /**
180 * Get the number of active trackers in the cluster.
181 *
182 * @return active tracker count.
183 */
184 public int getTaskTrackerCount() {
185 return numTrackers;
186 }
187
188 /**
189 * Get the number of blacklisted trackers in the cluster.
190 *
191 * @return blacklisted tracker count
192 */
193 public int getBlackListedTaskTrackerCount() {
194 return numBlacklistedTrackers;
195 }
196
197 /**
198 * Get the number of decommissioned trackers in the cluster.
199 *
200 * @return decommissioned tracker count
201 */
202 public int getDecommissionedTaskTrackerCount() {
203 return numDecommissionedTrackers;
204 }
205
206 @Override
207 public void readFields(DataInput in) throws IOException {
208 runningMaps = in.readInt();
209 runningReduces = in.readInt();
210 occupiedMapSlots = in.readInt();
211 occupiedReduceSlots = in.readInt();
212 reservedMapSlots = in.readInt();
213 reservedReduceSlots = in.readInt();
214 totalMapSlots = in.readInt();
215 totalReduceSlots = in.readInt();
216 totalJobSubmissions = in.readInt();
217 numTrackers = in.readInt();
218 numBlacklistedTrackers = in.readInt();
219 numDecommissionedTrackers = in.readInt();
220 }
221
222 @Override
223 public void write(DataOutput out) throws IOException {
224 out.writeInt(runningMaps);
225 out.writeInt(runningReduces);
226 out.writeInt(occupiedMapSlots);
227 out.writeInt(occupiedReduceSlots);
228 out.writeInt(reservedMapSlots);
229 out.writeInt(reservedReduceSlots);
230 out.writeInt(totalMapSlots);
231 out.writeInt(totalReduceSlots);
232 out.writeInt(totalJobSubmissions);
233 out.writeInt(numTrackers);
234 out.writeInt(numBlacklistedTrackers);
235 out.writeInt(numDecommissionedTrackers);
236 }
237
238 }