Module type MapReduce.Controller

module type Controller = functor (Job : Job) -> sig .. end
Parameters:
Job : Job

val map_reduce : MapReduce.Job.input list ->
(MapReduce.Job.key * MapReduce.Job.output) list Deferred.t
Execute that map and reduce phase of Job on the given list of inputs. Returns the entire list of intermediate keys and the reduce outputs corresponding to those keys.

Raises an exception if the Job's map or reduce function raises an exception.

Raises an exception if the Controller becomes unable to contact any worker.