package com.linkedin.camus.sweeper.mapreduce;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.OutputFormat;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.log4j.Logger;
import com.linkedin.camus.sweeper.utils.RelaxedAvroSerialization;
@SuppressWarnings("rawtypes")
public abstract class CamusSweeperJob {
protected Logger log;
public CamusSweeperJob setLogger(Logger log) {
this.log = log;
return this;
}
public abstract void configureJob(String topic, Job job);
protected void configureInput(Job job, Class<? extends InputFormat> inputFormat, Class<? extends Mapper> mapper,
Class<?> mapOutKey, Class<?> mapOutValue) {
job.setInputFormatClass(inputFormat);
job.setMapperClass(mapper);
job.setMapOutputKeyClass(mapOutKey);
job.setMapOutputValueClass(mapOutValue);
RelaxedAvroSerialization.addToConfiguration(job.getConfiguration());
}
protected void configureOutput(Job job, Class<? extends OutputFormat> outputFormat, Class<? extends Reducer> reducer,
Class<?> outKey, Class<?> outValue) {
job.setOutputFormatClass(outputFormat);
job.setReducerClass(reducer);
job.setOutputKeyClass(outKey);
job.setOutputValueClass(outValue);
}
protected String getConfValue(Job job, String topic, String key, String defaultStr) {
return job.getConfiguration().get(topic + "." + key, job.getConfiguration().get(key, defaultStr));
}
protected String getConfValue(Job job, String topic, String key) {
return getConfValue(job, topic, key, null);
}
}