wordcount为例

以MR程序的WC为例 如果处理的数据只有四个单词 a b c d
a 和 c 出现的次数特别多
(a/c.hashCode%2=1)–>分区 1 多
b 和 d 出现的次数很少 (b/d.hashCode%2=0) -->分区0 少
a c -->reduce1 a: iterator<1,1,1,1,1,1,1,1,1,1,1,1,1,1> 时间久(排序 内存)
b d -->reduce0 b: iterator<1,1> 时间短
现象:导致整个job执行很久 , 无法执行完毕
解决方案—将key打散(会拉长mapreduce的任务链)

/*** 将key打散(重新设置key,在key后生成一个随机数)*/public class Skew {static class  SkewMapper extends Mapper<LongWritable, Text,Text, IntWritable>{int numReduceTasks = 0;@Overrideprotected void setup(Context context) throws IOException, InterruptedException {//获取reduce task的个数numReduceTasks = context.getNumReduceTasks();}Random r = new Random();Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] words = value.toString().split("\\s+");for (String word : words) {//根据reduce task的个数生成随机数int i = r.nextInt(numReduceTasks);k.set(word+"-"+i);context.write(k,v);}}}static class SkewReducer extends Reducer<Text,IntWritable,Text,IntWritable>{IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values) {count++;}v.set(count);context.write(key,v);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "skew");//设置map reduce 逻辑类job.setMapperClass(SkewMapper.class);job.setReducerClass(SkewReducer.class);//设置输出类job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);job.setNumReduceTasks(2);//设置数据输入 输出FileInputFormat.setInputPaths(job, new Path("D:\\MR\\skew\\input"));FileOutputFormat.setOutputPath(job, new Path("D:\\MR\\skew\\output"));job.waitForCompletion(true);}
}
public class Skew2 {static class Skew2Mapper extends Mapper<LongWritable, Text,Text, IntWritable>{Text k = new Text();IntWritable v = new IntWritable();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//a-1  896String line = value.toString();String[] split = line.split("-");String word = split[0];String[] split1 = split[1].split("\\s+");int count = Integer.parseInt(split1[1]);k.set(word);v.set(count);context.write(k,v);}}static class Skew2Reducer extends Reducer<Text,IntWritable,Text,IntWritable>{IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;//把a 对应的 次数 相加for (IntWritable value : values) {count+=value.get();}v.set(count);context.write(key,v);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "skew");//设置map reduce 逻辑类job.setMapperClass(Skew2Mapper.class);job.setReducerClass(Skew2Reducer.class);//设置输出类job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//设置数据输入 输出FileInputFormat.setInputPaths(job, new Path("D:\\MR\\skew\\output"));FileOutputFormat.setOutputPath(job, new Path("D:\\MR\\skew\\output2"));job.waitForCompletion(true);}
}

MapReduce数据倾斜解决方案——将key打散相关推荐

  1. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [Spark调优]大表join大表,少数key导致数据倾斜解决方案 参考文章: (1)[Spark调优]大表join大表,少数key导致数据倾斜解决方案 (2)https://www.cnblogs. ...

  2. MapReduce 数据倾斜以及解决思路

    MapReduce 数据倾斜以及解决思路 1.小背景 在mapreduce的分布式解决框架中,数据处理主要分为2个步骤,map阶段和reduce阶段 map阶段主要是数据转换,也就是按照预期把输入的数 ...

  3. 如何解决 MapReduce 数据倾斜的问题?

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  4. spark+数据倾斜+解决方案

    spark+数据倾斜+解决方案 1.如何判断数据切斜的发生源头? 根据stage划分原理和sparkUI 2.数据倾斜解决方案 解决方案一:使用Hive ETL预处理数据

  5. 【Spark调优】小表join大表数据倾斜解决方案

    [Spark调优]小表join大表数据倾斜解决方案 参考文章: (1)[Spark调优]小表join大表数据倾斜解决方案 (2)https://www.cnblogs.com/wwcom123/p/1 ...

  6. auto errored after 报错解决_漫谈数据倾斜解决方案(干货)

    数据倾斜是大数据开发中经常会遇到的问题,而且基本是面试中的必问考点,本文是笔者根据搜集资料和阅读多篇博问的总结,全方位的从数据倾斜的定义.原因.解决方法.实例等角度进行解析.希望能帮助大家能对数据倾斜 ...

  7. Spark数据倾斜解决方案(收藏级)

    一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...

  8. Spark数据倾斜解决方案(转)

    本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势  发表于 2017 ...

  9. Hive的HQL语句及数据倾斜解决方案

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51675005 作者: 朱培          ID ...

最新文章

  1. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结
  2. 超市的100年发展史:好日子终结 亚马逊无人店是趋势
  3. 为什么要开发抽象编程语言(APL)?
  4. Java String关于replaceall函数转义字符的一个小贴士
  5. SQL Server Profiler的一个小问题
  6. Handler源码剖析
  7. javaweb调用python算法_请教怎么用java远程调用python? 多谢
  8. 二叉树题目----1 前序中序后序遍历二叉树并返回相应的遍历(不是打印)
  9. oppo手机工程模式清除数据需要密码_手机隐藏的快捷键都有哪些?
  10. Python vs PHP vs Ruby —— 编程语言大对决
  11. 百度地图缩放 — 放开手指时地图位置移动问题解决
  12. SHL笔试全攻略(转)
  13. python注册大漠插件,大漠插件安装包
  14. android 工具 拓扑图,GitHub - AndroidHelper/graph.editor: HTML5拓扑图编辑器
  15. 马上大四了,秋招还是春招好?先找工作还是找实习
  16. 09|自研or借力(下):集成Gin替换已有核心
  17. easyexcel一个很棒的Excel解析工具
  18. 望而生畏的C语言在逐渐凋零
  19. nanotime java_java – 为什么我会使用System.nanoTime()获得消极的时间?
  20. 2.5.1 HMC扫描小型机

热门文章

  1. 简单C#代码制作 动画播放绑定进度条
  2. android aidl权限,Android AIDL
  3. 优漫动游7天学会自媒体短视频制作可行吗?
  4. 【问题解决】小米 升级后蓝牙关闭后 早上自动打开怎么办?
  5. 基于vue3 element plus form 表单的二次封装
  6. opencv c++ 图像形态学操作
  7. 令你有所触动的经典语录
  8. python用程序说爱你,抖音表白程序Python版,明人不说暗话,我喜欢你
  9. 计算机的HDMI接口没反应,笔记本win10系统下hdmi接口失灵的解决方法
  10. 怎么判断外贸企业网站的好坏?