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
019package org.hadoop.yarn.client;
020
021import java.util.List;
022
023import org.apache.hadoop.classification.InterfaceAudience;
024import org.apache.hadoop.classification.InterfaceStability;
025import org.apache.hadoop.io.Text;
026import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse;
027import org.apache.hadoop.yarn.api.records.ApplicationId;
028import org.apache.hadoop.yarn.api.records.ApplicationReport;
029import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
030import org.apache.hadoop.yarn.api.records.DelegationToken;
031import org.apache.hadoop.yarn.api.records.NodeReport;
032import org.apache.hadoop.yarn.api.records.QueueInfo;
033import org.apache.hadoop.yarn.api.records.QueueUserACLInfo;
034import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
035import org.apache.hadoop.yarn.exceptions.YarnRemoteException;
036import org.apache.hadoop.yarn.service.Service;
037
038@InterfaceAudience.Public
039@InterfaceStability.Evolving
040public interface YarnClient extends Service {
041
042  /**
043   * <p>
044   * Obtain a new {@link ApplicationId} for submitting new applications.
045   * </p>
046   * 
047   * <p>
048   * Returns a response which contains {@link ApplicationId} that can be used to
049   * submit a new application. See
050   * {@link #submitApplication(ApplicationSubmissionContext)}.
051   * </p>
052   * 
053   * <p>
054   * See {@link GetNewApplicationResponse} for other information that is
055   * returned.
056   * </p>
057   * 
058   * @return response containing the new <code>ApplicationId</code> to be used
059   *         to submit an application
060   * @throws YarnRemoteException
061   */
062  GetNewApplicationResponse getNewApplication() throws YarnRemoteException;
063
064  /**
065   * <p>
066   * Submit a new application to <code>YARN.</code>
067   * </p>
068   * 
069   * @param appContext
070   *          {@link ApplicationSubmissionContext} containing all the details
071   *          needed to submit a new application
072   * @return {@link ApplicationId} of the accepted application
073   * @throws YarnRemoteException
074   * @see #getNewApplication()
075   */
076  ApplicationId submitApplication(ApplicationSubmissionContext appContext)
077      throws YarnRemoteException;
078
079  /**
080   * <p>
081   * Kill an application identified by given ID.
082   * </p>
083   * 
084   * @param applicationId
085   *          {@link ApplicationId} of the application that needs to be killed
086   * @throws YarnRemoteException
087   *           in case of errors or if YARN rejects the request due to
088   *           access-control restrictions.
089   * @see #getQueueAclsInfo()
090   */
091  void killApplication(ApplicationId applicationId) throws YarnRemoteException;
092
093  /**
094   * <p>
095   * Get a report of the given Application.
096   * </p>
097   * 
098   * <p>
099   * In secure mode, <code>YARN</code> verifies access to the application, queue
100   * etc. before accepting the request.
101   * </p>
102   * 
103   * <p>
104   * If the user does not have <code>VIEW_APP</code> access then the following
105   * fields in the report will be set to stubbed values:
106   * <ul>
107   * <li>host - set to "N/A"</li>
108   * <li>RPC port - set to -1</li>
109   * <li>client token - set to "N/A"</li>
110   * <li>diagnostics - set to "N/A"</li>
111   * <li>tracking URL - set to "N/A"</li>
112   * <li>original tracking URL - set to "N/A"</li>
113   * <li>resource usage report - all values are -1</li>
114   * </ul>
115   * </p>
116   * 
117   * @param appId
118   *          {@link ApplicationId} of the application that needs a report
119   * @return application report
120   * @throws YarnRemoteException
121   */
122  ApplicationReport getApplicationReport(ApplicationId appId)
123      throws YarnRemoteException;
124
125  /**
126   * <p>
127   * Get a report (ApplicationReport) of all Applications in the cluster.
128   * </p>
129   * 
130   * <p>
131   * If the user does not have <code>VIEW_APP</code> access for an application
132   * then the corresponding report will be filtered as described in
133   * {@link #getApplicationReport(ApplicationId)}.
134   * </p>
135   * 
136   * @return a list of reports of all running applications
137   * @throws YarnRemoteException
138   */
139  List<ApplicationReport> getApplicationList() throws YarnRemoteException;
140
141  /**
142   * <p>
143   * Get metrics ({@link YarnClusterMetrics}) about the cluster.
144   * </p>
145   * 
146   * @return cluster metrics
147   * @throws YarnRemoteException
148   */
149  YarnClusterMetrics getYarnClusterMetrics() throws YarnRemoteException;
150
151  /**
152   * <p>
153   * Get a report of all nodes ({@link NodeReport}) in the cluster.
154   * </p>
155   * 
156   * @return A list of report of all nodes
157   * @throws YarnRemoteException
158   */
159  List<NodeReport> getNodeReports() throws YarnRemoteException;
160
161  /**
162   * <p>
163   * Get a delegation token so as to be able to talk to YARN using those tokens.
164   * 
165   * @param renewer
166   *          Address of the renewer who can renew these tokens when needed by
167   *          securely talking to YARN.
168   * @return a delegation token ({@link DelegationToken}) that can be used to
169   *         talk to YARN
170   * @throws YarnRemoteException
171   */
172  DelegationToken getRMDelegationToken(Text renewer) throws YarnRemoteException;
173
174  /**
175   * <p>
176   * Get information ({@link QueueInfo}) about a given <em>queue</em>.
177   * </p>
178   * 
179   * @param queueName
180   *          Name of the queue whose information is needed
181   * @return queue information
182   * @throws YarnRemoteException
183   *           in case of errors or if YARN rejects the request due to
184   *           access-control restrictions.
185   */
186  QueueInfo getQueueInfo(String queueName) throws YarnRemoteException;
187
188  /**
189   * <p>
190   * Get information ({@link QueueInfo}) about all queues, recursively if there
191   * is a hierarchy
192   * </p>
193   * 
194   * @return a list of queue-information for all queues
195   * @throws YarnRemoteException
196   */
197  List<QueueInfo> getAllQueues() throws YarnRemoteException;
198
199  /**
200   * <p>
201   * Get information ({@link QueueInfo}) about top level queues.
202   * </p>
203   * 
204   * @return a list of queue-information for all the top-level queues
205   * @throws YarnRemoteException
206   */
207  List<QueueInfo> getRootQueueInfos() throws YarnRemoteException;
208
209  /**
210   * <p>
211   * Get information ({@link QueueInfo}) about all the immediate children queues
212   * of the given queue
213   * </p>
214   * 
215   * @param parent
216   *          Name of the queue whose child-queues' information is needed
217   * @return a list of queue-information for all queues who are direct children
218   *         of the given parent queue.
219   * @throws YarnRemoteException
220   */
221  List<QueueInfo> getChildQueueInfos(String parent) throws YarnRemoteException;
222
223  /**
224   * <p>
225   * Get information about <em>acls</em> for <em>current user</em> on all the
226   * existing queues.
227   * </p>
228   * 
229   * @return a list of queue acls ({@link QueueUserACLInfo}) for
230   *         <em>current user</em>
231   * @throws YarnRemoteException
232   */
233  List<QueueUserACLInfo> getQueueAclsInfo() throws YarnRemoteException;
234}