List of usage examples for org.apache.hadoop.yarn.api.records ApplicationReport getYarnApplicationState
@Public @Stable public abstract YarnApplicationState getYarnApplicationState();
YarnApplicationState
of the application. From source file:UnmanagedAMLauncher.java
License:Apache License
public boolean run() throws IOException, YarnException { LOG.info("Starting Client"); // Connect to ResourceManager rmClient.start();//from w w w.j a va 2 s . c om 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./*w ww .j a v a2s .co 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 *//*from w ww . ja va2 s . 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 ww 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 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:co.cask.cdap.operations.yarn.YarnApps.java
License:Apache License
@Override public synchronized void collect() throws Exception { reset();/*from ww w .java 2 s. c o m*/ YarnClient yarnClient = createYARNClient(); List<ApplicationReport> applications; try { applications = yarnClient.getApplications(); } finally { yarnClient.stop(); } for (ApplicationReport application : applications) { switch (application.getYarnApplicationState()) { case NEW: case NEW_SAVING: newApps++; break; case ACCEPTED: accepted++; break; case SUBMITTED: submitted++; break; case RUNNING: running++; break; case FINISHED: finished++; break; case FAILED: failed++; break; case KILLED: killed++; break; } } total = applications.size(); }
From source file:com.bigjob.Client.java
License:Apache License
/** * Monitor the submitted application for completion. * Kill application if time expires. //from ww w. java 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 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 w ww. j av 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) { 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.kitten.client.KittenClient.java
License:Open Source License
public int handle(YarnClientService service) throws Exception { service.startAndWait();/*from w w w. j a v a 2 s . c o m*/ if (!service.isRunning()) { LOG.error("Service failed to startup, exiting..."); return 1; } String trackingUrl = null; while (!service.isApplicationFinished()) { Thread.sleep(1000); if (trackingUrl == null) { ApplicationReport report = service.getApplicationReport(); if (report.getYarnApplicationState() == YarnApplicationState.RUNNING) { trackingUrl = report.getTrackingUrl(); if (trackingUrl == null || trackingUrl.isEmpty()) { LOG.info("Application is running, but did not specify a tracking URL"); trackingUrl = ""; } else { LOG.info("Master Tracking URL = " + trackingUrl); } } } } service.stopAndWait(); System.exit(0); return 0; }
From source file:com.cloudera.kitten.client.service.YarnClientServiceImpl.java
License:Open Source License
@Override protected void runOneIteration() throws Exception { if (isApplicationFinished()) { return;/*from w ww .j av a 2 s . c o m*/ } // Ensure that we haven't been running for all that long. if (parameters.getClientTimeoutMillis() > 0 && stopwatch.elapsedMillis() > parameters.getClientTimeoutMillis()) { LOG.warn("Stopping application due to timeout."); timeout = true; return; } ApplicationReport report = getApplicationReport(); if (report == null) { LOG.error("No application report received"); } else if (DONE.contains(report.getYarnApplicationState())) { finalReport = report; } }