Example usage for org.apache.hadoop.yarn.api.records ApplicationReport getYarnApplicationState

List of usage examples for org.apache.hadoop.yarn.api.records ApplicationReport getYarnApplicationState

Introduction

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

Prototype

@Public
@Stable
public abstract YarnApplicationState getYarnApplicationState();

Source Link

Document

Get the YarnApplicationState of the application.

Usage

From source file:com.cloudera.llama.am.yarn.YarnRMConnector.java

License:Apache License

private ApplicationReport _monitorAppState(YarnClient rmClient, ApplicationId appId,
        Set<YarnApplicationState> states, boolean calledFromStopped) throws LlamaException {
    String action = calledFromStopped ? "stopping" : "starting";
    try {/*from  ww w.jav  a2 s  . c om*/
        long timeout = getConf().getLong(APP_MONITOR_TIMEOUT_KEY, APP_MONITOR_TIMEOUT_DEFAULT);

        long polling = getConf().getLong(APP_MONITOR_POLLING_KEY, APP_MONITOR_POLLING_DEFAULT);

        long start = System.currentTimeMillis();
        ApplicationReport report = rmClient.getApplicationReport(appId);
        while (!states.contains(report.getYarnApplicationState())) {
            if (System.currentTimeMillis() - start > timeout) {
                throw new LlamaException(ErrorCode.AM_TIMED_OUT_STARTING_STOPPING, appId, timeout,
                        report.getYarnApplicationState(), states, action);
            }
            Thread.sleep(polling);
            report = rmClient.getApplicationReport(appId);
        }
        return report;
    } catch (Exception ex) {
        if (!calledFromStopped) {
            _stop(FinalApplicationStatus.FAILED, "Could not start, error: " + ex, true);
        }
        throw new LlamaException(ex, ErrorCode.AM_FAILED_WHILE_STARTING_STOPPING, appId, action);
    }
}

From source file:com.continuuity.weave.yarn.YarnWeaveController.java

License:Open Source License

@Override
public ListenableFuture<State> stop() {
    final ApplicationId appId = applicationId == null ? fetchApplicationId() : applicationId;

    return Futures.transform(super.stop(), new Function<State, State>() {
        @Override/*  w w w.  j  av a 2  s .c  om*/
        public State apply(State state) {
            if (appId == null) {
                LOG.warn("ApplicationId unknown.");
                return state;
            }
            try {
                StopWatch stopWatch = new StopWatch();
                stopWatch.start();
                stopWatch.split();
                // At most 5 seconds.
                boolean done = false;
                while (!done && stopWatch.getSplitTime() < MAX_STOP_TIME) {
                    LOG.info("Fetching application report for " + appId);
                    ApplicationReport report = yarnClient.getApplicationReport(appId);
                    YarnApplicationState appState = report.getYarnApplicationState();
                    switch (appState) {
                    case FINISHED:
                        LOG.info("Application finished.");
                        done = true;
                        break;
                    case FAILED:
                        LOG.warn("Application failed.");
                        done = true;
                        break;
                    case KILLED:
                        LOG.warn("Application killed.");
                        done = true;
                        break;
                    }
                    TimeUnit.SECONDS.sleep(1);
                    stopWatch.split();
                }
            } catch (Exception e) {
                LOG.warn("Exception while waiting for application report: {}", e.getMessage(), e);
            }
            return state;
        }
    });
}

From source file:com.datatorrent.stram.cli.ApexCli.java

License:Apache License

protected ApplicationReport getApplicationByName(String appName) {
    if (appName == null) {
        throw new CliException("Invalid application name provided by user");
    }//from   w ww. j  ava  2s .  c  o  m
    List<ApplicationReport> appList = getApplicationList();
    for (ApplicationReport ar : appList) {
        if ((ar.getName().equals(appName)) && (ar.getYarnApplicationState() != YarnApplicationState.KILLED)
                && (ar.getYarnApplicationState() != YarnApplicationState.FINISHED)) {
            LOG.debug("Application Name: {} Application ID: {} Application State: {}", ar.getName(),
                    ar.getApplicationId().toString(), YarnApplicationState.FINISHED);
            return ar;
        }
    }
    return null;
}

