Improved MapReduce Load Balancing through Distribution-Dependent Hash Function Optimization