MapReduce Design Patterns: Building Effective Algorithms and Analytics for Hadoop and Other Systems