From source file:com.datatorrent.stram.cli.ApexCli.java

License:Apache License

private ApplicationReport assertRunningApp(ApplicationReport app) {
    ApplicationReport r;
    try {/*w  ww  . j  a  v  a 2  s. c o  m*/
        r = yarnClient.getApplicationReport(app.getApplicationId());
        if (r.getYarnApplicationState() != YarnApplicationState.RUNNING) {
            String msg = String.format("Application %s not running (status %s)", r.getApplicationId().getId(),
                    r.getYarnApplicationState());
            throw new CliException(msg);
        }
    } catch (YarnException rmExc) {
        throw new CliException("Unable to determine application status", rmExc);
    } catch (IOException rmExc) {
        throw new CliException("Unable to determine application status", rmExc);
    }
    return r;
}

From source file:com.datatorrent.stram.cli.ApexCliShutdownCommandTest.java

License:Apache License

private ApplicationReport mockRunningApplicationReport(String appId, String appName) {
    ApplicationReport app = mock(ApplicationReport.class);
    ApplicationId applicationId = mock(ApplicationId.class);

    when(applicationId.toString()).thenReturn(appId);
    when(app.getApplicationId()).thenReturn(applicationId);

    when(app.getName()).thenReturn(appName);

    when(app.getYarnApplicationState()).thenReturn(YarnApplicationState.RUNNING);
    when(app.getFinalApplicationStatus()).thenReturn(FinalApplicationStatus.UNDEFINED);

    when(app.getTrackingUrl()).thenReturn("http://example.com");

    return app;//  www. ja  v a2 s  .co  m
}

From source file:com.datatorrent.stram.InlineAM.java

License:Apache License

public boolean run() throws Exception {
    LOG.info("Starting Client");

    // Connect to ResourceManager
    rmClient.start();/*from  w  w  w .  jav  a  2s  .  c om*/
    try {
        // Get a new application id
        YarnClientApplication newApp = rmClient.createApplication();
        ApplicationId appId = newApp.getNewApplicationResponse().getApplicationId();

        // Create launch context for app master
        LOG.info("Setting up application submission context for ASM");
        ApplicationSubmissionContext appContext = Records.newRecord(ApplicationSubmissionContext.class);

        // set the application id
        appContext.setApplicationId(appId);
        // set the application name
        appContext.setApplicationName(appName);

        // Set the priority for the application master
        Priority pri = Records.newRecord(Priority.class);
        pri.setPriority(amPriority);
        appContext.setPriority(pri);

        // Set the queue to which this application is to be submitted in the RM
        appContext.setQueue(amQueue);

        // Set up the container launch context for the application master
        ContainerLaunchContext amContainer = Records.newRecord(ContainerLaunchContext.class);
        appContext.setAMContainerSpec(amContainer);

        // unmanaged AM
        appContext.setUnmanagedAM(true);
        LOG.info("Setting unmanaged AM");

        // Submit the application to the applications manager
        LOG.info("Submitting application to ASM");
        rmClient.submitApplication(appContext);

        // Monitor the application to wait for launch state
        ApplicationReport appReport = monitorApplication(appId, EnumSet.of(YarnApplicationState.ACCEPTED));
        ApplicationAttemptId attemptId = appReport.getCurrentApplicationAttemptId();
        LOG.info("Launching application with id: " + attemptId);

        // launch AM
        runAM(attemptId);

        // Monitor the application for end state
        appReport = monitorApplication(appId, EnumSet.of(YarnApplicationState.KILLED,
                YarnApplicationState.FAILED, YarnApplicationState.FINISHED));
        YarnApplicationState appState = appReport.getYarnApplicationState();
        FinalApplicationStatus appStatus = appReport.getFinalApplicationStatus();

        LOG.info("App ended with state: " + appReport.getYarnApplicationState() + " and status: " + appStatus);

        boolean success;
        if (YarnApplicationState.FINISHED == appState && FinalApplicationStatus.SUCCEEDED == appStatus) {
            LOG.info("Application has completed successfully.");
            success = true;
        } else {
            LOG.info("Application did finished unsuccessfully." + " YarnState=" + appState.toString()
                    + ", FinalStatus=" + appStatus.toString());
            success = false;
        }

        return success;
    } finally {
        rmClient.stop();
    }
}

