数据倾斜现象

数据频率倾斜—-某一个区域的数据量要远远大于其他区域
数据大小倾斜—-部分记录的大小远远大于平均值

如何收集倾斜数据

在reduce方法中加入记录map输出键的详细情况的功能

  1. public static final String MAX_VALUES = "skew.maxvalues";
  2. private int maxValueThreshold;
  3. @Override
  4. public void configure(JobConf job) {
  5. //设置个最大值
  6. maxValueThreshold = job.getInt(MAX_VALUES, 100);
  7. }
  8. @Override
  9. protected void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException, InterruptedException {
  10. int i = 0;
  11. while(values.hasNext()) {
  12. values.next();
  13. //迭代的时候把这个加加
  14. i++;
  15. }
  16. //如果值大于自己设置的最大值,就把他们记录下来
  17. if (++i > maxValueThreshold) {
  18. log.info("Received"+ i + " values for key " + key);
  19. }
  20. }