org.apache.hadoop.mapred.ResourceMgrDelegate.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.mapred.ResourceMgrDelegate.java

Source

/**
* 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.apache.hadoop.mapred;

import java.io.IOException;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.ClusterMetrics;
import org.apache.hadoop.mapreduce.JobID;
import org.apache.hadoop.mapreduce.JobStatus;
import org.apache.hadoop.mapreduce.MRJobConfig;
import org.apache.hadoop.mapreduce.QueueAclsInfo;
import org.apache.hadoop.mapreduce.QueueInfo;
import org.apache.hadoop.mapreduce.TaskTrackerInfo;
import org.apache.hadoop.mapreduce.TypeConverter;
import org.apache.hadoop.mapreduce.v2.util.MRApps;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
import org.apache.hadoop.yarn.api.protocolrecords.GetNewReservationResponse;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationListRequest;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest;
import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport;
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.ContainerId;
import org.apache.hadoop.yarn.api.records.ContainerReport;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.NodeLabel;
import org.apache.hadoop.yarn.api.records.NodeReport;
import org.apache.hadoop.yarn.api.records.NodeState;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.QueueUserACLInfo;
import org.apache.hadoop.yarn.api.records.SignalContainerCommand;
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
import org.apache.hadoop.yarn.client.ClientRMProxy;
import org.apache.hadoop.yarn.client.api.YarnClient;
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
import org.apache.hadoop.yarn.util.ConverterUtils;

import com.google.common.annotations.VisibleForTesting;

public class ResourceMgrDelegate extends YarnClient {
    private static final Log LOG = LogFactory.getLog(ResourceMgrDelegate.class);

    private YarnConfiguration conf;
    private ApplicationSubmissionContext application;
    private ApplicationId applicationId;
    @Private
    @VisibleForTesting
    protected YarnClient client;
    private Text rmDTService;

    /**
     * Delegate responsible for communicating with the Resource Manager's
     * {@link ApplicationClientProtocol}.
     * @param conf the configuration object.
     */
    public ResourceMgrDelegate(YarnConfiguration conf) {
        super(ResourceMgrDelegate.class.getName());
        this.conf = conf;
        this.client = YarnClient.createYarnClient();
        init(conf);
        start();
    }

    @Override
    protected void serviceInit(Configuration conf) throws Exception {
        client.init(conf);
        super.serviceInit(conf);
    }

    @Override
    protected void serviceStart() throws Exception {
        client.start();
        super.serviceStart();
    }

    @Override
    protected void serviceStop() throws Exception {
        client.stop();
        super.serviceStop();
    }

    public TaskTrackerInfo[] getActiveTrackers() throws IOException, InterruptedException {
        try {
            return TypeConverter.fromYarnNodes(client.getNodeReports(NodeState.RUNNING));
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public JobStatus[] getAllJobs() throws IOException, InterruptedException {
        try {
            Set<String> appTypes = new HashSet<String>(1);
            appTypes.add(MRJobConfig.MR_APPLICATION_TYPE);
            EnumSet<YarnApplicationState> appStates = EnumSet.noneOf(YarnApplicationState.class);
            return TypeConverter.fromYarnApps(client.getApplications(appTypes, appStates), this.conf);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public TaskTrackerInfo[] getBlacklistedTrackers() throws IOException, InterruptedException {
        // TODO: Implement getBlacklistedTrackers
        LOG.warn("getBlacklistedTrackers - Not implemented yet");
        return new TaskTrackerInfo[0];
    }

    public ClusterMetrics getClusterMetrics() throws IOException, InterruptedException {
        try {
            YarnClusterMetrics metrics = client.getYarnClusterMetrics();
            ClusterMetrics oldMetrics = new ClusterMetrics(1, 1, 1, 1, 1, 1, metrics.getNumNodeManagers() * 10,
                    metrics.getNumNodeManagers() * 2, 1, metrics.getNumNodeManagers(), 0, 0);
            return oldMetrics;
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public Text getRMDelegationTokenService() {
        if (rmDTService == null) {
            rmDTService = ClientRMProxy.getRMDelegationTokenService(conf);
        }
        return rmDTService;
    }

    @SuppressWarnings("rawtypes")
    public Token getDelegationToken(Text renewer) throws IOException, InterruptedException {
        try {
            return ConverterUtils.convertFromYarn(client.getRMDelegationToken(renewer),
                    getRMDelegationTokenService());
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public String getFilesystemName() throws IOException, InterruptedException {
        return FileSystem.get(conf).getUri().toString();
    }

    public JobID getNewJobID() throws IOException, InterruptedException {
        try {
            this.application = client.createApplication().getApplicationSubmissionContext();
            this.applicationId = this.application.getApplicationId();
            return TypeConverter.fromYarn(applicationId);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public QueueInfo getQueue(String queueName) throws IOException, InterruptedException {
        try {
            org.apache.hadoop.yarn.api.records.QueueInfo queueInfo = client.getQueueInfo(queueName);
            return (queueInfo == null) ? null : TypeConverter.fromYarn(queueInfo, conf);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public QueueAclsInfo[] getQueueAclsForCurrentUser() throws IOException, InterruptedException {
        try {
            return TypeConverter.fromYarnQueueUserAclsInfo(client.getQueueAclsInfo());
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public QueueInfo[] getQueues() throws IOException, InterruptedException {
        try {
            return TypeConverter.fromYarnQueueInfo(client.getAllQueues(), this.conf);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public QueueInfo[] getRootQueues() throws IOException, InterruptedException {
        try {
            return TypeConverter.fromYarnQueueInfo(client.getRootQueueInfos(), this.conf);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public QueueInfo[] getChildQueues(String parent) throws IOException, InterruptedException {
        try {
            return TypeConverter.fromYarnQueueInfo(client.getChildQueueInfos(parent), this.conf);
        } catch (YarnException e) {
            throw new IOException(e);
        }
    }

    public String getStagingAreaDir() throws IOException, InterruptedException {
        //    Path path = new Path(MRJobConstants.JOB_SUBMIT_DIR);
        String user = UserGroupInformation.getCurrentUser().getShortUserName();
        Path path = MRApps.getStagingAreaDir(conf, user);
        LOG.debug("getStagingAreaDir: dir=" + path);
        return path.toString();
    }

    public String getSystemDir() throws IOException, InterruptedException {
        Path sysDir = new Path(MRJobConfig.JOB_SUBMIT_DIR);
        //FileContext.getFileContext(conf).delete(sysDir, true);
        return sysDir.toString();
    }

    public long getTaskTrackerExpiryInterval() throws IOException, InterruptedException {
        return 0;
    }

    public void setJobPriority(JobID arg0, String arg1) throws IOException, InterruptedException {
        return;
    }

    public long getProtocolVersion(String arg0, long arg1) throws IOException {
        return 0;
    }

    public ApplicationId getApplicationId() {
        return applicationId;
    }

    @Override
    public YarnClientApplication createApplication() throws YarnException, IOException {
        return client.createApplication();
    }

    @Override
    public ApplicationId submitApplication(ApplicationSubmissionContext appContext)
            throws YarnException, IOException {
        return client.submitApplication(appContext);
    }

    @Override
    public void failApplicationAttempt(ApplicationAttemptId attemptId) throws YarnException, IOException {
        client.failApplicationAttempt(attemptId);
    }

    @Override
    public void killApplication(ApplicationId applicationId) throws YarnException, IOException {
        client.killApplication(applicationId);
    }

    @Override
    public ApplicationReport getApplicationReport(ApplicationId appId) throws YarnException, IOException {
        return client.getApplicationReport(appId);
    }

    @Override
    public Token<AMRMTokenIdentifier> getAMRMToken(ApplicationId appId) throws YarnException, IOException {
        throw new UnsupportedOperationException();
    }

    @Override
    public List<ApplicationReport> getApplications() throws YarnException, IOException {
        return client.getApplications();
    }

    @Override
    public List<ApplicationReport> getApplications(Set<String> applicationTypes) throws YarnException, IOException {
        return client.getApplications(applicationTypes);
    }

    @Override
    public List<ApplicationReport> getApplications(EnumSet<YarnApplicationState> applicationStates)
            throws YarnException, IOException {
        return client.getApplications(applicationStates);
    }

    @Override
    public List<ApplicationReport> getApplications(Set<String> applicationTypes,
            EnumSet<YarnApplicationState> applicationStates) throws YarnException, IOException {
        return client.getApplications(applicationTypes, applicationStates);
    }

    @Override
    public List<ApplicationReport> getApplications(Set<String> queues, Set<String> users,
            Set<String> applicationTypes, EnumSet<YarnApplicationState> applicationStates)
            throws YarnException, IOException {
        return client.getApplications(queues, users, applicationTypes, applicationStates);
    }

    @Override
    public YarnClusterMetrics getYarnClusterMetrics() throws YarnException, IOException {
        return client.getYarnClusterMetrics();
    }

    @Override
    public List<NodeReport> getNodeReports(NodeState... states) throws YarnException, IOException {
        return client.getNodeReports(states);
    }

    @Override
    public org.apache.hadoop.yarn.api.records.Token getRMDelegationToken(Text renewer)
            throws YarnException, IOException {
        return client.getRMDelegationToken(renewer);
    }

    @Override
    public org.apache.hadoop.yarn.api.records.QueueInfo getQueueInfo(String queueName)
            throws YarnException, IOException {
        return client.getQueueInfo(queueName);
    }

    @Override
    public List<org.apache.hadoop.yarn.api.records.QueueInfo> getAllQueues() throws YarnException, IOException {
        return client.getAllQueues();
    }

    @Override
    public List<org.apache.hadoop.yarn.api.records.QueueInfo> getRootQueueInfos()
            throws YarnException, IOException {
        return client.getRootQueueInfos();
    }

    @Override
    public List<org.apache.hadoop.yarn.api.records.QueueInfo> getChildQueueInfos(String parent)
            throws YarnException, IOException {
        return client.getChildQueueInfos(parent);
    }

    @Override
    public List<QueueUserACLInfo> getQueueAclsInfo() throws YarnException, IOException {
        return client.getQueueAclsInfo();
    }

    @Override
    public ApplicationAttemptReport getApplicationAttemptReport(ApplicationAttemptId appAttemptId)
            throws YarnException, IOException {
        return client.getApplicationAttemptReport(appAttemptId);
    }

    @Override
    public List<ApplicationAttemptReport> getApplicationAttempts(ApplicationId appId)
            throws YarnException, IOException {
        return client.getApplicationAttempts(appId);
    }

    @Override
    public ContainerReport getContainerReport(ContainerId containerId) throws YarnException, IOException {
        return client.getContainerReport(containerId);
    }

    @Override
    public List<ContainerReport> getContainers(ApplicationAttemptId applicationAttemptId)
            throws YarnException, IOException {
        return client.getContainers(applicationAttemptId);
    }

    @Override
    public void moveApplicationAcrossQueues(ApplicationId appId, String queue) throws YarnException, IOException {
        client.moveApplicationAcrossQueues(appId, queue);
    }

    @Override
    public GetNewReservationResponse createReservation() throws YarnException, IOException {
        return client.createReservation();
    }

    @Override
    public ReservationSubmissionResponse submitReservation(ReservationSubmissionRequest request)
            throws YarnException, IOException {
        return client.submitReservation(request);
    }

    @Override
    public ReservationUpdateResponse updateReservation(ReservationUpdateRequest request)
            throws YarnException, IOException {
        return client.updateReservation(request);
    }

    @Override
    public ReservationDeleteResponse deleteReservation(ReservationDeleteRequest request)
            throws YarnException, IOException {
        return client.deleteReservation(request);
    }

    @Override
    public ReservationListResponse listReservations(ReservationListRequest request)
            throws YarnException, IOException {
        return client.listReservations(request);
    }

    @Override
    public Map<NodeId, Set<String>> getNodeToLabels() throws YarnException, IOException {
        return client.getNodeToLabels();
    }

    @Override
    public Map<String, Set<NodeId>> getLabelsToNodes() throws YarnException, IOException {
        return client.getLabelsToNodes();
    }

    @Override
    public Map<String, Set<NodeId>> getLabelsToNodes(Set<String> labels) throws YarnException, IOException {
        return client.getLabelsToNodes(labels);
    }

    @Override
    public List<NodeLabel> getClusterNodeLabels() throws YarnException, IOException {
        return client.getClusterNodeLabels();
    }

    @Override
    public Priority updateApplicationPriority(ApplicationId applicationId, Priority priority)
            throws YarnException, IOException {
        return client.updateApplicationPriority(applicationId, priority);
    }

    @Override
    public void signalToContainer(ContainerId containerId, SignalContainerCommand command)
            throws YarnException, IOException {
        client.signalToContainer(containerId, command);
    }

    @Override
    public void killApplication(ApplicationId appId, String diagnostics) throws YarnException, IOException {
        client.killApplication(appId, diagnostics);
    }
}