MAPREDUCE-3375. [Gridmix] Memory Emulation system tests. (Vinay Thota via amarrk)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1201999 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
29ef7ef0df
commit
c799c3b2e7
|
@ -7,6 +7,8 @@ Release 0.23.1 - Unreleased
|
||||||
NEW FEATURES
|
NEW FEATURES
|
||||||
|
|
||||||
IMPROVEMENTS
|
IMPROVEMENTS
|
||||||
|
MAPREDUCE-3375. [Gridmix] Memory Emulation system tests.
|
||||||
|
(Vinay Thota via amarrk)
|
||||||
|
|
||||||
MAPREDUCE-2733. [Gridmix] Gridmix3 cpu emulation system tests.
|
MAPREDUCE-2733. [Gridmix] Gridmix3 cpu emulation system tests.
|
||||||
(Vinay Thota via amarrk)
|
(Vinay Thota via amarrk)
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/**
|
||||||
|
* 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.hadoop.mapred.gridmix;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixConfig;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixRunMode;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.UtilsForGridmix;
|
||||||
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link Gridmix} memory emulation feature for the jobs with
|
||||||
|
* custom progress interval, different input data, submission policies
|
||||||
|
* and user resolver modes. Verify the total heap usage of map and reduce
|
||||||
|
* tasks of the jobs with corresponding original job in the trace.
|
||||||
|
*/
|
||||||
|
public class TestMemEmulForMapsAndReducesWithCustomIntrvl
|
||||||
|
extends GridmixSystemTestCase {
|
||||||
|
private static final Log LOG =
|
||||||
|
LogFactory.getLog("TestMemEmulForMapsAndReducesWithCustomIntrvl.class");
|
||||||
|
/**
|
||||||
|
* Generate compressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with custom progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps and reduces total heap memory usage of {@link Gridmix} jobs
|
||||||
|
* with corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForReducesWithCompressedInputCase7()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = 1024 * 7;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
RoundRobinUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
"file://" + UtilsForGridmix.getProxyUsersFile(conf),
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_MEMORY_CUSTOM_INTRVL + "=0.3F",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uncompressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with custom progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps and reduces total heap memory usage of {@link Gridmix} jobs
|
||||||
|
* with corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForReducesWithUncompressedInputCase8()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = cSize * 300;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
SubmitterUserResolver.class.getName(),
|
||||||
|
"REPLAY",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_MEMORY_CUSTOM_INTRVL + "=0.2F",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_COMPRESSION_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
/**
|
||||||
|
* 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.hadoop.mapred.gridmix;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixConfig;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixRunMode;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.UtilsForGridmix;
|
||||||
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link Gridmix} memory emulation feature for gridmix jobs
|
||||||
|
* with default progress interval, different input data, submission
|
||||||
|
* policies and user resolver modes. Verify the total heap usage of
|
||||||
|
* map and reduce tasks of the jobs with corresponding original
|
||||||
|
* job in the trace.
|
||||||
|
*/
|
||||||
|
public class TestMemEmulForMapsAndReducesWithDefaultIntrvl
|
||||||
|
extends GridmixSystemTestCase {
|
||||||
|
private static final Log LOG =
|
||||||
|
LogFactory.getLog("TestMemEmulForMapsAndReducesWithDefaultIntrvl.class");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate compressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with default progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps and reduces total heap memory usage of {@link Gridmix} jobs
|
||||||
|
* with corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForReducesWithCompressedInputCase5()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = 1024 * 7;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
RoundRobinUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
"file://" + UtilsForGridmix.getProxyUsersFile(conf),
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uncompressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with default progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps and reduces total heap memory usage of {@link Gridmix} jobs
|
||||||
|
* with corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForReducesWithUncompressedInputCase6()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = cSize * 300;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
SubmitterUserResolver.class.getName(),
|
||||||
|
"REPLAY",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_COMPRESSION_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
/**
|
||||||
|
* 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.hadoop.mapred.gridmix;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixConfig;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixRunMode;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.UtilsForGridmix;
|
||||||
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link Gridmix} memory emulation feature for {@link Gridmix} jobs
|
||||||
|
* with default progress interval, custom heap memory ratio, different input
|
||||||
|
* data, submission policies and user resolver modes. Verify the total heap
|
||||||
|
* usage of map and reduce tasks of the jobs with corresponding the original job
|
||||||
|
* in the trace.
|
||||||
|
*/
|
||||||
|
public class TestMemEmulForMapsWithCustomHeapMemoryRatio
|
||||||
|
extends GridmixSystemTestCase {
|
||||||
|
private static final Log LOG =
|
||||||
|
LogFactory.getLog("TestMemEmulForMapsWithCustomHeapMemoryRatio.class");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate compressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation. The {@link Gridmix} should use the following runtime
|
||||||
|
* parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify total heap memory usage of the tasks of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithCompressedInputCase1()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = 1024 * 7;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file has not found.", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
SubmitterUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_FREE_MEMORY_RATIO + "=0.5F"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uncompressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation. The {@link Gridmix} should use the following runtime
|
||||||
|
* parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : RoundRobinUserResolver
|
||||||
|
* Verify total heap memory usage of tasks of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithUncompressedInputCase2()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = cSize * 300;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case2");
|
||||||
|
Assert.assertNotNull("Trace file has not found.", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
RoundRobinUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
"file://" + UtilsForGridmix.getProxyUsersFile(conf),
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_COMPRESSION_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_FREE_MEMORY_RATIO + "=0.4F"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
/**
|
||||||
|
* 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.hadoop.mapred.gridmix;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixConfig;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixRunMode;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.UtilsForGridmix;
|
||||||
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link Gridmix} memory emulation feature for {@link Gridmix} jobs
|
||||||
|
* with custom progress interval, different input data, submission policies
|
||||||
|
* and user resolver modes. Verify the total heap usage of map tasks of
|
||||||
|
* the jobs with corresponding the original job in the trace.
|
||||||
|
*/
|
||||||
|
public class TestMemEmulForMapsWithCustomIntrvl extends GridmixSystemTestCase {
|
||||||
|
private static final Log LOG =
|
||||||
|
LogFactory.getLog("TestMemEmulForMapsWithCustomIntrvl.class");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate compressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with custom progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps total heap memory usage of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithCompressedInputCase3()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = 1024 * 7;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case1");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
SubmitterUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_MEMORY_CUSTOM_INTRVL + "=0.2F",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uncompressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with custom progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : RoundRobinUserResolver
|
||||||
|
* Verify maps total heap memory usage of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithUncompressedInputCase4()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = cSize * 300;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case1");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
RoundRobinUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
"file://" + UtilsForGridmix.getProxyUsersFile(conf),
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_HEAP_MEMORY_CUSTOM_INTRVL + "=0.3F",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_COMPRESSION_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
/**
|
||||||
|
* 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.hadoop.mapred.gridmix;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixConfig;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.GridMixRunMode;
|
||||||
|
import org.apache.hadoop.mapred.gridmix.test.system.UtilsForGridmix;
|
||||||
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link Gridmix} memory emulation feature for {@link Gridmix} jobs
|
||||||
|
* with default progress interval, different input data, submission policies
|
||||||
|
* and user resolver modes. Verify the total heap usage of map tasks of the
|
||||||
|
* jobs with corresponding original job in the trace.
|
||||||
|
*/
|
||||||
|
public class TestMemEmulForMapsWithDefaultIntrvl extends GridmixSystemTestCase {
|
||||||
|
private static final Log LOG =
|
||||||
|
LogFactory.getLog("TestMemEmulForMapsWithDefaultIntrvl.class");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate compressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with default progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : SumitterUserResolver
|
||||||
|
* Verify maps total heap memory usage of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithCompressedInputCase1()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = 1024 * 7;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case1");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
SubmitterUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uncompressed input and run {@link Gridmix} by turning on the
|
||||||
|
* memory emulation with default progress interval. The {@link Gridmix}
|
||||||
|
* should use the following runtime parameters while running the jobs.
|
||||||
|
* Submission Policy : STRESS, User Resolver Mode : RoundRobinUserResolver
|
||||||
|
* Verify maps total heap memory usage of {@link Gridmix} jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @throws Exception - if an error occurs.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMemoryEmulationForMapsWithUncompressedInputCase2()
|
||||||
|
throws Exception {
|
||||||
|
final long inputSizeInMB = cSize * 300;
|
||||||
|
String tracePath = getTraceFile("mem_emul_case1");
|
||||||
|
Assert.assertNotNull("Trace file not found!", tracePath);
|
||||||
|
String [] runtimeValues =
|
||||||
|
{ "LOADJOB",
|
||||||
|
RoundRobinUserResolver.class.getName(),
|
||||||
|
"STRESS",
|
||||||
|
inputSizeInMB + "m",
|
||||||
|
"file://" + UtilsForGridmix.getProxyUsersFile(conf),
|
||||||
|
tracePath};
|
||||||
|
|
||||||
|
String [] otherArgs = {
|
||||||
|
"-D", GridMixConfig.GRIDMIX_MEMORY_EMULATON + "=" +
|
||||||
|
GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN,
|
||||||
|
"-D", GridMixConfig.GRIDMIX_DISTCACHE_ENABLE + "=false",
|
||||||
|
"-D", GridMixConfig.GRIDMIX_COMPRESSION_ENABLE + "=false",
|
||||||
|
"-D", MRJobConfig.JOB_CANCEL_DELEGATION_TOKEN + "=false"};
|
||||||
|
|
||||||
|
runGridmixAndVerify(runtimeValues, otherArgs, tracePath,
|
||||||
|
GridMixRunMode.DATA_GENERATION_AND_RUN_GRIDMIX.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -248,4 +248,38 @@ public class GridMixConfig {
|
||||||
*/
|
*/
|
||||||
public static int GRIDMIX_CPU_EMULATION_UPPER_LIMIT = 130;
|
public static int GRIDMIX_CPU_EMULATION_UPPER_LIMIT = 130;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix heap memory custom interval
|
||||||
|
*/
|
||||||
|
public static final String GRIDMIX_HEAP_MEMORY_CUSTOM_INTRVL =
|
||||||
|
TotalHeapUsageEmulatorPlugin.HEAP_EMULATION_PROGRESS_INTERVAL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix heap free memory ratio
|
||||||
|
*/
|
||||||
|
public static final String GRIDMIX_HEAP_FREE_MEMORY_RATIO =
|
||||||
|
TotalHeapUsageEmulatorPlugin.MIN_HEAP_FREE_RATIO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix memory emulation plugin
|
||||||
|
*/
|
||||||
|
public static final String GRIDMIX_MEMORY_EMULATION_PLUGIN =
|
||||||
|
TotalHeapUsageEmulatorPlugin.class.getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix memory emulation
|
||||||
|
*/
|
||||||
|
public static final String GRIDMIX_MEMORY_EMULATON =
|
||||||
|
ResourceUsageMatcher.RESOURCE_USAGE_EMULATION_PLUGINS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix memory emulation lower limit.
|
||||||
|
*/
|
||||||
|
public static int GRIDMIX_MEMORY_EMULATION_LOWER_LIMIT = 55;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gridmix memory emulation upper limit.
|
||||||
|
*/
|
||||||
|
public static int GRIDMIX_MEMORY_EMULATION_UPPER_LIMIT = 130;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,6 +149,7 @@ public class GridmixJobVerification {
|
||||||
zombieJob.getJobConf());
|
zombieJob.getJobConf());
|
||||||
verifyHighRamMemoryJobs(zombieJob, simuJobConf);
|
verifyHighRamMemoryJobs(zombieJob, simuJobConf);
|
||||||
verifyCPUEmulationOfJobs(zombieJob, jhInfo, simuJobConf);
|
verifyCPUEmulationOfJobs(zombieJob, jhInfo, simuJobConf);
|
||||||
|
verifyMemoryEmulationOfJobs(zombieJob, jhInfo, simuJobConf);
|
||||||
LOG.info("Done.");
|
LOG.info("Done.");
|
||||||
}
|
}
|
||||||
verifyDistributedCacheBetweenJobs(simuAndOrigJobsInfo);
|
verifyDistributedCacheBetweenJobs(simuAndOrigJobsInfo);
|
||||||
|
@ -356,6 +357,109 @@ public class GridmixJobVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It verifies the heap memory resource usage of gridmix jobs with
|
||||||
|
* corresponding original job in the trace.
|
||||||
|
* @param zombieJob - Original job history.
|
||||||
|
* @param jhInfo - Simulated job history.
|
||||||
|
* @param simuJobConf - simulated job configuration.
|
||||||
|
*/
|
||||||
|
public void verifyMemoryEmulationOfJobs(ZombieJob zombieJob,
|
||||||
|
JobHistoryParser.JobInfo jhInfo,
|
||||||
|
JobConf simuJobConf) throws Exception {
|
||||||
|
long origJobMapsTHU = 0;
|
||||||
|
long origJobReducesTHU = 0;
|
||||||
|
long simuJobMapsTHU = 0;
|
||||||
|
long simuJobReducesTHU = 0;
|
||||||
|
boolean isMemEmulOn = false;
|
||||||
|
if (simuJobConf.get(GridMixConfig.GRIDMIX_MEMORY_EMULATON) != null) {
|
||||||
|
isMemEmulOn =
|
||||||
|
simuJobConf.get(GridMixConfig.GRIDMIX_MEMORY_EMULATON).
|
||||||
|
contains(GridMixConfig.GRIDMIX_MEMORY_EMULATION_PLUGIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMemEmulOn) {
|
||||||
|
for (int index = 0; index < zombieJob.getNumberMaps(); index ++) {
|
||||||
|
TaskInfo mapTask = zombieJob.getTaskInfo(TaskType.MAP, index);
|
||||||
|
if (mapTask.getResourceUsageMetrics().getHeapUsage() > 0) {
|
||||||
|
origJobMapsTHU +=
|
||||||
|
mapTask.getResourceUsageMetrics().getHeapUsage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG.info("Original Job Maps Total Heap Usage: " + origJobMapsTHU);
|
||||||
|
|
||||||
|
for (int index = 0; index < zombieJob.getNumberReduces(); index ++) {
|
||||||
|
TaskInfo reduceTask = zombieJob.getTaskInfo(TaskType.REDUCE, index);
|
||||||
|
if (reduceTask.getResourceUsageMetrics().getHeapUsage() > 0) {
|
||||||
|
origJobReducesTHU +=
|
||||||
|
reduceTask.getResourceUsageMetrics().getHeapUsage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG.info("Original Job Reduces Total Heap Usage: " + origJobReducesTHU);
|
||||||
|
|
||||||
|
simuJobMapsTHU =
|
||||||
|
getCounterValue(jhInfo.getMapCounters(),
|
||||||
|
TaskCounter.COMMITTED_HEAP_BYTES.toString());
|
||||||
|
LOG.info("Simulated Job Maps Total Heap Usage: " + simuJobMapsTHU);
|
||||||
|
|
||||||
|
simuJobReducesTHU =
|
||||||
|
getCounterValue(jhInfo.getReduceCounters(),
|
||||||
|
TaskCounter.COMMITTED_HEAP_BYTES.toString());
|
||||||
|
LOG.info("Simulated Jobs Reduces Total Heap Usage: " + simuJobReducesTHU);
|
||||||
|
|
||||||
|
long mapCount = jhInfo.getTotalMaps();
|
||||||
|
long reduceCount = jhInfo.getTotalReduces();
|
||||||
|
|
||||||
|
String strHeapRatio =
|
||||||
|
simuJobConf.get(GridMixConfig.GRIDMIX_HEAP_FREE_MEMORY_RATIO);
|
||||||
|
if (strHeapRatio == null) {
|
||||||
|
strHeapRatio = "0.3F";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mapCount > 0) {
|
||||||
|
double mapEmulFactor = (simuJobMapsTHU * 100) / origJobMapsTHU;
|
||||||
|
long mapEmulAccuracy = Math.round(mapEmulFactor);
|
||||||
|
LOG.info("Maps memory emulation accuracy of a job:"
|
||||||
|
+ mapEmulAccuracy + "%");
|
||||||
|
Assert.assertTrue("Map phase total memory emulation had crossed the "
|
||||||
|
+ "configured max limit.", mapEmulAccuracy
|
||||||
|
<= GridMixConfig.GRIDMIX_MEMORY_EMULATION_UPPER_LIMIT);
|
||||||
|
Assert.assertTrue("Map phase total memory emulation had not crossed "
|
||||||
|
+ "the configured min limit.", mapEmulAccuracy
|
||||||
|
>= GridMixConfig.GRIDMIX_MEMORY_EMULATION_LOWER_LIMIT);
|
||||||
|
double expHeapRatio = Double.parseDouble(strHeapRatio);
|
||||||
|
LOG.info("expHeapRatio for maps:" + expHeapRatio);
|
||||||
|
double actHeapRatio =
|
||||||
|
((double)Math.abs(origJobMapsTHU - simuJobMapsTHU)) ;
|
||||||
|
actHeapRatio /= origJobMapsTHU;
|
||||||
|
LOG.info("actHeapRatio for maps:" + actHeapRatio);
|
||||||
|
Assert.assertTrue("Simulate job maps heap ratio not matched.",
|
||||||
|
actHeapRatio <= expHeapRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reduceCount >0) {
|
||||||
|
double reduceEmulFactor = (simuJobReducesTHU * 100) / origJobReducesTHU;
|
||||||
|
long reduceEmulAccuracy = Math.round(reduceEmulFactor);
|
||||||
|
LOG.info("Reduces memory emulation accuracy of a job:"
|
||||||
|
+ reduceEmulAccuracy + "%");
|
||||||
|
Assert.assertTrue("Reduce phase total memory emulation had crossed "
|
||||||
|
+ "configured max limit.", reduceEmulAccuracy
|
||||||
|
<= GridMixConfig.GRIDMIX_MEMORY_EMULATION_UPPER_LIMIT);
|
||||||
|
Assert.assertTrue("Reduce phase total memory emulation had not "
|
||||||
|
+ "crosssed configured min limit.", reduceEmulAccuracy
|
||||||
|
>= GridMixConfig.GRIDMIX_MEMORY_EMULATION_LOWER_LIMIT);
|
||||||
|
double expHeapRatio = Double.parseDouble(strHeapRatio);
|
||||||
|
LOG.info("expHeapRatio for reduces:" + expHeapRatio);
|
||||||
|
double actHeapRatio =
|
||||||
|
((double)Math.abs(origJobReducesTHU - simuJobReducesTHU));
|
||||||
|
actHeapRatio /= origJobReducesTHU;
|
||||||
|
LOG.info("actHeapRatio for reduces:" + actHeapRatio);
|
||||||
|
Assert.assertTrue("Simulate job reduces heap ratio not matched.",
|
||||||
|
actHeapRatio <= expHeapRatio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* It verifies the cpu resource usage of a gridmix job against
|
* It verifies the cpu resource usage of a gridmix job against
|
||||||
* their original job.
|
* their original job.
|
||||||
|
@ -367,7 +471,14 @@ public class GridmixJobVerification {
|
||||||
JobHistoryParser.JobInfo simuJobHistoryInfo,
|
JobHistoryParser.JobInfo simuJobHistoryInfo,
|
||||||
JobConf simuJobConf) throws Exception {
|
JobConf simuJobConf) throws Exception {
|
||||||
|
|
||||||
|
boolean isCpuEmulOn = false;
|
||||||
if (simuJobConf.get(GridMixConfig.GRIDMIX_CPU_EMULATON) != null) {
|
if (simuJobConf.get(GridMixConfig.GRIDMIX_CPU_EMULATON) != null) {
|
||||||
|
isCpuEmulOn =
|
||||||
|
simuJobConf.get(GridMixConfig.GRIDMIX_CPU_EMULATON).
|
||||||
|
contains(GridMixConfig.GRIDMIX_CPU_USAGE_PLUGIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isCpuEmulOn) {
|
||||||
Map<String,Long> origJobMetrics =
|
Map<String,Long> origJobMetrics =
|
||||||
getOriginalJobCPUMetrics(origJobHistory);
|
getOriginalJobCPUMetrics(origJobHistory);
|
||||||
Map<String,Long> simuJobMetrics =
|
Map<String,Long> simuJobMetrics =
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue