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

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

Introduction

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

Prototype

@Public
@Stable
public abstract FinalApplicationStatus getFinalApplicationStatus();

Source Link

Document

Get the final finish status of the application.

Usage

From source file:UnmanagedAMLauncher.java

License:Apache License

public boolean run() throws IOException, YarnException {
    LOG.info("Starting Client");

    // Connect to ResourceManager
    rmClient.start();/*w ww.  ja  v a  2 s  .  co m*/
    try {
        // Create launch context for app master
        LOG.info("Setting up application submission context for ASM");
        ApplicationSubmissionContext appContext = rmClient.createApplication()
                .getApplicationSubmissionContext();
        ApplicationId appId = appContext.getApplicationId();

        // 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);

        ApplicationReport appReport = monitorApplication(appId, EnumSet.of(YarnApplicationState.ACCEPTED,
                YarnApplicationState.KILLED, YarnApplicationState.FAILED, YarnApplicationState.FINISHED));

        if (appReport.getYarnApplicationState() == YarnApplicationState.ACCEPTED) {
            // Monitor the application attempt to wait for launch state
            ApplicationAttemptReport attemptReport = monitorCurrentAppAttempt(appId,
                    YarnApplicationAttemptState.LAUNCHED);
            ApplicationAttemptId attemptId = attemptReport.getApplicationAttemptId();
            LOG.info("Launching AM with application attempt id " + attemptId);
            // launch AM
            launchAM(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:UnmanagedAMLauncher.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if time
 * expires./*from ww  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 ApplicationReport monitorApplication(ApplicationId appId, Set<YarnApplicationState> finalState)
        throws YarnException, IOException {

    long foundAMCompletedTime = 0;
    StringBuilder expectedFinalState = new StringBuilder();
    boolean first = true;
    for (YarnApplicationState state : finalState) {
        if (first) {
            first = false;
            expectedFinalState.append(state.name());
        } else {
            expectedFinalState.append("," + state.name());
        }
    }

    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() + ", 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();
        if (finalState.contains(state)) {
            return report;
        }

        // wait for 10 seconds after process has completed for app report to
        // come back
        if (amCompleted) {
            if (foundAMCompletedTime == 0) {
                foundAMCompletedTime = System.currentTimeMillis();
            } else if ((System.currentTimeMillis() - foundAMCompletedTime) > AM_STATE_WAIT_TIMEOUT_MS) {
                LOG.warn("Waited " + AM_STATE_WAIT_TIMEOUT_MS / 1000
                        + " seconds after process completed for AppReport"
                        + " to reach desired final state. Not waiting anymore." + "CurrentState = " + state
                        + ", ExpectedStates = " + expectedFinalState.toString());
                throw new RuntimeException("Failed to receive final expected state" + " in ApplicationReport"
                        + ", CurrentState=" + state + ", ExpectedStates=" + expectedFinalState.toString());
            }
        }
    }
}

From source file:alluxio.yarn.Client.java

License:Apache License

/**
 * Monitor the submitted application until app is running, finished, killed or failed.
 *
 * @throws YarnException if errors occur when obtaining application report from ResourceManager
 * @throws IOException if errors occur when obtaining application report from ResourceManager
 */// w ww. j ava2s .  c o m
private void monitorApplication() throws YarnException, IOException {
    while (true) {
        // Check app status every 5 seconds
        CommonUtils.sleepMs(5 * Constants.SECOND_MS);
        // Get application report for the appId we are interested in
        ApplicationReport report = mYarnClient.getApplicationReport(mAppId);

        YarnApplicationState state = report.getYarnApplicationState();
        FinalApplicationStatus dsStatus = report.getFinalApplicationStatus();
        switch (state) {
        case RUNNING:
            System.out.println("Application is running. Tracking url is " + report.getTrackingUrl());
            return;
        case FINISHED:
            if (FinalApplicationStatus.SUCCEEDED == dsStatus) {
                System.out.println("Application has completed successfully");
            } else {
                System.out.println("Application finished unsuccessfully. YarnState=" + state.toString()
                        + ", DSFinalStatus=" + dsStatus.toString());
            }
            return;
        case KILLED: // intended to fall through
        case FAILED:
            System.out.println("Application did not finish. YarnState=" + state.toString() + ", DSFinalStatus="
                    + dsStatus.toString());
            return;
        default:
            System.out.println("Application is in state " + state + ". Waiting.");
        }
    }
}

From source file:cn.edu.buaa.act.petuumOnYarn.Client.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if
 * time expires.//from w w w.  j a v  a 2  s  .  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 finished unsuccessfully." + " YarnState=" + state.toString()
                        + ", FinalStatus=" + dsStatus.toString() + ". Breaking monitoring loop");
                return false;
            }
        } else if (YarnApplicationState.KILLED == state || YarnApplicationState.FAILED == state) {
            LOG.info("Application did not finish." + " YarnState=" + state.toString() + ", FinalStatus="
                    + dsStatus.toString() + ". Breaking monitoring loop");
            return false;
        }
    }

}

From source file:com.bigjob.Client.java

License:Apache License

