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. Android Q:新系统名称和新特性整理
  2. UltraEdit UE常见问题 使用必读
  3. 磁盘阵列简介---图片说明
  4. LaTeX技巧如何拆分源文件并且分别编译
  5. Java成员方法遵循动态绑定机制
  6. UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
  7. 次梯度(subgradient)
  8. Python的重要模块:collections (namedtuple、defaultdict、deque、Counter、OrderedDict、ChainMap)
  9. matlab imformats,그래픽스 파일에 이미지 쓰기
  10. Windows 10通过本地镜像离线安装.NET 3.5
  11. 我是主考官:给一位应届毕业生的回信
  12. python中图例legend标签内容_Python学习第87课-数据可视化之图形标识title、label、legend...
  13. Win10如何卸载自己安装的软件
  14. php有没有能无限遍历,php无限遍历目录代码
  15. Unity开发——CPU优化篇
  16. AES加密算法|密码学|网络空间安全
  17. 【机器视觉】——焦距计算物体实际尺寸计算
  18. Microsoft Visual Studio 建表格
  19. 手写原笔迹输入_OneNote/YouNote原笔迹手写_原道 W8S_平板电脑评测-中关村在线
  20. 麻将编程c语言,C语言麻将算法(胡牌算法)

热门文章

  1. 小鲸鱼的前世今生--Docker
  2. mysql中无穷大如何表示_python如何表示无穷大
  3. 程序员,不要让微博占用你太多时间。
  4. html5 幻灯片动画效果,18种响应式分层动画jQuery幻灯片特效
  5. 自媒体时代,我们该怎么做好自媒体
  6. hive中如何把unixtimestamp转成小时分钟
  7. matlab中svm算法实现,svm算法matlab实现
  8. Ubuntu18.04之shutdown开/关机
  9. 仿新浪微博短链接生成短链接(使用62进制)
  10. [世界杯] 阿根廷 vs 塞黑 破本次比赛的最高得分悬殊 6-0