blob: eca80c919f666d23d9cd57e83b5b086b36adf71d [file] [log] [blame]
/**
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.hadoop.yarn.client;
import java.util.List;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
import org.apache.hadoop.yarn.api.records.DelegationToken;
import org.apache.hadoop.yarn.api.records.NodeReport;
import org.apache.hadoop.yarn.api.records.QueueInfo;
import org.apache.hadoop.yarn.api.records.QueueUserACLInfo;
import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
import org.apache.hadoop.yarn.exceptions.YarnRemoteException;
import org.apache.hadoop.yarn.service.Service;
@InterfaceAudience.Public
@InterfaceStability.Evolving
public interface YarnClient extends Service {
/**
* <p>
* Obtain a new {@link ApplicationId} for submitting new applications.
* </p>
*
* <p>
* Returns a response which contains {@link ApplicationId} that can be used to
* submit a new application. See
* {@link #submitApplication(ApplicationSubmissionContext)}.
* </p>
*
* <p>
* See {@link GetNewApplicationResponse} for other information that is
* returned.
* </p>
*
* @return response containing the new <code>ApplicationId</code> to be used
* to submit an application
* @throws YarnRemoteException
*/
GetNewApplicationResponse getNewApplication() throws YarnRemoteException;
/**
* <p>
* Submit a new application to <code>YARN.</code>
* </p>
*
* @param appContext
* {@link ApplicationSubmissionContext} containing all the details
* needed to submit a new application
* @return {@link ApplicationId} of the accepted application
* @throws YarnRemoteException
* @see #getNewApplication()
*/
ApplicationId submitApplication(ApplicationSubmissionContext appContext)
throws YarnRemoteException;
/**
* <p>
* Kill an application identified by given ID.
* </p>
*
* @param applicationId
* {@link ApplicationId} of the application that needs to be killed
* @throws YarnRemoteException
* in case of errors or if YARN rejects the request due to
* access-control restrictions.
* @see #getQueueAclsInfo()
*/
void killApplication(ApplicationId applicationId) throws YarnRemoteException;
/**
* <p>
* Get a report of the given Application.
* </p>
*
* <p>
* In secure mode, <code>YARN</code> verifies access to the application, queue
* etc. before accepting the request.
* </p>
*
* <p>
* If the user does not have <code>VIEW_APP</code> access then the following
* fields in the report will be set to stubbed values:
* <ul>
* <li>host - set to "N/A"</li>
* <li>RPC port - set to -1</li>
* <li>client token - set to "N/A"</li>
* <li>diagnostics - set to "N/A"</li>
* <li>tracking URL - set to "N/A"</li>
* <li>original tracking URL - set to "N/A"</li>
* <li>resource usage report - all values are -1</li>
* </ul>
* </p>
*
* @param appId
* {@link ApplicationId} of the application that needs a report
* @return application report
* @throws YarnRemoteException
*/
ApplicationReport getApplicationReport(ApplicationId appId)
throws YarnRemoteException;
/**
* <p>
* Get a report (ApplicationReport) of all Applications in the cluster.
* </p>
*
* <p>
* If the user does not have <code>VIEW_APP</code> access for an application
* then the corresponding report will be filtered as described in
* {@link #getApplicationReport(ApplicationId)}.
* </p>
*
* @return a list of reports of all running applications
* @throws YarnRemoteException
*/
List<ApplicationReport> getApplicationList() throws YarnRemoteException;
/**
* <p>
* Get metrics ({@link YarnClusterMetrics}) about the cluster.
* </p>
*
* @return cluster metrics
* @throws YarnRemoteException
*/
YarnClusterMetrics getYarnClusterMetrics() throws YarnRemoteException;
/**
* <p>
* Get a report of all nodes ({@link NodeReport}) in the cluster.
* </p>
*
* @return A list of report of all nodes
* @throws YarnRemoteException
*/
List<NodeReport> getNodeReports() throws YarnRemoteException;
/**
* <p>
* Get a delegation token so as to be able to talk to YARN using those tokens.
*
* @param renewer
* Address of the renewer who can renew these tokens when needed by
* securely talking to YARN.
* @return a delegation token ({@link DelegationToken}) that can be used to
* talk to YARN
* @throws YarnRemoteException
*/
DelegationToken getRMDelegationToken(Text renewer) throws YarnRemoteException;
/**
* <p>
* Get information ({@link QueueInfo}) about a given <em>queue</em>.
* </p>
*
* @param queueName
* Name of the queue whose information is needed
* @return queue information
* @throws YarnRemoteException
* in case of errors or if YARN rejects the request due to
* access-control restrictions.
*/
QueueInfo getQueueInfo(String queueName) throws YarnRemoteException;
/**
* <p>
* Get information ({@link QueueInfo}) about all queues, recursively if there
* is a hierarchy
* </p>
*
* @return a list of queue-information for all queues
* @throws YarnRemoteException
*/
List<QueueInfo> getAllQueues() throws YarnRemoteException;
/**
* <p>
* Get information ({@link QueueInfo}) about top level queues.
* </p>
*
* @return a list of queue-information for all the top-level queues
* @throws YarnRemoteException
*/
List<QueueInfo> getRootQueueInfos() throws YarnRemoteException;
/**
* <p>
* Get information ({@link QueueInfo}) about all the immediate children queues
* of the given queue
* </p>
*
* @param parent
* Name of the queue whose child-queues' information is needed
* @return a list of queue-information for all queues who are direct children
* of the given parent queue.
* @throws YarnRemoteException
*/
List<QueueInfo> getChildQueueInfos(String parent) throws YarnRemoteException;
/**
* <p>
* Get information about <em>acls</em> for <em>current user</em> on all the
* existing queues.
* </p>
*
* @return a list of queue acls ({@link QueueUserACLInfo}) for
* <em>current user</em>
* @throws YarnRemoteException
*/
List<QueueUserACLInfo> getQueueAclsInfo() throws YarnRemoteException;
}