From source file:com.datatorrent.stram.InlineAM.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if time
 * expires./*from w  ww .  ja v a 2 s .c o m*/
 *
 * @param appId
 *          Application Id of application to be monitored
 * @return true if application completed successfully
 * @throws YarnRemoteException
 */
private ApplicationReport monitorApplication(ApplicationId appId, Set<YarnApplicationState> finalState)
        throws YarnException, IOException {

    while (true) {

        // Check app status every 1 second.
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            LOG.debug("Thread sleep in monitoring loop interrupted");
        }

        // Get application report for the appId we are interested in
        ApplicationReport report = rmClient.getApplicationReport(appId);

        LOG.info("Got application report from ASM for" + ", appId=" + appId.getId() + ", appAttemptId="
                + report.getCurrentApplicationAttemptId() + ", clientToken=" + report.getClientToAMToken()
                + ", appDiagnostics=" + report.getDiagnostics() + ", appMasterHost=" + report.getHost()
                + ", appQueue=" + report.getQueue() + ", appMasterRpcPort=" + report.getRpcPort()
                + ", appStartTime=" + report.getStartTime() + ", yarnAppState="
                + report.getYarnApplicationState().toString() + ", distributedFinalState="
                + report.getFinalApplicationStatus().toString() + ", appTrackingUrl=" + report.getTrackingUrl()
                + ", appUser=" + report.getUser());

        YarnApplicationState state = report.getYarnApplicationState();
        if (finalState.contains(state)) {
            return report;
        }

    }

}

From source file:com.datatorrent.stram.StramClient.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if time expires.
 *
 * @return true if application completed successfully
 * @throws YarnException/*from   w w  w . j a  va 2s. c om*/
 * @throws IOException
 */
public boolean monitorApplication() throws YarnException, IOException {
    ClientRMHelper.AppStatusCallback callback = new ClientRMHelper.AppStatusCallback() {
        @Override
        public boolean exitLoop(ApplicationReport report) {
            LOG.info("Got application report from ASM for" + ", appId=" + appId.getId() + ", clientToken="
                    + report.getClientToAMToken() + ", appDiagnostics=" + report.getDiagnostics()
                    + ", appMasterHost=" + report.getHost() + ", appQueue=" + report.getQueue()
                    + ", appMasterRpcPort=" + report.getRpcPort() + ", appStartTime=" + report.getStartTime()
                    + ", yarnAppState=" + report.getYarnApplicationState().toString()
                    + ", distributedFinalState=" + report.getFinalApplicationStatus().toString()
                    + ", appTrackingUrl=" + report.getTrackingUrl() + ", appUser=" + report.getUser());
            return false;
        }

    };
    ClientRMHelper rmClient = new ClientRMHelper(yarnClient);
    return rmClient.waitForCompletion(appId, callback, clientTimeout);
}

From source file:com.epam.hadoop.nv.yarn.Client.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if
 * time expires.//  w w w.  jav  a 2s  .c o m
 * 
 * @param appId
 *            Application Id of application to be monitored
 * @return true if application completed successfully
 * @throws YarnException
 * @throws IOException
 */
