Revert "OOZIE-2729 Kill all actions after each unit test. This fixes the scenario when multiple actions remained RUNNING during execution of a test suite and had been consuming resources (memory, vcores)."
This reverts commit a67128165d067c15483acf3ed80531dbe3f6970e. Change-Id: I4213d541a5854cbf696c3980863a933e2a69c1c8 Project: http://git-wip-us.apache.org/repos/asf/oozie/repo Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/6789d362 Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/6789d362 Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/6789d362 Branch: refs/heads/oya Commit: 6789d362f82451a542ba610027c2021344b1e7f9 Parents: 6cd07c2 Author: Peter Bacsko <[email protected]> Authored: Tue Nov 29 12:27:42 2016 +0100 Committer: Peter Bacsko <[email protected]> Committed: Tue Nov 29 12:27:42 2016 +0100 ---------------------------------------------------------------------- .../wf/TestWorkflowActionKillXCommand.java | 12 +- .../java/org/apache/oozie/test/XTestCase.java | 8 +- .../apache/oozie/action/hadoop/DistcpMain.java | 2 +- .../apache/oozie/action/hadoop/HiveMain.java | 2 +- .../apache/oozie/action/hadoop/Hive2Main.java | 2 +- .../apache/oozie/action/hadoop/JavaMain.java | 2 +- .../oozie/action/hadoop/LauncherMain.java | 76 ++++++++ .../oozie/action/hadoop/MapReduceMain.java | 2 +- .../oozie/action/hadoop/YarnJobActions.java | 181 ------------------- .../org/apache/oozie/action/hadoop/PigMain.java | 2 +- .../apache/oozie/action/hadoop/SparkMain.java | 2 +- .../apache/oozie/action/hadoop/SqoopMain.java | 2 +- 12 files changed, 91 insertions(+), 202 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowActionKillXCommand.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowActionKillXCommand.java b/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowActionKillXCommand.java index 05ceb90..ef75f14 100644 --- a/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowActionKillXCommand.java +++ b/core/src/test/java/org/apache/oozie/command/wf/TestWorkflowActionKillXCommand.java @@ -31,7 +31,6 @@ import org.apache.oozie.WorkflowActionBean; import org.apache.oozie.WorkflowJobBean; import org.apache.oozie.action.hadoop.LauncherMain; import org.apache.oozie.action.hadoop.MapperReducerForTest; -import org.apache.oozie.action.hadoop.YarnJobActions; import org.apache.oozie.client.WorkflowAction; import org.apache.oozie.client.WorkflowJob; import org.apache.oozie.executor.jpa.JPAExecutorException; @@ -44,6 +43,8 @@ import org.apache.oozie.service.UUIDService; import org.apache.oozie.test.XDataTestCase; import org.apache.oozie.workflow.WorkflowInstance; +import com.google.common.collect.Sets; + public class TestWorkflowActionKillXCommand extends XDataTestCase { private Services services; @@ -171,13 +172,8 @@ public class TestWorkflowActionKillXCommand extends XDataTestCase { System.setProperty(LauncherMain.OOZIE_JOB_LAUNCH_TIME, String.valueOf(System.currentTimeMillis())); jobClient.submitJob(jobConf); - - final Set<ApplicationId> apps = new YarnJobActions.Builder(jobConf, ApplicationsRequestScope.ALL) - .checkApplicationTags(true) - .checkStartRange(true) - .build() - .getYarnJobs(); - + Set<ApplicationId> apps = Sets.newHashSet(); + apps = LauncherMain.getChildYarnJobs(jobConf, ApplicationsRequestScope.ALL); assertEquals("Number of YARN apps", apps.size(), 1); sleepjob.close(); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/core/src/test/java/org/apache/oozie/test/XTestCase.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/test/XTestCase.java b/core/src/test/java/org/apache/oozie/test/XTestCase.java index 711d41d..020d8d1 100644 --- a/core/src/test/java/org/apache/oozie/test/XTestCase.java +++ b/core/src/test/java/org/apache/oozie/test/XTestCase.java @@ -916,9 +916,9 @@ public abstract class XTestCase extends TestCase { private void setUpEmbeddedHadoop(String testCaseDir) throws Exception { if (dfsCluster == null && mrCluster == null) { - if (System.getProperty("hadoop.log.dir") == null) { - System.setProperty("hadoop.log.dir", testCaseDir); - } + if (System.getProperty("hadoop.log.dir") == null) { + System.setProperty("hadoop.log.dir", testCaseDir); + } // Tell the ClasspathUtils that we're using a mini cluster ClasspathUtils.setUsingMiniYarnCluster(true); int taskTrackers = 2; @@ -1083,7 +1083,6 @@ public abstract class XTestCase extends TestCase { catch (Exception ex) { System.out.println(ex); } - try { if (dfsCluster != null) { dfsCluster.shutdown(); @@ -1311,4 +1310,3 @@ public abstract class XTestCase extends TestCase { } } - http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/distcp/src/main/java/org/apache/oozie/action/hadoop/DistcpMain.java ---------------------------------------------------------------------- diff --git a/sharelib/distcp/src/main/java/org/apache/oozie/action/hadoop/DistcpMain.java b/sharelib/distcp/src/main/java/org/apache/oozie/action/hadoop/DistcpMain.java index fc37e3c..40c81ba 100644 --- a/sharelib/distcp/src/main/java/org/apache/oozie/action/hadoop/DistcpMain.java +++ b/sharelib/distcp/src/main/java/org/apache/oozie/action/hadoop/DistcpMain.java @@ -51,7 +51,7 @@ public class DistcpMain extends JavaMain { protected void run(String[] args) throws Exception { Configuration actionConf = loadActionConf(); - YarnJobActions.killChildYarnJobs(actionConf); + LauncherMain.killChildYarnJobs(actionConf); String logFile = setUpDistcpLog4J(actionConf); Class<?> klass = actionConf.getClass(LauncherMapper.CONF_OOZIE_ACTION_MAIN_CLASS, org.apache.hadoop.tools.DistCp.class); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/hive/src/main/java/org/apache/oozie/action/hadoop/HiveMain.java ---------------------------------------------------------------------- diff --git a/sharelib/hive/src/main/java/org/apache/oozie/action/hadoop/HiveMain.java b/sharelib/hive/src/main/java/org/apache/oozie/action/hadoop/HiveMain.java index 320dbd5..242cd6c 100644 --- a/sharelib/hive/src/main/java/org/apache/oozie/action/hadoop/HiveMain.java +++ b/sharelib/hive/src/main/java/org/apache/oozie/action/hadoop/HiveMain.java @@ -306,7 +306,7 @@ public class HiveMain extends LauncherMain { } System.out.println(); - YarnJobActions.killChildYarnJobs(hiveConf); + LauncherMain.killChildYarnJobs(hiveConf); System.out.println("================================================================="); System.out.println(); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/hive2/src/main/java/org/apache/oozie/action/hadoop/Hive2Main.java ---------------------------------------------------------------------- diff --git a/sharelib/hive2/src/main/java/org/apache/oozie/action/hadoop/Hive2Main.java b/sharelib/hive2/src/main/java/org/apache/oozie/action/hadoop/Hive2Main.java index 8bf233f..b418b89 100644 --- a/sharelib/hive2/src/main/java/org/apache/oozie/action/hadoop/Hive2Main.java +++ b/sharelib/hive2/src/main/java/org/apache/oozie/action/hadoop/Hive2Main.java @@ -229,7 +229,7 @@ public class Hive2Main extends LauncherMain { } System.out.println(); - YarnJobActions.killChildYarnJobs(actionConf); + LauncherMain.killChildYarnJobs(actionConf); System.out.println("================================================================="); System.out.println(); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/JavaMain.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/JavaMain.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/JavaMain.java index e9c5585..0815318 100644 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/JavaMain.java +++ b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/JavaMain.java @@ -44,7 +44,7 @@ public class JavaMain extends LauncherMain { setApplicationTags(actionConf, TEZ_APPLICATION_TAGS); setApplicationTags(actionConf, SPARK_YARN_TAGS); - YarnJobActions.killChildYarnJobs(actionConf); + LauncherMain.killChildYarnJobs(actionConf); Class<?> klass = actionConf.getClass(JAVA_MAIN_CLASS, Object.class); System.out.println("Java action main class : " + klass.getName()); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherMain.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherMain.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherMain.java index 0ce2055..31200af 100644 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherMain.java +++ b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherMain.java @@ -125,6 +125,82 @@ public abstract class LauncherMain { } } + public static Set<ApplicationId> getChildYarnJobs(Configuration actionConf) { + return getChildYarnJobs(actionConf, ApplicationsRequestScope.OWN); + } + + public static Set<ApplicationId> getChildYarnJobs(Configuration actionConf, ApplicationsRequestScope scope) { + System.out.println("Fetching child yarn jobs"); + Set<ApplicationId> childYarnJobs = new HashSet<ApplicationId>(); + String tag = actionConf.get(CHILD_MAPREDUCE_JOB_TAGS); + if (tag == null) { + System.out.print("Could not find Yarn tags property " + CHILD_MAPREDUCE_JOB_TAGS); + return childYarnJobs; + } + System.out.println("tag id : " + tag); + long startTime = 0L; + try { + startTime = Long.parseLong(System.getProperty(OOZIE_JOB_LAUNCH_TIME)); + } catch(NumberFormatException nfe) { + throw new RuntimeException("Could not find Oozie job launch time", nfe); + } + + GetApplicationsRequest gar = GetApplicationsRequest.newInstance(); + gar.setScope(scope); + gar.setApplicationTags(Collections.singleton(tag)); + + long endTime = System.currentTimeMillis(); + if (startTime > endTime) { + System.out.println("WARNING: Clock skew between the Oozie server host and this host detected. Please fix this. " + + "Attempting to work around..."); + // We don't know which one is wrong (relative to the RM), so to be safe, let's assume they're both wrong and add an + // offset in both directions + long diff = 2 * (startTime - endTime); + startTime = startTime - diff; + endTime = endTime + diff; + } + gar.setStartRange(startTime, endTime); + try { + ApplicationClientProtocol proxy = ClientRMProxy.createRMProxy(actionConf, ApplicationClientProtocol.class); + GetApplicationsResponse apps = proxy.getApplications(gar); + List<ApplicationReport> appsList = apps.getApplicationList(); + for(ApplicationReport appReport : appsList) { + childYarnJobs.add(appReport.getApplicationId()); + } + } catch (IOException ioe) { + throw new RuntimeException("Exception occurred while finding child jobs", ioe); + } catch (YarnException ye) { + throw new RuntimeException("Exception occurred while finding child jobs", ye); + } + + System.out.println("Child yarn jobs are found - " + StringUtils.join(childYarnJobs, ",")); + return childYarnJobs; + } + + public static void killChildYarnJobs(Configuration actionConf) { + try { + Set<ApplicationId> childYarnJobs = getChildYarnJobs(actionConf); + if (!childYarnJobs.isEmpty()) { + System.out.println(); + System.out.println("Found [" + childYarnJobs.size() + "] Map-Reduce jobs from this launcher"); + System.out.println("Killing existing jobs and starting over:"); + YarnClient yarnClient = YarnClient.createYarnClient(); + yarnClient.init(actionConf); + yarnClient.start(); + for (ApplicationId app : childYarnJobs) { + System.out.print("Killing job [" + app + "] ... "); + yarnClient.killApplication(app); + System.out.println("Done"); + } + System.out.println(); + } + } catch (YarnException ye) { + throw new RuntimeException("Exception occurred while killing child job(s)", ye); + } catch (IOException ioe) { + throw new RuntimeException("Exception occurred while killing child job(s)", ioe); + } + } + protected abstract void run(String[] args) throws Exception; /** http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/MapReduceMain.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/MapReduceMain.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/MapReduceMain.java index ba7324f..16cf4b1 100644 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/MapReduceMain.java +++ b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/MapReduceMain.java @@ -50,7 +50,7 @@ public class MapReduceMain extends LauncherMain { JobConf jobConf = new JobConf(); addActionConf(jobConf, actionConf); - YarnJobActions.killChildYarnJobs(jobConf); + LauncherMain.killChildYarnJobs(jobConf); // Run a config class if given to update the job conf runConfigClass(jobConf); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/YarnJobActions.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/YarnJobActions.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/YarnJobActions.java deleted file mode 100644 index 0224362..0000000 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/YarnJobActions.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.oozie.action.hadoop; - -import com.google.common.collect.Sets; -import com.google.common.io.Closeables; -import org.apache.commons.lang.StringUtils; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.yarn.api.ApplicationClientProtocol; -import org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope; -import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest; -import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; -import org.apache.hadoop.yarn.api.records.ApplicationId; -import org.apache.hadoop.yarn.api.records.ApplicationReport; -import org.apache.hadoop.yarn.client.ClientRMProxy; -import org.apache.hadoop.yarn.client.api.YarnClient; -import org.apache.hadoop.yarn.exceptions.YarnException; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -public class YarnJobActions { - private final Configuration configuration; - private final ApplicationsRequestScope scope; - private final boolean checkApplicationTags; - private final boolean checkStartRange; - - private YarnJobActions(final Configuration configuration, - final ApplicationsRequestScope scope, - final boolean checkApplicationTags, - final boolean checkStartRange) { - this.configuration = configuration; - this.scope = scope; - this.checkApplicationTags = checkApplicationTags; - this.checkStartRange = checkStartRange; - } - - public Set<ApplicationId> getYarnJobs() { - System.out.println(String.format("Fetching yarn jobs. [scope=%s;checkApplicationTags=%s;checkStartRange=%s]", - scope, checkApplicationTags, checkStartRange)); - - final Set<ApplicationId> childYarnJobs = Sets.newHashSet(); - final GetApplicationsRequest gar = GetApplicationsRequest.newInstance(); - gar.setScope(scope); - - if (checkApplicationTags) { - final String tag = configuration.get(LauncherMain.CHILD_MAPREDUCE_JOB_TAGS); - if (tag == null) { - System.out.println("Could not find Yarn tags property " + LauncherMain.CHILD_MAPREDUCE_JOB_TAGS); - return childYarnJobs; - } - System.out.println("tag id : " + tag); - gar.setApplicationTags(Collections.singleton(tag)); - } - - if (checkStartRange) { - long startTime; - try { - startTime = Long.parseLong(System.getProperty(LauncherMain.OOZIE_JOB_LAUNCH_TIME)); - } catch (final NumberFormatException nfe) { - throw new RuntimeException("Could not find Oozie job launch time", nfe); - } - - - long endTime = System.currentTimeMillis(); - if (startTime > endTime) { - System.out.println("WARNING: Clock skew between the Oozie server host and this host detected. Please fix this. " + - "Attempting to work around..."); - // We don't know which one is wrong (relative to the RM), so to be safe, let's assume they're both wrong and add an - // offset in both directions - final long diff = 2 * (startTime - endTime); - startTime = startTime - diff; - endTime = endTime + diff; - } - gar.setStartRange(startTime, endTime); - } - - try { - final ApplicationClientProtocol proxy = ClientRMProxy.createRMProxy(configuration, ApplicationClientProtocol.class); - final GetApplicationsResponse apps = proxy.getApplications(gar); - final List<ApplicationReport> appsList = apps.getApplicationList(); - for (final ApplicationReport appReport : appsList) { - childYarnJobs.add(appReport.getApplicationId()); - } - } catch (final IOException | YarnException e) { - throw new RuntimeException("Exception occurred while finding child jobs", e); - } - - System.out.println("Child yarn jobs are found - " + StringUtils.join(childYarnJobs, ",")); - return childYarnJobs; - } - - static void killChildYarnJobs(final Configuration actionConf) { - final YarnJobActions yarnJobActions = new Builder(actionConf, ApplicationsRequestScope.OWN) - .build(); - final Set<ApplicationId> childYarnJobs = yarnJobActions.getYarnJobs(); - - yarnJobActions.killSelectedYarnJobs(childYarnJobs); - } - - public void killSelectedYarnJobs(final Set<ApplicationId> selectedApplicationIds) { - final YarnClient yarnClient = createYarnClient(); - - try { - if (!selectedApplicationIds.isEmpty()) { - System.out.println(""); - System.out.println("Found [" + selectedApplicationIds.size() + "] Map-Reduce jobs from this launcher"); - System.out.println("Killing existing jobs and starting over:"); - - for (final ApplicationId app : selectedApplicationIds) { - System.out.println("Killing job [" + app + "] ... "); - - yarnClient.killApplication(app); - - System.out.println("Done"); - } - - System.out.println(""); - } - } catch (final YarnException | IOException e) { - throw new RuntimeException("Exception occurred while killing child job(s)", e); - } finally { - Closeables.closeQuietly(yarnClient); - } - } - - private YarnClient createYarnClient() { - final YarnClient yarnClient = YarnClient.createYarnClient(); - - yarnClient.init(configuration); - yarnClient.start(); - - return yarnClient; - } - - public static class Builder { - private final Configuration configuration; - private final ApplicationsRequestScope scope; - private boolean checkApplicationTags = false; - private boolean checkStartRange = false; - - public Builder(final Configuration configuration, final ApplicationsRequestScope scope) { - this.configuration = configuration; - this.scope = scope; - } - - public Builder checkApplicationTags(final boolean checkApplicationTags) { - this.checkApplicationTags = checkApplicationTags; - - return this; - } - - public Builder checkStartRange(final boolean checkStartRange) { - this.checkStartRange = checkStartRange; - - return this; - } - - public YarnJobActions build() { - return new YarnJobActions(configuration, scope, checkApplicationTags, checkStartRange); - } - } -} http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/pig/src/main/java/org/apache/oozie/action/hadoop/PigMain.java ---------------------------------------------------------------------- diff --git a/sharelib/pig/src/main/java/org/apache/oozie/action/hadoop/PigMain.java b/sharelib/pig/src/main/java/org/apache/oozie/action/hadoop/PigMain.java index 98929c0..0029dd0 100644 --- a/sharelib/pig/src/main/java/org/apache/oozie/action/hadoop/PigMain.java +++ b/sharelib/pig/src/main/java/org/apache/oozie/action/hadoop/PigMain.java @@ -217,7 +217,7 @@ public class PigMain extends LauncherMain { System.out.println(" " + arg); } - YarnJobActions.killChildYarnJobs(actionConf); + LauncherMain.killChildYarnJobs(actionConf); System.out.println("================================================================="); System.out.println(); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/spark/src/main/java/org/apache/oozie/action/hadoop/SparkMain.java ---------------------------------------------------------------------- diff --git a/sharelib/spark/src/main/java/org/apache/oozie/action/hadoop/SparkMain.java b/sharelib/spark/src/main/java/org/apache/oozie/action/hadoop/SparkMain.java index 7f35cc1..f278075 100644 --- a/sharelib/spark/src/main/java/org/apache/oozie/action/hadoop/SparkMain.java +++ b/sharelib/spark/src/main/java/org/apache/oozie/action/hadoop/SparkMain.java @@ -85,7 +85,7 @@ public class SparkMain extends LauncherMain { prepareHadoopConfig(actionConf); setYarnTag(actionConf); - YarnJobActions.killChildYarnJobs(actionConf); + LauncherMain.killChildYarnJobs(actionConf); String logFile = setUpSparkLog4J(actionConf); List<String> sparkArgs = new ArrayList<String>(); http://git-wip-us.apache.org/repos/asf/oozie/blob/6789d362/sharelib/sqoop/src/main/java/org/apache/oozie/action/hadoop/SqoopMain.java ---------------------------------------------------------------------- diff --git a/sharelib/sqoop/src/main/java/org/apache/oozie/action/hadoop/SqoopMain.java b/sharelib/sqoop/src/main/java/org/apache/oozie/action/hadoop/SqoopMain.java index 29e2966..92c960f 100644 --- a/sharelib/sqoop/src/main/java/org/apache/oozie/action/hadoop/SqoopMain.java +++ b/sharelib/sqoop/src/main/java/org/apache/oozie/action/hadoop/SqoopMain.java @@ -171,7 +171,7 @@ public class SqoopMain extends LauncherMain { System.out.println(" " + arg); } - YarnJobActions.killChildYarnJobs(sqoopConf); + LauncherMain.killChildYarnJobs(sqoopConf); System.out.println("================================================================="); System.out.println();
