mr数据倾斜优化

本文探讨了数据倾斜在MapReduce中的影响,包括数据频率和大小倾斜,特别是在map和reduce端的表现。介绍了如何诊断和收集倾斜数据,并提出了减小reduce端数据倾斜的多种方法,如自定义分区、使用Combine、Map端连接等策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 减小数据倾斜的性能损失

数据倾斜是数据中的常见情况。数据中不可避免地会出现离群值(outlier),并导致数据倾斜。这些离群值会显著地拖慢MapReduce的执行。常见的数据倾斜有以下几类:

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

在map端和reduce端都有可能发生数据倾斜。在map端的数据倾斜会让多样化的数据集的处理效率更低。在reduce端的数据倾斜常常来源于MapReduce的默认分区器。

数据倾斜会导致map和reduce的任务执行时间大为延长,也会让需要缓存数据集的操作消耗更多的内存资源。

前面6.2.2和6.2.3中的技术29和34介绍了如何诊断是否存在数据倾斜。这一节中将介绍如何确定倾斜的数据,如何缓解它们的影响。

 

收集倾斜数据

本技术将关注由map的输出数据中的数据频率倾斜的问题。


问题

需要诊断map输出中哪些键存在数据倾斜。


方案

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


讨论

在发现了倾斜数据的存在之后,就很有必要诊断造成数据倾斜的那些键。有一个简便方法就是在代码里实现追踪每个键的最大值。为了减少追踪量,可以设置数据量阀值,只追踪那些数据量大于阀值的键,并输出到日志中。实现代码如下。

 1 public static final String MAX_VALUES = "skew.maxvalues";
 2 private int maxValueThreshold;
 3 
 4 @Override
 5 public void configure(JobConf job) {
 6     maxValueThresh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值