数据倾斜的问题其实就是map端输出的数据分发到reduce端不均匀,使得在reduce端有的reducer处理的数据量过大,有的reducer处理的数据量过少,造成数据倾斜于一方。

解决方法是在map端进行——》map side join操作
代码如下:
| package com.jym.hadoop.mr.mapsidejoin; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; /* * 这个程序实现的是针对数据侧倾问题的解决, * 采用的是map端join的方法来解决的, * 在该程序中省略了reduce部分 * */ public class MapSideJoin {
static class MapSideJoinMapper extends Mapper<LongWritable, Text, Text, NullWritable |