package org.apache.hadoop.mapred;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.TaskTracker;
public class MultiTaskTracker {
public static void main(String[] args) throws IOException {
int numTaskTrackers = Integer.parseInt(args[0]);
List<TaskTrackerRunner> runners = new ArrayList<TaskTrackerRunner>();
for (int i = 0; i < numTaskTrackers; i++) {
Configuration conf = new Configuration();
JobConf jConf = new JobConf(conf);
jConf.set("mapred.task.tracker.http.address", "0.0.0.0:0");
String[] baseLocalDirs = jConf.getLocalDirs();
List<String> localDirs = new LinkedList<String>();
localDirs.clear();
for (String localDir : baseLocalDirs) {
File baseLocalDir = new File(localDir);
File localDirFile = new File(baseLocalDir, "TT_" + i);
localDirFile.mkdirs();
localDirs.add(localDirFile.getAbsolutePath());
}
jConf.setStrings("mapred.local.dir",
localDirs.toArray(new String[localDirs.size()]));
TaskTracker tracker = new TaskTracker(jConf);
TaskTrackerRunner runner = new TaskTrackerRunner(tracker);
runner.setDaemon(true);
runners.add(runner);
runner.start();
}
for (TaskTrackerRunner runner : runners) {
try {
runner.join();
} catch (InterruptedException iex) {
}
}
}
private static class TaskTrackerRunner extends Thread {
private TaskTracker ttToRun = null;
public TaskTrackerRunner(TaskTracker tt) {
super();
this.ttToRun = tt;
}
@Override
public void run() {
ttToRun.run();
}
}
}