Example usage for org.apache.hadoop.yarn.api.records QueueACL SUBMIT_APPLICATIONS

List of usage examples for org.apache.hadoop.yarn.api.records QueueACL SUBMIT_APPLICATIONS

Introduction

In this page you can find the example usage for org.apache.hadoop.yarn.api.records QueueACL SUBMIT_APPLICATIONS.

Prototype

QueueACL SUBMIT_APPLICATIONS

To view the source code for org.apache.hadoop.yarn.api.records QueueACL SUBMIT_APPLICATIONS.

Click Source Link

Document

ACL to submit applications to the queue.

Usage

From source file:com.cloudera.impala.util.RequestPoolService.java

License:Apache License

/**
 * Indicates if a user has access to the pool.
 *
 * @param pool the pool to check if the user has access to. NOTE: it should always be
 * called with a pool returned by the {@link #assignToPool(String, String)} method.
 * @param user the user to check if it has access to the pool.
 * @return True if the user has access to the pool.
 *//*  w  w  w  .java 2  s  .  c  o  m*/
@VisibleForTesting
boolean hasAccess(String pool, String user) {
    Preconditions.checkState(running_.get());
    Preconditions.checkArgument(!Strings.isNullOrEmpty(pool));
    Preconditions.checkArgument(!Strings.isNullOrEmpty(user));
    // Convert the user name to a short name (e.g. 'user1@domain' to 'user1') because
    // the UserGroupInformation will check group membership which should always be done
    // on the short name of the principal.
    String shortName = new User(user).getShortName();
    UserGroupInformation ugi = UserGroupInformation.createRemoteUser(shortName);
    return allocationConf_.get().hasAccess(pool, QueueACL.SUBMIT_APPLICATIONS, ugi);
}

From source file:com.cloudera.llama.am.LlamaAMServiceImpl.java

License:Apache License

void checkAccess(String user, String queue, String requestedQueue) throws LlamaException {
    UserGroupInformation ugi;//from  ww w. j a v a  2  s  .co m
    try {
        ugi = UserGroupInformation.createProxyUser(user, UserGroupInformation.getCurrentUser());
    } catch (IOException ex) {
        throw new LlamaException(ex, ErrorCode.INTERNAL_ERROR);
    }
    if (!allocConf.get().hasAccess(queue, QueueACL.SUBMIT_APPLICATIONS, ugi)) {
        throw new LlamaException(ErrorCode.RESERVATION_USER_NOT_ALLOWED_IN_QUEUE, user, requestedQueue, queue);
    }
}

From source file:org.apache.impala.util.RequestPoolService.java

License:Apache License

/**
 * Indicates if a user has access to the pool.
 *
 * @param pool the pool to check if the user has access to. NOTE: it should always be
 * called with a pool returned by the {@link #assignToPool(String, String)} method.
 * @param user the user to check if it has access to the pool.
 * @return True if the user has access to the pool.
 *//*www  .ja v  a 2s. c  o  m*/
@VisibleForTesting
boolean hasAccess(String pool, String user) throws InternalException {
    Preconditions.checkState(running_.get());
    Preconditions.checkArgument(!Strings.isNullOrEmpty(pool));
    Preconditions.checkArgument(!Strings.isNullOrEmpty(user));
    // Convert the user name to a short name (e.g. 'user1@domain' to 'user1') because
    // the UserGroupInformation will check group membership which should always be done
    // on the short name of the principal.
    String shortName;
    User requestingUser = new User(user);
    shortName = requestingUser.getShortName();
    UserGroupInformation ugi = UserGroupInformation.createRemoteUser(shortName);
    return allocationConf_.get().hasAccess(pool, QueueACL.SUBMIT_APPLICATIONS, ugi);
}

From source file:org.apache.impala.yarn.server.resourcemanager.scheduler.fair.AllocationFileLoaderService.java

License:Apache License

/**
 * Loads a queue from a queue element in the configuration file
 *///  w ww  . j  a va2 s.c  o m
