Move ResultSetFactory to the run method as a MapReduce could be shared with the same mapper and reducer but have different endpoint. Add ResultSetFactory to AbstractDistributor to make sure subsequent mapReduce runs use the same ResultSet types.