複数のMapReduce Taskがある場合に指定した名前で切り替えたい場合等においてはorg.apache.hadoop.util.ProgramDriverを利用すると良い

Sample.javaを作成

package sample;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.Cluster;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.fs.Path;

public class Sample {
    public static void main(String[] args) throws Exception {
        Configuration = new Configuration();

        Job job = Job.getInstance(new Cluster(conf),xconf);
        job.setJarByClass(Sample.class);
        job.setMapperClass(SampleMapper.class);
        job.setReducerClass(SampleReducer.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        FileInputFormat.setInputPaths(job, new Path("input"));
        FileOutputFormat.setOutputPath(job, new Path("output"));

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

まぁ普通のHadoop MapReduceのTaskを起動するクラスだけど直接的には利用せずProgramDriverを介して利用する

ClientDriver.javaを作成

package sample;

import org.apache.hadoop.util.ProgramDriver;

public class ClientDriver {
    public static void main(String[] args) throws Exception {
        int code = -1;

        ProgreamDriver driver = new ProgramDriver();

        try {
            driver.addClass("sample1", Sample.class, "sample1");
            driver.addClass("sample2", Sample.class, "sample2");

            code = driver.driver(args);
        } catch(Throwable e) {
            e.printStackTrace();
        }

        System.exit(code);
    }
}

sample1とsample2という名前でタスクを利用できるようになる。起動する際に

hadoop jar sample.jar sample.ClientDriver タスク名

という風にタスク名を指定するだけで起動できるようになる