public void execute() {
	Process pro;
	try {
	    // This three lines gives you time to kill some process so that you
	    // can simulate node failure and see if it recovers correctly
	    /*
	    System.out.println("[Reducer] Force to sleep"); 
	    Thread.sleep(10000);
	    System.out.println("[Reducer] wake up");
	    */
	    
	    pro = Runtime.getRuntime().exec("javac " + reducerClass + ".java"); // compile
	    pro.waitFor();
	    Class<?> myClass = Class.forName(reducerClass);
	    Class<?>[] paramsClass = new Class<?>[3];
	    paramsClass[0] = String.class;
	    paramsClass[1] = List.class;
	    paramsClass[2] = Output.class;
	    Constructor<?> myCons = myClass.getConstructor();
	    Object object = myCons.newInstance();
	    Method method = null;

	    method = object.getClass().getMethod(reducerFunction, paramsClass);
	    Output output = new Output(1, mTask.getJobID() + "_result");

	    for (String key : map.keySet()) {
		method.invoke(object, key, map.get(key), output);
	    }
	    output.close();

	} catch (Exception e) {
	    e.printStackTrace();
	}

    }