Users can control which keys (and hence records) go to which Reducer by implementing a custom?

partitioner
outputsplit
reporter
all of the mentioned

The correct answer is: A. partitioner

A partitioner is a function that takes a key and returns a partition ID. The partition ID is used to determine which reducer will process the record.

A partitioner is important because it determines how the data is distributed across the reducers. If the partitioner is not chosen carefully, it can lead to uneven distribution of data, which can slow down the processing of the job.

There are a number of different ways to implement a partitioner. One common way is to use a hash function to hash the key and then use the hash value to determine the partition ID. Another common way is to use a range partitioner, which divides the keys into a number of ranges and then assigns each range to a different reducer.

The choice of partitioner depends on the specific needs of the job. For example, if the job is processing a large number of records, it may be necessary to use a partitioner that can distribute the data evenly across the reducers. If the job is processing a small number of records, it may be possible to use a simpler partitioner.

The following are the other options in the question:

  • B. outputsplit: An outputsplit is a class that defines the boundaries of an output file. The outputsplit is used to determine which records are written to which output file.
  • C. reporter: A reporter is a class that reports the progress of a job. The reporter is used to track the progress of the job and to report any errors that occur.

Both outputsplit and reporter are important classes, but they are not used to control which keys (and hence records) go to which Reducer.