MAPREDUCE-2284. TestLocalRunner.testMultiMaps times out. Contributed by Todd Lipcon
git-svn-id: https://svn.apache.org/repos/asf/hadoop/mapreduce/trunk@1078931 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 4f0e925..0844b00 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -619,6 +619,8 @@
MAPREDUCE-2251. Remove unused mapreduce.job.userhistorylocation config.
(Harsh J Chouraria via todd)
+ MAPREDUCE-2284. TestLocalRunner.testMultiMaps times out (todd)
+
Release 0.21.1 - Unreleased
NEW FEATURES
diff --git a/src/test/mapred/org/apache/hadoop/mapreduce/TestLocalRunner.java b/src/test/mapred/org/apache/hadoop/mapreduce/TestLocalRunner.java
index 91f2bb4..ca77130 100644
--- a/src/test/mapred/org/apache/hadoop/mapreduce/TestLocalRunner.java
+++ b/src/test/mapred/org/apache/hadoop/mapreduce/TestLocalRunner.java
@@ -50,6 +50,13 @@
private static final Log LOG = LogFactory.getLog(TestLocalRunner.class);
+ private static int INPUT_SIZES[] =
+ new int[] { 50000, 500, 500, 20, 5000, 500};
+ private static int OUTPUT_SIZES[] =
+ new int[] { 1, 500, 500, 500, 500, 500};
+ private static int SLEEP_INTERVALS[] =
+ new int[] { 10000, 15, 15, 20, 250, 60 };
+
private static class StressMapper
extends Mapper<LongWritable, Text, LongWritable, Text> {
@@ -76,49 +83,12 @@
public void map(LongWritable key, Text val, Context c)
throws IOException, InterruptedException {
- switch(threadId) {
- case 0:
- // Write a single value and be done.
+ // Write many values quickly.
+ for (int i = 0; i < OUTPUT_SIZES[threadId]; i++) {
c.write(new LongWritable(0), val);
- break;
- case 1:
- case 2:
- // Write many values quickly.
- for (int i = 0; i < 500; i++) {
- c.write(new LongWritable(0), val);
- }
- break;
- case 3:
- // Write many values, using thread sleeps to delay this.
- for (int i = 0; i < 50; i++) {
- for (int j = 0; j < 10; j++) {
- c.write(new LongWritable(0), val);
- }
+ if (i % SLEEP_INTERVALS[threadId] == 1) {
Thread.sleep(1);
}
- break;
- case 4:
- // Write many values, using busy-loops to delay this.
- for (int i = 0; i < 500; i++) {
- for (int j = 0; j < 10000; j++) {
- this.exposedState++;
- }
- c.write(new LongWritable(0), val);
- }
- break;
- case 5:
- // Write many values, using very slow busy-loops to delay this.
- for (int i = 0; i < 500; i++) {
- for (int j = 0; j < 100000; j++) {
- this.exposedState++;
- }
- c.write(new LongWritable(0), val);
- }
- break;
- default:
- // Write a single value and be done.
- c.write(new LongWritable(0), val);
- break;
}
}
@@ -195,12 +165,12 @@
// This is the total number of map output records we expect to generate,
// based on input file sizes (see createMultiMapsInput()) and the behavior
// of the different StressMapper threads.
- private final static int TOTAL_RECORDS = 50000
- + (500 * 500)
- + (500 * 500)
- + (20 * 500)
- + (5000 * 500)
- + (500 * 500);
+ private static int TOTAL_RECORDS = 0;
+ static {
+ for (int i = 0; i < 6; i++) {
+ TOTAL_RECORDS += INPUT_SIZES[i] * OUTPUT_SIZES[i];
+ }
+ }
private final String INPUT_DIR = "multiMapInput";
private final String OUTPUT_DIR = "multiMapOutput";
@@ -239,13 +209,9 @@
// Create input files, with sizes calibrated based on
// the amount of work done in each mapper.
- createInputFile(inputPath, 0, 50000);
- createInputFile(inputPath, 1, 500);
- createInputFile(inputPath, 2, 500);
- createInputFile(inputPath, 3, 20);
- createInputFile(inputPath, 4, 5000);
- createInputFile(inputPath, 5, 500);
-
+ for (int i = 0; i < 6; i++) {
+ createInputFile(inputPath, i, INPUT_SIZES[i]);
+ }
return inputPath;
}