The problem seems to because the key that is being generated from map is leading to calling only one reducer after partitioner generates called. Due to this reason other 63 reducers go empty. So calling of reducers depends on the keys that are generated. Please check the partitioner logic below:-
/** Partition keys by their {@link Object#hashCode()}. */
public class HashPartitioner extends Partitioner {
/** Use {@link Object#hashCode()} to partition. */ public int getPartition(K key, V value, int numReduceTasks) { return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; }
}
Here the return value decides which reducer to invoke.
I hope this answers your doubt.