Client-side, peer-to-peer MapReduce