private boolean monitorApplication(ApplicationId appId) throws YarnException, IOException {

    while (true) {

        // Check app status every 1 second.
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            LOG.debug("Thread sleep in monitoring loop interrupted");
        }

        // Get application report for the appId we are interested in
        ApplicationReport report = yarnClient.getApplicationReport(appId);

        LOG.info("Got application report from ASM for" + ", appId=" + appId.getId() + ", clientToAMToken="
                + report.getClientToAMToken() + ", appDiagnostics=" + report.getDiagnostics()
                + ", appMasterHost=" + report.getHost() + ", appQueue=" + report.getQueue()
                + ", appMasterRpcPort=" + report.getRpcPort() + ", appStartTime=" + report.getStartTime()
                + ", yarnAppState=" + report.getYarnApplicationState().toString() + ", distributedFinalState="
                + report.getFinalApplicationStatus().toString() + ", appTrackingUrl=" + report.getTrackingUrl()
                + ", appUser=" + report.getUser());

        YarnApplicationState state = report.getYarnApplicationState();
        FinalApplicationStatus dsStatus = report.getFinalApplicationStatus();
        if (YarnApplicationState.FINISHED == state) {
            if (FinalApplicationStatus.SUCCEEDED == dsStatus) {
                LOG.info("Application has completed successfully. Breaking monitoring loop");
                return true;
            } else {
                LOG.info("Application did finished unsuccessfully." + " YarnState=" + state.toString()
                        + ", DSFinalStatus=" + dsStatus.toString() + ". Breaking monitoring loop");
                return false;
            }
        } else if (YarnApplicationState.KILLED == state || YarnApplicationState.FAILED == state) {
            LOG.info("Application did not finish." + " YarnState=" + state.toString() + ", DSFinalStatus="
                    + dsStatus.toString() + ". Breaking monitoring loop");
            return false;
        }

        if (System.currentTimeMillis() > (clientStartTime + clientTimeout)) {
            LOG.info("Reached client specified timeout for application. Killing application");
            forceKillApplication(appId);
            return false;
        }
    }

}

From source file:com.flyhz.avengers.framework.AvengersClient.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if
 * time expires.//from   w  w  w.  j  a  v  a2s .c  o m
 * 
 * @param appId
 *            Application Id of application to be monitored
 * @return true if application completed successfully
 * @throws YarnException
 * @throws IOException
 */
private boolean monitorApplication(ApplicationId appId) throws YarnException, IOException {

    while (true) {

        // Check app status every 10 second.
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            LOG.debug("Thread sleep in monitoring loop interrupted");
        }

        // Get application report for the appId we are interested in
        ApplicationReport report = yarnClient.getApplicationReport(appId);

        LOG.info("Got application report from ASM for" + ", appId=" + appId.getId() + ", clientToAMToken="
                + report.getClientToAMToken() + ", appDiagnostics=" + report.getDiagnostics()
                + ", appMasterHost=" + report.getHost() + ", appQueue=" + report.getQueue()
                + ", appMasterRpcPort=" + report.getRpcPort() + ", appStartTime=" + report.getStartTime()
                + ", yarnAppState=" + report.getYarnApplicationState().toString() + ", distributedFinalState="
                + report.getFinalApplicationStatus().toString() + ", appTrackingUrl=" + report.getTrackingUrl()
                + ", appUser=" + report.getUser());

        YarnApplicationState state = report.getYarnApplicationState();
        FinalApplicationStatus dsStatus = report.getFinalApplicationStatus();
        if (YarnApplicationState.FINISHED == state) {
            if (FinalApplicationStatus.SUCCEEDED == dsStatus) {
                LOG.info("Application has completed successfully. Breaking monitoring loop");
                return true;
            } else {
                LOG.info("Application did finished unsuccessfully." + " YarnState=" + state.toString()
                        + ", DSFinalStatus=" + dsStatus.toString() + ". Breaking monitoring loop");
                return false;
            }
        } else if (YarnApplicationState.KILLED == state || YarnApplicationState.FAILED == state) {
            LOG.info("Application did not finish." + " YarnState=" + state.toString() + ", DSFinalStatus="
                    + dsStatus.toString() + ". Breaking monitoring loop");
            return false;
        }

        if (System.currentTimeMillis() > (clientStartTime + clientTimeout)) {
            LOG.info("Reached client specified timeout for application. Killing application");
            forceKillApplication(appId);
            return false;
        }
    }

}