pig中group时数据倾斜问题

在使用pig时遇到了数据倾斜问题。某些数据能够正常计算,但是对于另一些数据reduce job运行至某个地方会报错GC overhead limit exceeded,实际上就是OOM了。

首先分析问题是什么,观察到计算错误的数据并没有被计算完,且每次日志是停在固定位置的,从日志内容可以看出,GC overhead发生在reduce job前准备reduce的参数Tuple时,推断某些key过大导致Tuple过大,因而无法计算完成。

一种可能的解决方式就是增大reduce job数,将原来可能1亿的key到同一个reduce job变为1亿key分到多个reduce job,这种方式在遇到瓶颈时只需要加reduce job数就可以继续扩展。

修改前的代码如下

population_info = FOREACH (GROUP data_cols BY ($PSIColumn, $1) PARALLEL $column_parallel) GENERATE PopulationCounter(*) as counters;

修改后的代码,基本思想就是使用一个salt同时作为group by的key先做一次group by,此时数据已经被处理和归并过一次,无论是长度还是条数都大幅减小,然后再使用原来的key再做一次group by,此时得到的结果就是最终想要的结果,其过程类似“大内存优化reduce”中的做法。

data_cols = FOREACH data_cols GENERATE $PSIColumn, columnId, value, tag,  rand as salt, weight;
data_cols_grd = GROUP data_cols BY ($PSIColumn, columnId, salt) PARALLEL $column_parallel;
population_info = FOREACH data_cols_grd GENERATE FLATTEN(group), PopulationCounter(*) as counters;

population_info = FILTER population_info BY counters is not null;

population_grp = GROUP population_info BY ($PSIColumn, columnId);
population_info = FOREACH population_grp GENERATE PopulationCounterSum(*) as counters;

pig参数调优详解 https://www.twblogs.net/a/5b8e28312b7177188343377e/zh-cn

pig性能调优分析 https://pdfs.semanticscholar.org/ec19/1d78641c81fcc7e744cded3a0e8847fe86a4.pdf

大内存优化reduce https://stackoverflow.com/questions/11999268/how-to-handle-spill-memory-in-pig

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值