I'm thinking it's more difficult to tune the value in MRv2 than MRv1.
I think the value numNodes * mapreduce.tasktracker.reduce.tasks.maximum in MRV1 is equal to the current config mapreduce.job.running.reduce.limit.
mapreduce.job.running.reduce.limit is an optional parameter (
MAPREDUCE-5583). The number of reduce tasks is limited to "yarn.nodemanager.resource.memory-mb / mapreduce.reduce.memory.mb", but the resource is shared by map tasks and other applications. Therefore the limit of the number of reduce tasks becomes smaller than "yarn.nodemanager.resource.memory-mb / mapreduce.reduce.memory.mb" if some map tasks or other applications are running.
After all, "multiplied by (<available memory for reduce tasks> / mapreduce.reduce.memory.mb)" is good to me.