MAPREDUCE-5517. Fixed MapReduce ApplicationMaster to not validate reduce side resource configuration for deciding uber-mode on map-only jobs. Contributed by Siqi Li.
svn merge --ignore-ancestry -c 1608595 ../../trunk/ git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2.5@1608598 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ef0079813d
commit
744876efc0
|
@ -137,6 +137,10 @@ Release 2.5.0 - UNRELEASED
|
||||||
MAPREDUCE-5868. Fixed an issue with TestPipeApplication that was causing the
|
MAPREDUCE-5868. Fixed an issue with TestPipeApplication that was causing the
|
||||||
nightly builds to fail. (Akira Ajisaka via vinodkv)
|
nightly builds to fail. (Akira Ajisaka via vinodkv)
|
||||||
|
|
||||||
|
MAPREDUCE-5517. Fixed MapReduce ApplicationMaster to not validate reduce side
|
||||||
|
resource configuration for deciding uber-mode on map-only jobs. (Siqi Li via
|
||||||
|
vinodkv)
|
||||||
|
|
||||||
Release 2.4.1 - 2014-06-23
|
Release 2.4.1 - 2014-06-23
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -1218,22 +1218,25 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
||||||
boolean smallNumReduceTasks = (numReduceTasks <= sysMaxReduces);
|
boolean smallNumReduceTasks = (numReduceTasks <= sysMaxReduces);
|
||||||
boolean smallInput = (dataInputLength <= sysMaxBytes);
|
boolean smallInput = (dataInputLength <= sysMaxBytes);
|
||||||
// ignoring overhead due to UberAM and statics as negligible here:
|
// ignoring overhead due to UberAM and statics as negligible here:
|
||||||
|
long requiredMapMB = conf.getLong(MRJobConfig.MAP_MEMORY_MB, 0);
|
||||||
|
long requiredReduceMB = conf.getLong(MRJobConfig.REDUCE_MEMORY_MB, 0);
|
||||||
|
long requiredMB = Math.max(requiredMapMB, requiredReduceMB);
|
||||||
|
int requiredMapCores = conf.getInt(
|
||||||
|
MRJobConfig.MAP_CPU_VCORES,
|
||||||
|
MRJobConfig.DEFAULT_MAP_CPU_VCORES);
|
||||||
|
int requiredReduceCores = conf.getInt(
|
||||||
|
MRJobConfig.REDUCE_CPU_VCORES,
|
||||||
|
MRJobConfig.DEFAULT_REDUCE_CPU_VCORES);
|
||||||
|
int requiredCores = Math.max(requiredMapCores, requiredReduceCores);
|
||||||
|
if (numReduceTasks == 0) {
|
||||||
|
requiredMB = requiredMapMB;
|
||||||
|
requiredCores = requiredMapCores;
|
||||||
|
}
|
||||||
boolean smallMemory =
|
boolean smallMemory =
|
||||||
( (Math.max(conf.getLong(MRJobConfig.MAP_MEMORY_MB, 0),
|
(requiredMB <= sysMemSizeForUberSlot)
|
||||||
conf.getLong(MRJobConfig.REDUCE_MEMORY_MB, 0))
|
|| (sysMemSizeForUberSlot == JobConf.DISABLED_MEMORY_LIMIT);
|
||||||
<= sysMemSizeForUberSlot)
|
|
||||||
|| (sysMemSizeForUberSlot == JobConf.DISABLED_MEMORY_LIMIT));
|
boolean smallCpu = requiredCores <= sysCPUSizeForUberSlot;
|
||||||
boolean smallCpu =
|
|
||||||
(
|
|
||||||
Math.max(
|
|
||||||
conf.getInt(
|
|
||||||
MRJobConfig.MAP_CPU_VCORES,
|
|
||||||
MRJobConfig.DEFAULT_MAP_CPU_VCORES),
|
|
||||||
conf.getInt(
|
|
||||||
MRJobConfig.REDUCE_CPU_VCORES,
|
|
||||||
MRJobConfig.DEFAULT_REDUCE_CPU_VCORES))
|
|
||||||
<= sysCPUSizeForUberSlot
|
|
||||||
);
|
|
||||||
boolean notChainJob = !isChainJob(conf);
|
boolean notChainJob = !isChainJob(conf);
|
||||||
|
|
||||||
// User has overall veto power over uberization, or user can modify
|
// User has overall veto power over uberization, or user can modify
|
||||||
|
|
|
@ -657,6 +657,15 @@ public class TestJobImpl {
|
||||||
conf.setInt(MRJobConfig.JOB_UBERTASK_MAXMAPS, 1);
|
conf.setInt(MRJobConfig.JOB_UBERTASK_MAXMAPS, 1);
|
||||||
isUber = testUberDecision(conf);
|
isUber = testUberDecision(conf);
|
||||||
Assert.assertFalse(isUber);
|
Assert.assertFalse(isUber);
|
||||||
|
|
||||||
|
// enable uber mode of 0 reducer no matter how much memory assigned to reducer
|
||||||
|
conf = new Configuration();
|
||||||
|
conf.setBoolean(MRJobConfig.JOB_UBERTASK_ENABLE, true);
|
||||||
|
conf.setInt(MRJobConfig.NUM_REDUCES, 0);
|
||||||
|
conf.setInt(MRJobConfig.REDUCE_MEMORY_MB, 2048);
|
||||||
|
conf.setInt(MRJobConfig.REDUCE_CPU_VCORES, 10);
|
||||||
|
isUber = testUberDecision(conf);
|
||||||
|
Assert.assertTrue(isUber);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean testUberDecision(Configuration conf) {
|
private boolean testUberDecision(Configuration conf) {
|
||||||
|
|
Loading…
Reference in New Issue