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 import java.util.ArrayList; 024 import java.util.List; 025 import java.util.Properties; 026 027 import org.apache.hadoop.classification.InterfaceAudience; 028 import org.apache.hadoop.classification.InterfaceStability; 029 import org.apache.hadoop.io.Text; 030 import org.apache.hadoop.io.Writable; 031 import org.apache.hadoop.io.WritableUtils; 032 033 /** 034 * Class that contains the information regarding the Job Queues which are 035 * maintained by the Hadoop Map/Reduce framework. 036 * 037 */ 038 @InterfaceAudience.Public 039 @InterfaceStability.Evolving 040 public class QueueInfo implements Writable { 041 042 private String queueName = ""; 043 044 //The scheduling Information object is read back as String. 045 //Once the scheduling information is set there is no way to recover it. 046 private String schedulingInfo; 047 048 private QueueState queueState; 049 050 // Jobs submitted to the queue 051 private JobStatus[] stats; 052 053 private List<QueueInfo> children; 054 055 private Properties props; 056 057 /** 058 * Default constructor for QueueInfo. 059 * 060 */ 061 public QueueInfo() { 062 // make it running by default. 063 this.queueState = QueueState.RUNNING; 064 children = new ArrayList<QueueInfo>(); 065 props = new Properties(); 066 } 067 068 /** 069 * Construct a new QueueInfo object using the queue name and the 070 * scheduling information passed. 071 * 072 * @param queueName Name of the job queue 073 * @param schedulingInfo Scheduling Information associated with the job 074 * queue 075 */ 076 public QueueInfo(String queueName, String schedulingInfo) { 077 this(); 078 this.queueName = queueName; 079 this.schedulingInfo = schedulingInfo; 080 } 081 082 /** 083 * 084 * @param queueName 085 * @param schedulingInfo 086 * @param state 087 * @param stats 088 */ 089 public QueueInfo(String queueName, String schedulingInfo, QueueState state, 090 JobStatus[] stats) { 091 this(queueName, schedulingInfo); 092 this.queueState = state; 093 this.stats = stats; 094 } 095 096 /** 097 * Set the queue name of the JobQueueInfo 098 * 099 * @param queueName Name of the job queue. 100 */ 101 protected void setQueueName(String queueName) { 102 this.queueName = queueName; 103 } 104 105 /** 106 * Get the queue name from JobQueueInfo 107 * 108 * @return queue name 109 */ 110 public String getQueueName() { 111 return queueName; 112 } 113 114 /** 115 * Set the scheduling information associated to particular job queue 116 * 117 * @param schedulingInfo 118 */ 119 protected void setSchedulingInfo(String schedulingInfo) { 120 this.schedulingInfo = schedulingInfo; 121 } 122 123 /** 124 * Gets the scheduling information associated to particular job queue. 125 * If nothing is set would return <b>"N/A"</b> 126 * 127 * @return Scheduling information associated to particular Job Queue 128 */ 129 public String getSchedulingInfo() { 130 if(schedulingInfo != null) { 131 return schedulingInfo; 132 }else { 133 return "N/A"; 134 } 135 } 136 137 /** 138 * Set the state of the queue 139 * @param state state of the queue. 140 */ 141 protected void setState(QueueState state) { 142 queueState = state; 143 } 144 145 /** 146 * Return the queue state 147 * @return the queue state. 148 */ 149 public QueueState getState() { 150 return queueState; 151 } 152 153 protected void setJobStatuses(JobStatus[] stats) { 154 this.stats = stats; 155 } 156 157 /** 158 * Get immediate children. 159 * 160 * @return list of QueueInfo 161 */ 162 public List<QueueInfo> getQueueChildren() { 163 return children; 164 } 165 166 protected void setQueueChildren(List<QueueInfo> children) { 167 this.children = children; 168 } 169 170 /** 171 * Get properties. 172 * 173 * @return Properties 174 */ 175 public Properties getProperties() { 176 return props; 177 } 178 179 protected void setProperties(Properties props) { 180 this.props = props; 181 } 182 183 /** 184 * Get the jobs submitted to queue 185 * @return list of JobStatus for the submitted jobs 186 */ 187 public JobStatus[] getJobStatuses() { 188 return stats; 189 } 190 191 @Override 192 public void readFields(DataInput in) throws IOException { 193 queueName = Text.readString(in); 194 queueState = WritableUtils.readEnum(in, QueueState.class); 195 schedulingInfo = Text.readString(in); 196 int length = in.readInt(); 197 stats = new JobStatus[length]; 198 for (int i = 0; i < length; i++) { 199 stats[i] = new JobStatus(); 200 stats[i].readFields(in); 201 } 202 int count = in.readInt(); 203 children.clear(); 204 for (int i = 0; i < count; i++) { 205 QueueInfo childQueueInfo = new QueueInfo(); 206 childQueueInfo.readFields(in); 207 children.add(childQueueInfo); 208 } 209 } 210 211 @Override 212 public void write(DataOutput out) throws IOException { 213 Text.writeString(out, queueName); 214 WritableUtils.writeEnum(out, queueState); 215 216 if(schedulingInfo!= null) { 217 Text.writeString(out, schedulingInfo); 218 }else { 219 Text.writeString(out, "N/A"); 220 } 221 out.writeInt(stats.length); 222 for (JobStatus stat : stats) { 223 stat.write(out); 224 } 225 out.writeInt(children.size()); 226 for(QueueInfo childQueueInfo : children) { 227 childQueueInfo.write(out); 228 } 229 } 230 }