Hadoop (7) - ProgramDriver -
複数の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 タスク名
という風にタスク名を指定するだけで起動できるようになる