示例#1
0
  @Override
  public void addJob(
      String jobName,
      byte type,
      String pathToJar,
      String className,
      String pathToData,
      String[] peers,
      int parNumber,
      int numberOfReducers,
      HashMap<String, Integer> finishedMappers)
      throws RemoteException {
    SysLogger.getInstance().info("Job " + jobName + " started");

    Logger logger = null;
    try {
      logger = new Logger(0, "..\\log\\WorkerNode.log");
    } catch (IncorrectLogFileException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    DFSClient dfs = DFSClient.getInstance();
    try {
      dfs.init("localhost", 20000, logger);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    String localPathToJar = "..\\tasks\\" + jobName + ".jar";
    File jarFile = new File(localPathToJar);
    if (jarFile.exists()) {
      jarFile.delete();
    }
    String localPathToData = "..\\tasks\\" + jobName + ".dat";
    File dataFile = new File(localPathToData);
    if (dataFile.exists()) {
      dataFile.delete();
    }
    try {
      dfs.downloadFile(pathToJar, localPathToJar);
      if (type == MapReduce.TYPE_MAPPER) {
        dfs.downloadFile(pathToData, localPathToData);
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    try {
      URL url = new URL("file:///" + jarFile.getAbsolutePath());
      URLClassLoader classLoader = new URLClassLoader(new URL[] {url});
      // todo make this
      Class c = classLoader.loadClass(className);

      MapReduce jobObject = (MapReduce) c.newInstance();
      Job job = null;
      if (type == MapReduce.TYPE_MAPPER) {
        job =
            new Job(
                jobName,
                type,
                jobObject,
                dataFile.getAbsolutePath(),
                peers,
                parNumber,
                numberOfReducers,
                finishedMappers);
      } else if (type == MapReduce.TYPE_REDUCER) {
        job =
            new Job(
                jobName,
                type,
                jobObject,
                pathToData,
                peers,
                parNumber,
                numberOfReducers,
                finishedMappers);
      }
      jobList.put(jobName, job);

      job.start(); // start new thread
      // return control
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (InstantiationException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }
  }