package mil.nga.giat.geowave.mapreduce;
import java.io.IOException;
import java.net.URI;
import mil.nga.giat.geowave.core.store.adapter.AdapterStore;
import mil.nga.giat.geowave.mapreduce.input.GeoWaveInputKey;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configuration.IntegerRanges;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.ObjectWritable;
import org.apache.hadoop.io.RawComparator;
import org.apache.hadoop.mapreduce.Counter;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobID;
import org.apache.hadoop.mapreduce.MapContext;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.OutputCommitter;
import org.apache.hadoop.mapreduce.OutputFormat;
import org.apache.hadoop.mapreduce.Partitioner;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.TaskAttemptID;
import org.apache.hadoop.security.Credentials;
/**
* This class wraps an existing map context that will write hadoop writable
* objects as a map context that writes the native object for ease of
* implementing mapreduce jobs.
*
* @param <KEYIN>
* The map context's input type
* @param <VALUEIN>
* The map context's output type
*/
public class NativeMapContext<KEYIN, VALUEIN> implements
MapContext<KEYIN, VALUEIN, GeoWaveInputKey, Object>
{
private final MapContext<KEYIN, VALUEIN, GeoWaveInputKey, ObjectWritable> context;
private final HadoopWritableSerializationTool serializationTool;
public NativeMapContext(
final MapContext<KEYIN, VALUEIN, GeoWaveInputKey, ObjectWritable> context,
final AdapterStore adapterStore ) {
this.context = context;
this.serializationTool = new HadoopWritableSerializationTool(
adapterStore);
}
public NativeMapContext(
final MapContext<KEYIN, VALUEIN, GeoWaveInputKey, ObjectWritable> context,
final HadoopWritableSerializationTool serializationTool ) {
this.context = context;
this.serializationTool = serializationTool;
}
@Override
public TaskAttemptID getTaskAttemptID() {
return context.getTaskAttemptID();
}
@Override
public void setStatus(
final String msg ) {
context.setStatus(msg);
}
@Override
public String getStatus() {
return context.getStatus();
}
@Override
public InputSplit getInputSplit() {
return context.getInputSplit();
}
@Override
public Configuration getConfiguration() {
return context.getConfiguration();
}
@Override
public boolean nextKeyValue()
throws IOException,
InterruptedException {
return context.nextKeyValue();
}
@Override
public float getProgress() {
return context.getProgress();
}
@Override
public int hashCode() {
return context.hashCode();
}
@Override
public Credentials getCredentials() {
return context.getCredentials();
}
@Override
public Counter getCounter(
final Enum<?> counterName ) {
return context.getCounter(counterName);
}
@Override
public KEYIN getCurrentKey()
throws IOException,
InterruptedException {
return context.getCurrentKey();
}
@Override
public JobID getJobID() {
return context.getJobID();
}
@Override
public int getNumReduceTasks() {
return context.getNumReduceTasks();
}
@Override
public Counter getCounter(
final String groupName,
final String counterName ) {
return context.getCounter(
groupName,
counterName);
}
@Override
public VALUEIN getCurrentValue()
throws IOException,
InterruptedException {
return context.getCurrentValue();
}
@Override
public Path getWorkingDirectory()
throws IOException {
return context.getWorkingDirectory();
}
@Override
public void write(
final GeoWaveInputKey key,
final Object value )
throws IOException,
InterruptedException {
context.write(
key,
serializationTool.toWritable(
key.getAdapterId(),
value));
}
@Override
public Class<?> getOutputKeyClass() {
return context.getOutputKeyClass();
}
@Override
public OutputCommitter getOutputCommitter() {
return context.getOutputCommitter();
}
@Override
public Class<?> getOutputValueClass() {
return context.getOutputValueClass();
}
@Override
public Class<?> getMapOutputKeyClass() {
return context.getMapOutputKeyClass();
}
@Override
public Class<?> getMapOutputValueClass() {
return context.getMapOutputValueClass();
}
@Override
public String getJobName() {
return context.getJobName();
}
public boolean userClassesTakesPrecedence() {
return context.getConfiguration().getBoolean(
MAPREDUCE_JOB_USER_CLASSPATH_FIRST,
false);
}
@Override
public boolean equals(
final Object obj ) {
return context.equals(obj);
}
@Override
public Class<? extends InputFormat<?, ?>> getInputFormatClass()
throws ClassNotFoundException {
return context.getInputFormatClass();
}
@Override
public Class<? extends Mapper<?, ?, ?, ?>> getMapperClass()
throws ClassNotFoundException {
return context.getMapperClass();
}
@Override
public Class<? extends Reducer<?, ?, ?, ?>> getCombinerClass()
throws ClassNotFoundException {
return context.getCombinerClass();
}
@Override
public Class<? extends Reducer<?, ?, ?, ?>> getReducerClass()
throws ClassNotFoundException {
return context.getReducerClass();
}
@Override
public Class<? extends OutputFormat<?, ?>> getOutputFormatClass()
throws ClassNotFoundException {
return context.getOutputFormatClass();
}
@Override
public Class<? extends Partitioner<?, ?>> getPartitionerClass()
throws ClassNotFoundException {
return context.getPartitionerClass();
}
@Override
public RawComparator<?> getSortComparator() {
return context.getSortComparator();
}
@Override
public String getJar() {
return context.getJar();
}
@Override
public RawComparator<?> getCombinerKeyGroupingComparator() {
return context.getCombinerKeyGroupingComparator();
}
@Override
public RawComparator<?> getGroupingComparator() {
return context.getGroupingComparator();
}
@Override
public boolean getJobSetupCleanupNeeded() {
return context.getJobSetupCleanupNeeded();
}
@Override
public boolean getTaskCleanupNeeded() {
return context.getTaskCleanupNeeded();
}
@Override
public boolean getProfileEnabled() {
return context.getProfileEnabled();
}
@Override
public String getProfileParams() {
return context.getProfileParams();
}
@Override
public IntegerRanges getProfileTaskRange(
final boolean isMap ) {
return context.getProfileTaskRange(isMap);
}
@Override
public String getUser() {
return context.getUser();
}
@Override
public boolean getSymlink() {
return context.getSymlink();
}
@Override
public Path[] getArchiveClassPaths() {
return context.getArchiveClassPaths();
}
@Override
public URI[] getCacheArchives()
throws IOException {
return context.getCacheArchives();
}
@Override
public URI[] getCacheFiles()
throws IOException {
return context.getCacheFiles();
}
@Override
public Path[] getLocalCacheArchives()
throws IOException {
return context.getLocalCacheArchives();
}
@Override
public Path[] getLocalCacheFiles()
throws IOException {
return context.getLocalCacheFiles();
}
@Override
public Path[] getFileClassPaths() {
return context.getFileClassPaths();
}
@Override
public String[] getArchiveTimestamps() {
return context.getArchiveTimestamps();
}
@Override
public String[] getFileTimestamps() {
return context.getFileTimestamps();
}
@Override
public int getMaxMapAttempts() {
return context.getMaxMapAttempts();
}
@Override
public int getMaxReduceAttempts() {
return context.getMaxReduceAttempts();
}
@Override
public void progress() {
context.progress();
}
@Override
public String toString() {
return context.toString();
}
}