18 mapreduce 数据倾斜

什么是数据倾斜

数据倾斜就是在多个节点之间,处理数据的压力不一样,有点节点比较忙,但是有点节点比较轻松,这个就是发生了数据倾斜。

产生的原因

1、数据本身具有倾斜的特性 - 数据本身就是不平均的 - 所以数据倾斜不能避免
2、map端可能会发生数据倾斜。产生的条件三者缺一不可,分别是:多源输入、输入的文件不可切且大小不均等(从而导致有点mapTask任务重有点轻)—— 三个条件缺一不可,而且Map端的数据倾斜无法避免而且无法解决
3、实际生产过程中,reduce端的数据倾斜更多。绝大部分的数据倾斜都是发生在了Reduce端 - Reduce端产生数据倾斜的本质原因是因为数据本身具有倾斜特性,但是Reduce端产生倾斜的表面原因是因为数据的分类(分区操作)

reduce端数据倾斜解决方案

针对Reduce端的数据倾斜,经常采用的方案:二/两阶段聚合

两阶段聚合方案

1、先将数据打散,打散之后先分别聚合
2、按照业务指定分类,对数据进行最后的汇总
在这里插入图片描述
第一阶段,先将数据完全打散,将数据随机分配到多个分区上进行计算。需要考虑分区的维度。比如说姓名,月份,原本是按照月份进行分区,但是如果直接按照月份进行分区时会出现数据倾斜;所以先将所有的数据随机分配到不同的reduce节点,然后根据(姓名,月份)作为联合主键进行汇总统计。

第二阶段将第一个阶段的输出结果作为输入,对月份进行分区,在每一个分区按照名称进行汇总求和。(有点多级reduce的意思)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MapReduce数据倾斜是指在MapReduce任务,某些Map任务处理的数据量远远超过其他Map任务,导致整个任务的效率降低。数据倾斜问题是MapReduce常见的性能瓶颈之一。以下是解决MapReduce数据倾斜问题的几种方法: 1. 均匀划分数据:在MapReduce任务,数据均匀划分是防止数据倾斜的最有效的方法之一。可以通过对数据进行采样,来确定数据均匀划分的划分点。 2. Combiner函数:Combiner函数可以在Map阶段对数据进行合并处理,减少Map输出数据量,从而降低Reduce任务的负担。可以在Combiner函数对于一些key进行合并处理,减少数据倾斜。 3. 调整Reduce任务数量:当Reduce任务的数量过少时,会导致某些Reduce任务的数据处理量过大,从而产生数据倾斜。可以通过增加Reduce任务的数量来解决这个问题。 4. 增加Map任务数量:增加Map任务的数量,可以将数据均匀地分散到更多的Map任务去,从而减少数据倾斜。 5. 动态调整Map任务输入数据:可以根据Map任务处理的数据量来动态调整数据的输入,将处理量较大的数据均匀分散到多个Map任务。可以通过自定义InputFormat来实现这个功能。 6. 使用随机数进行分桶:将数据随机分配到多个桶,通过增加桶的数量来增加Map任务的数量,从而将数据均匀分散到多个Map任务。这个方法需要保证随机数分配的均匀性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值