/**
 * Monitor the submitted application for completion. 
 * Kill application if time expires. /*w  w  w .  j  a  v a2  s  .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.cfets.door.yarn.jboss.JBossClient.java

License:Apache License

/**
 * Monitor the submitted application for completion. Kill application if
 * time expires.//from   www.  ja  v a  2  s  . 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) {

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            LOG.finest("Thread sleep in monitoring loop interrupted");
        }

        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 jbossStatus = report.getFinalApplicationStatus();
        if (YarnApplicationState.FINISHED == state) {
            if (FinalApplicationStatus.SUCCEEDED == jbossStatus) {
                LOG.info("Application has completed successfully. Breaking monitoring loop");
                return true;
            } else {
                LOG.info("Application did finished unsuccessfully." + " YarnState=" + state.toString()
                        + ", JBASFinalStatus=" + jbossStatus.toString() + ". Breaking monitoring loop");
                return false;
            }
        } else if (YarnApplicationState.KILLED == state || YarnApplicationState.FAILED == state) {
            LOG.info("Application did not finish." + " YarnState=" + state.toString() + ", JBASFinalStatus="
                    + jbossStatus.toString() + ". Breaking monitoring loop");
            return false;
        }
    }
}

From source file:com.cloudera.branchreduce.impl.thrift.Client.java

License:Open Source License

@Override
public int handle(YarnClientService clientService) throws Exception {
    clientService.startAndWait();/*from  w  w  w  .  j a  v  a  2 s . c o  m*/
    if (!clientService.isRunning()) {
        LOG.error("BranchReduce job did not start, exiting...");
        return 1;
    }

    Lord.Client client = null;
    while (clientService.isRunning()) {
        ApplicationReport report = clientService.getApplicationReport();
        if (report.getYarnApplicationState() == YarnApplicationState.RUNNING) {
            String originalTrackingUrl = report.getOriginalTrackingUrl();
            if (originalTrackingUrl != null && originalTrackingUrl.contains(":")) {
                System.out.println("Original Tracking URL = " + originalTrackingUrl);
                String[] pieces = originalTrackingUrl.split(":");
                TSocket socket = new TSocket(pieces[0], Integer.valueOf(pieces[1]));
                TProtocol protocol = new TBinaryProtocol(socket);
                client = new Lord.Client(protocol);
                socket.open();
                break;
            }
        }
    }

    if (client == null) {
        LOG.error("Could not connect to thrift service to get status");
        return 1;
    }

    Configuration conf = clientService.getParameters().getConfiguration();
    Class<GlobalState> globalStatusClass = (Class<GlobalState>) conf
            .getClass(BranchReduceConfig.GLOBAL_STATE_CLASS, GlobalState.class);

    boolean finished = false;
    while (!clientService.isApplicationFinished()) {
        if (!finished) {
            GlobalStatusResponse resp = client.getGlobalStatus(new GlobalStatusRequest());
            this.value = Writables.fromByteBuffer(resp.bufferForGlobalState(), globalStatusClass);
            if (resp.isFinished()) {
                LOG.info("Job finished running.");
                finished = true;
            }
            LOG.info(value);
        }
        Thread.sleep(1000);
    }

    clientService.stopAndWait();
    ApplicationReport report = clientService.getFinalReport();
    if (report.getFinalApplicationStatus() == FinalApplicationStatus.SUCCEEDED) {
        System.out.println("Job complete.");
        System.out.println(value);
        return 0;
    } else {
        System.out.println("Final app state: " + report.getFinalApplicationStatus());
        System.out.println("Last global state:");
        System.out.println(value);
        return 1;
    }
}

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

License:Apache License

private synchronized void _stop(FinalApplicationStatus status, String msg, boolean stopYarnClient) {
    if (containerHandlerExecutor != null) {
        containerHandlerExecutor.shutdownNow();
        containerHandlerExecutor = null;
    }/*w  w  w. ja  v  a 2s .  c om*/
    if (amRmClientAsync != null) {
        LOG.debug("Stopping AM '{}'", appId);
        try {
            amRmClientAsync.unregisterApplicationMaster(status, msg, "");
        } catch (Exception ex) {
            LOG.warn("Error un-registering AM client, " + ex, ex);
        }
        amRmClientAsync.stop();
        amRmClientAsync = null;
    }
    if (stopYarnClient) {
        if (yarnClient != null) {
            try {
                ApplicationReport report = _monitorAppState(yarnClient, appId, STOPPED, true);
                if (report.getFinalApplicationStatus() != FinalApplicationStatus.SUCCEEDED) {
                    LOG.warn("Problem stopping application, final status '{}'",
                            report.getFinalApplicationStatus());
                }
            } catch (Exception ex) {
                LOG.warn("Error stopping application, " + ex, ex);
            }
            yarnClient.stop();
            yarnClient = null;
        }
    }
    if (nmClient != null) {
        //TODO this is introducing a deadlock
        //nmClient.stop();
    }
}

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

License:Apache License

private JSONObject getResource(StramAgent.StramUriSpec uriSpec, ApplicationReport appReport,
        WebServicesClient.WebServicesHandler handler) {

    if (appReport == null) {
        throw new CliException("No application selected");
    }//from w  w  w. j a va  2s  .  c om

    if (StringUtils.isEmpty(appReport.getTrackingUrl())
            || appReport.getFinalApplicationStatus() != FinalApplicationStatus.UNDEFINED) {
        appReport = null;
        throw new CliException("Application terminated");
    }

    WebServicesClient wsClient = new WebServicesClient();
    try {
        return stramAgent.issueStramWebRequest(wsClient, appReport.getApplicationId().toString(), uriSpec,
                handler);
    } catch (Exception e) {
        // check the application status as above may have failed due application termination etc.
        if (appReport == currentApp) {
            currentApp = assertRunningApp(appReport);
        }
        throw new CliException(
                "Failed to request web service for appid " + appReport.getApplicationId().toString(), e);
    }
}

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;//from  w  w  w .jav  a2s . co m
}