blob: db63847f187613beced6d138ff306329e4510ec5 [file] [log] [blame]
/**
* 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.streaming;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapreduce.MRJobConfig;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.Iterator;
/**
* Tests stream job with java tasks, commands in MapReduce local mode.
* Validates if user-set config properties
* {@link MRJobConfig#MAP_OUTPUT_KEY_CLASS} and
* {@link MRJobConfig#OUTPUT_KEY_CLASS} are honored by streaming jobs.
*/
public class TestStreamingOutputKeyValueTypes extends TestStreaming {
public TestStreamingOutputKeyValueTypes() throws IOException {
super();
input = "one line dummy input\n";
}
@Before
@Override
public void setUp() throws IOException {
args.clear();
super.setUp();
}
@Override
protected String[] genArgs() {
// set the testcase-specific config properties first and the remaining
// arguments are set in TestStreaming.genArgs().
args.add("-jobconf");
args.add(MRJobConfig.MAP_OUTPUT_KEY_CLASS +
"=org.apache.hadoop.io.LongWritable");
args.add("-jobconf");
args.add(MRJobConfig.OUTPUT_KEY_CLASS +
"=org.apache.hadoop.io.LongWritable");
// Using SequenceFileOutputFormat here because with TextOutputFormat, the
// mapred.output.key.class set in JobConf (which we want to test here) is
// not read/used at all.
args.add("-outputformat");
args.add("org.apache.hadoop.mapred.SequenceFileOutputFormat");
return super.genArgs();
}
@Override
protected void checkOutput() throws IOException {
// No need to validate output for the test cases in this class
}
public static class MyReducer<K, V>
extends MapReduceBase implements Reducer<K, V, LongWritable, Text> {
public void reduce(K key, Iterator<V> values,
OutputCollector<LongWritable, Text> output, Reporter reporter)
throws IOException {
LongWritable l = new LongWritable();
while (values.hasNext()) {
output.collect(l, new Text(values.next().toString()));
}
}
}
// Check with Java Mapper, Java Reducer
@Test
public void testJavaMapperAndJavaReducer() throws Exception {
map = "org.apache.hadoop.mapred.lib.IdentityMapper";
reduce = "org.apache.hadoop.mapred.lib.IdentityReducer";
super.testCommandLine();
}
// Check with Java Mapper, Java Reducer and -numReduceTasks 0
@Test
public void testJavaMapperAndJavaReducerAndZeroReduces() throws Exception {
map = "org.apache.hadoop.mapred.lib.IdentityMapper";
reduce = "org.apache.hadoop.mapred.lib.IdentityReducer";
args.add("-numReduceTasks");
args.add("0");
super.testCommandLine();
}
// Check with Java Mapper, Reducer = "NONE"
@Test
public void testJavaMapperWithReduceNone() throws Exception {
map = "org.apache.hadoop.mapred.lib.IdentityMapper";
reduce = "NONE";
super.testCommandLine();
}
// Check with Java Mapper, command Reducer
@Test
public void testJavaMapperAndCommandReducer() throws Exception {
map = "org.apache.hadoop.mapred.lib.IdentityMapper";
reduce = "cat";
super.testCommandLine();
}
// Check with Java Mapper, command Reducer and -numReduceTasks 0
@Test
public void testJavaMapperAndCommandReducerAndZeroReduces() throws Exception {
map = "org.apache.hadoop.mapred.lib.IdentityMapper";
reduce = "cat";
args.add("-numReduceTasks");
args.add("0");
super.testCommandLine();
}
// Check with Command Mapper, Java Reducer
@Test
public void testCommandMapperAndJavaReducer() throws Exception {
map = "cat";
reduce = MyReducer.class.getName();
super.testCommandLine();
}
// Check with Command Mapper, Java Reducer and -numReduceTasks 0
@Test
public void testCommandMapperAndJavaReducerAndZeroReduces() throws Exception {
map = "cat";
reduce = MyReducer.class.getName();
args.add("-numReduceTasks");
args.add("0");
super.testCommandLine();
}
// Check with Command Mapper, Reducer = "NONE"
@Test
public void testCommandMapperWithReduceNone() throws Exception {
map = "cat";
reduce = "NONE";
super.testCommandLine();
}
// Check with Command Mapper, Command Reducer
@Test
public void testCommandMapperAndCommandReducer() throws Exception {
map = "cat";
reduce = "cat";
super.testCommandLine();
}
// Check with Command Mapper, Command Reducer and -numReduceTasks 0
@Test
public void testCommandMapperAndCommandReducerAndZeroReduces()
throws Exception {
map = "cat";
reduce = "cat";
args.add("-numReduceTasks");
args.add("0");
super.testCommandLine();
}
@Override
@Test
public void testCommandLine() {
// Do nothing
}
}