首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高数据非常不对称的猪作业的性能?

如何提高数据非常不对称的猪作业的性能?
EN

Stack Overflow用户
提问于 2012-10-13 06:15:50
回答 1查看 1.3K关注 0票数 1

我正在运行一个pig脚本,它执行GROUP BY和嵌套的FOREACH,由于一个或两个reduce任务,它需要几个小时才能运行。例如:

代码语言:javascript
复制
B = GROUP A BY (fld1, fld2) parallel 50;

C = FOREACH B {
   U = A.fld1;
   DIST = DISTINCT U;
   GENERATE FLATTEN(group), COUNT_STAR(DIST);
}

在检查慢任务的计数器后,我意识到这两个reducers处理的数据比其他任务多得多。基本上,我的理解是数据是非常不对称的,所以“慢”的任务实际上比快的任务做了更多的工作。我只是想知道如何提高性能?我讨厌通过增加并行度来拆分工作,但这是唯一的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-15 10:11:58

第一个选项是使用自定义分区程序。Check out the documentation on GROUP for more info (check out PARTITION BY, specifically).不幸的是,您可能必须在此处编写自己的自定义分区程序。在您的自定义分区程序中,将第一个巨大的键集发送到reducer 0,将下一个键集发送到reducer 1,然后对剩下的部分进行标准的散列分区。这样做的目的是让一个reducer独占处理大的,而其他的获得多组密钥。然而,这并不总是能解决严重倾斜的问题。

这两个庞大的数据集的价值有多大?当像NULL或空字符串这样的东西时,我看到了很大的偏差。如果它们不是那么有价值,那么在GROUP BY之前过滤掉它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12867846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档