private void loadQueue(String parentName, Element element, Map<String, Resource> minQueueResources,
        Map<String, Resource> maxQueueResources, Map<String, Resource> maxChildQueueResources,
        Map<String, Integer> queueMaxApps, Map<String, Integer> userMaxApps,
        Map<String, Float> queueMaxAMShares, Map<String, ResourceWeights> queueWeights,
        Map<String, SchedulingPolicy> queuePolicies, Map<String, Long> minSharePreemptionTimeouts,
        Map<String, Long> fairSharePreemptionTimeouts, Map<String, Float> fairSharePreemptionThresholds,
        Map<String, Map<QueueACL, AccessControlList>> queueAcls, Map<FSQueueType, Set<String>> configuredQueues,
        Set<String> nonPreemptableQueues) throws AllocationConfigurationException {
    String queueName = CharMatcher.WHITESPACE.trimFrom(element.getAttribute("name"));

    if (queueName.contains(".")) {
        throw new AllocationConfigurationException("Bad fair scheduler config " + "file: queue name ("
                + queueName + ") shouldn't contain period.");
    }

    if (queueName.isEmpty()) {
        throw new AllocationConfigurationException("Bad fair scheduler config "
                + "file: queue name shouldn't be empty or " + "consist only of whitespace.");
    }

    if (parentName != null) {
        queueName = parentName + "." + queueName;
    }

    Map<QueueACL, AccessControlList> acls = new HashMap<>();
    NodeList fields = element.getChildNodes();
    boolean isLeaf = true;

    for (int j = 0; j < fields.getLength(); j++) {
        Node fieldNode = fields.item(j);
        if (!(fieldNode instanceof Element))
            continue;
        Element field = (Element) fieldNode;
        if ("minResources".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text);
            minQueueResources.put(queueName, val);
        } else if ("maxResources".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text);
            maxQueueResources.put(queueName, val);
        } else if ("maxChildResources".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text);
            maxChildQueueResources.put(queueName, val);
        } else if ("maxRunningApps".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            int val = Integer.parseInt(text);
            queueMaxApps.put(queueName, val);
        } else if ("maxAMShare".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            float val = Float.parseFloat(text);
            val = Math.min(val, 1.0f);
            queueMaxAMShares.put(queueName, val);
        } else if ("weight".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            double val = Double.parseDouble(text);
            queueWeights.put(queueName, new ResourceWeights((float) val));
        } else if ("minSharePreemptionTimeout".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            long val = Long.parseLong(text) * 1000L;
            minSharePreemptionTimeouts.put(queueName, val);
        } else if ("fairSharePreemptionTimeout".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            long val = Long.parseLong(text) * 1000L;
            fairSharePreemptionTimeouts.put(queueName, val);
        } else if ("fairSharePreemptionThreshold".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            float val = Float.parseFloat(text);
            val = Math.max(Math.min(val, 1.0f), 0.0f);
            fairSharePreemptionThresholds.put(queueName, val);
        } else if ("schedulingPolicy".equals(field.getTagName())
                || "schedulingMode".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            SchedulingPolicy policy = SchedulingPolicy.parse(text);
            queuePolicies.put(queueName, policy);
        } else if ("aclSubmitApps".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData();
            acls.put(QueueACL.SUBMIT_APPLICATIONS, new AccessControlList(text));
        } else if ("aclAdministerApps".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData();
            acls.put(QueueACL.ADMINISTER_QUEUE, new AccessControlList(text));
        } else if ("allowPreemptionFrom".equals(field.getTagName())) {
            String text = ((Text) field.getFirstChild()).getData().trim();
            if (!Boolean.parseBoolean(text)) {
                nonPreemptableQueues.add(queueName);
            }
        } else if ("queue".endsWith(field.getTagName()) || "pool".equals(field.getTagName())) {
            loadQueue(queueName, field, minQueueResources, maxQueueResources, maxChildQueueResources,
                    queueMaxApps, userMaxApps, queueMaxAMShares, queueWeights, queuePolicies,
                    minSharePreemptionTimeouts, fairSharePreemptionTimeouts, fairSharePreemptionThresholds,
                    queueAcls, configuredQueues, nonPreemptableQueues);
            configuredQueues.get(FSQueueType.PARENT).add(queueName);
            isLeaf = false;
        }
    }
    if (isLeaf) {
        // if a leaf in the alloc file is marked as type='parent'
        // then store it under 'parent'
        if ("parent".equals(element.getAttribute("type"))) {
            configuredQueues.get(FSQueueType.PARENT).add(queueName);
        } else {
            configuredQueues.get(FSQueueType.LEAF).add(queueName);
        }
    }
    queueAcls.put(queueName, acls);
    if (maxQueueResources.containsKey(queueName) && minQueueResources.containsKey(queueName)
            && !Resources.fitsIn(minQueueResources.get(queueName), maxQueueResources.get(queueName))) {
        LOG.warn(String.format("Queue %s has max resources %s less than " + "min resources %s", queueName,
                maxQueueResources.get(queueName), minQueueResources.get(queueName)));
    }
}

From source file:org.pentaho.hadoop.mapreduce.YarnQueueAclsVerifier.java

License:Apache License

public static boolean verify(QueueAclsInfo[] queueAclsInfos) throws IOException, InterruptedException {
    return queueAclsInfos != null && Arrays.stream(queueAclsInfos).map(QueueAclsInfo::getOperations)
            .flatMap(Arrays::stream).anyMatch(Predicate.isEqual(QueueACL.SUBMIT_APPLICATIONS.toString()));
}