package org.apache.hadoop.corona; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapreduce.InputFormat; import org.apache.hadoop.mapreduce.InputSplit; import org.apache.hadoop.mapreduce.JobContext; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.RecordReader; import org.apache.hadoop.mapreduce.TaskAttemptContext; public class TstJob { static class TestInputSplit extends InputSplit implements Writable { private String[] locs; public TestInputSplit() {} TestInputSplit(String[] locs) { this.locs = locs; } @Override public long getLength() { return 0; } @Override public String[] getLocations() { return locs; } @Override public void readFields(DataInput in) throws IOException { int len = in.readInt(); locs = new String[len]; for (int i = 0; i < len; i++) { locs[i] = in.readUTF(); } } @Override public void write(DataOutput out) throws IOException { out.writeInt(locs.length); for (String s: locs) { out.writeUTF(s); } } } static class TestRecordReader extends RecordReader<LongWritable, Text> { @Override public void close() {} @Override public LongWritable getCurrentKey() { return null; } @Override public Text getCurrentValue() { return null; } @Override public float getProgress() { return 0; } @Override public void initialize(InputSplit split, TaskAttemptContext context) {} @Override public boolean nextKeyValue() { return false; } } public static class TestInputFormat extends InputFormat<LongWritable, Text> { @Override public RecordReader<LongWritable, Text> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException { return new TestRecordReader(); } @Override public List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException { String locationsCsv = context.getConfiguration().get("test.locations"); String[] locations = locationsCsv.split(","); List<InputSplit> splits = new ArrayList<InputSplit>(); for (String loc: locations) { splits.add(new TestInputSplit(new String[]{loc})); } return splits; } } public static class TestMapper extends Mapper<LongWritable, Text, LongWritable, Text> { @Override public void map(LongWritable key, Text val, Context c) {} } }