Example usage for org.apache.hadoop.yarn.api.records ContainerExitStatus PREEMPTED

List of usage examples for org.apache.hadoop.yarn.api.records ContainerExitStatus PREEMPTED

Introduction

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

Prototype

int PREEMPTED

To view the source code for org.apache.hadoop.yarn.api.records ContainerExitStatus PREEMPTED.

Click Source Link

Document

Containers preempted by the framework.

Usage

From source file:org.elasticsearch.hadoop.yarn.am.EsCluster.java

License:Apache License

public void start() {
    running = true;/*from w  ww  . j  av  a2  s .  c om*/
    nmRpc.start();

    UserGroupInformation.setConfiguration(cfg);

    log.info(String.format("Allocating Elasticsearch cluster with %d nodes", appConfig.containersToAllocate()));

    // register requests
    Resource capability = YarnCompat.resource(cfg, appConfig.containerMem(), appConfig.containerVCores());
    Priority prio = Priority.newInstance(appConfig.amPriority());

    for (int i = 0; i < appConfig.containersToAllocate(); i++) {
        // TODO: Add allocation (host/rack rules) - and disable location constraints
        ContainerRequest req = new ContainerRequest(capability, null, null, prio);
        amRpc.addContainerRequest(req);
    }

    // update status every 5 sec
    final long heartBeatRate = TimeUnit.SECONDS.toMillis(5);

    // start the allocation loop
    // when a new container is allocated, launch it right away

    int responseId = 0;

    try {
        do {
            AllocateResponse alloc = amRpc.allocate(responseId++);
            List<Container> currentlyAllocated = alloc.getAllocatedContainers();
            for (Container container : currentlyAllocated) {
                launchContainer(container);
                allocatedContainers.add(container.getId());
            }

            if (currentlyAllocated.size() > 0) {
                int needed = appConfig.containersToAllocate() - allocatedContainers.size();
                if (needed > 0) {
                    log.info(String.format("%s containers allocated, %s remaining", allocatedContainers.size(),
                            needed));
                } else {
                    log.info(String.format("Fully allocated %s containers", allocatedContainers.size()));
                }
            }

            List<ContainerStatus> completed = alloc.getCompletedContainersStatuses();
            for (ContainerStatus status : completed) {
                if (!completedContainers.contains(status.getContainerId())) {
                    ContainerId containerId = status.getContainerId();
                    completedContainers.add(containerId);

                    boolean containerSuccesful = false;

                    switch (status.getExitStatus()) {
                    case ContainerExitStatus.SUCCESS:
                        log.info(String.format("Container %s finished succesfully...", containerId));
                        containerSuccesful = true;
                        break;
                    case ContainerExitStatus.ABORTED:
                        log.warn(String.format("Container %s aborted...", containerId));
                        break;
                    case ContainerExitStatus.DISKS_FAILED:
                        log.warn(String.format("Container %s ran out of disk...", containerId));
                        break;
                    case ContainerExitStatus.PREEMPTED:
                        log.warn(String.format("Container %s preempted...", containerId));
                        break;
                    default:
                        log.warn(String.format("Container %s exited with an invalid/unknown exit code...",
                                containerId));
                    }

                    if (!containerSuccesful) {
                        log.warn("Cluster has not completed succesfully...");
                        clusterHasFailed = true;
                        running = false;
                    }
                }
            }

            if (completedContainers.size() == appConfig.containersToAllocate()) {
                running = false;
            }

            if (running) {
                try {
                    Thread.sleep(heartBeatRate);
                } catch (Exception ex) {
                    throw new EsYarnNmException("Cluster interrupted");
                }
            }
        } while (running);
    } finally {
        log.info("Cluster has completed running...");
        try {
            Thread.sleep(TimeUnit.SECONDS.toMillis(15));
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        close();
    }
}

From source file:yarnkit.utils.YarnUtils.java

License:Apache License

public static String getContainerExitStatusMessage(@Nonnull ContainerStatus status) {
    String containerId = status.getContainerId().toString();

    final String msg;
    final int exitStatus = status.getExitStatus();
    switch (exitStatus) {
    case ContainerExitStatus.SUCCESS: {
        msg = String.format("Container %s finished succesfully", containerId);
        break;/*from   www . j  ava 2 s . c  o m*/
    }
    case ContainerExitStatus.ABORTED: {
        msg = String.format("Container %s aborted", containerId);
        break;
    }
    case ContainerExitStatus.DISKS_FAILED: {
        msg = String.format("Container %s ran out of disk", containerId);
        break;
    }
    case ContainerExitStatus.PREEMPTED: {
        msg = String.format("Container %s preempted", containerId);
        break;
    }
    case ContainerExitStatus.INVALID:
    default: {
        msg = String.format("Container %s exited with an invalid/unknown exit code: %d", containerId,
                exitStatus);
        break;
    }
    }

    String diagnostics = status.getDiagnostics();
    if (exitStatus == ContainerExitStatus.SUCCESS || Strings.isNullOrEmpty(diagnostics)) {
        return msg;
    } else {
        return msg + "\nDiagnostics: " + diagnostics;
    }
}