LOG.info("Query not found: " + queryIdOrTag); boolean admin = isAdmin(); switch(tagOrId) { case ID: Operation operation = operationsToKill.iterator().next(); boolean canceled = cancelOperation(operation, admin, errMsg); if (canceled) { String queryTag = operation.getQueryTag(); queryTag = queryIdOrTag; killChildYarnJobs(conf, queryTag); } else { int numCanceled = 0; for (Operation operationToKill : operationsToKill) { if (cancelOperation(operationToKill, admin, errMsg)) { numCanceled++; killChildYarnJobs(conf, queryIdOrTag); if (numCanceled == 0) { throw new HiveSQLException("No privilege"); killChildYarnJobs(conf, queryIdOrTag); break;
public static void killChildYarnJobs(Configuration conf, String tag) { try { if (tag == null) { return; } LOG.info("Killing yarn jobs using query tag:" + tag); Set<ApplicationId> childYarnJobs = getChildYarnJobs(conf, tag); if (!childYarnJobs.isEmpty()) { YarnClient yarnClient = YarnClient.createYarnClient(); yarnClient.init(conf); yarnClient.start(); for (ApplicationId app : childYarnJobs) { yarnClient.killApplication(app); } } } catch (IOException | YarnException ye) { LOG.warn("Exception occurred while killing child job({})", ye); } }
throw new HiveSQLException(e); sessionState.setKillQuery(new KillQueryImpl(operationManager)); SessionState.start(sessionState); try {
public static Set<ApplicationId> getChildYarnJobs(Configuration conf, String tag) throws IOException, YarnException { Set<ApplicationId> childYarnJobs = new HashSet<ApplicationId>(); GetApplicationsRequest gar = GetApplicationsRequest.newInstance(); gar.setScope(ApplicationsRequestScope.OWN); gar.setApplicationTags(Collections.singleton(tag)); ApplicationClientProtocol proxy = ClientRMProxy.createRMProxy(conf, ApplicationClientProtocol.class); GetApplicationsResponse apps = proxy.getApplications(gar); List<ApplicationReport> appsList = apps.getApplicationList(); for(ApplicationReport appReport : appsList) { if (isAdmin() || appReport.getApplicationTags().contains(QueryState.USERID_TAG + "=" + SessionState.get() .getUserName())) { childYarnJobs.add(appReport.getApplicationId()); } } if (childYarnJobs.isEmpty()) { LOG.info("No child applications found"); } else { LOG.info("Found child YARN applications: " + StringUtils.join(childYarnJobs, ",")); } return childYarnJobs; }
throw new HiveSQLException(e); sessionState.setKillQuery(new KillQueryImpl(operationManager)); SessionState.start(sessionState); try {