ApachePig—如何提高数据非常倾斜的pig作业的性能?

pbwdgjma  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(367)

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

B = GROUP A BY (fld1, fld2) parallel 50;

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

在检查慢任务的计数器时,我发现两个reducer处理的数据比其他任务多得多。基本上,我的理解是,数据是非常倾斜的,因此“慢”的任务实际上比“快”的任务做更多的工作。我只是想知道如何提高性能?我讨厌增加平行度来分割工作,但这是唯一的方法吗?

bihw5rsg

bihw5rsg1#

第一个选项是使用自定义分区器。查看上的文档 GROUP 更多信息(请查看 PARTITION BY ,具体来说)。不幸的是,您可能需要在这里编写自己的自定义分区器。在您的自定义分区器中,将第一个庞大的密钥集发送到reducer 0,将下一个密钥集发送到reducer 1,然后对剩下的部分执行标准哈希分区。这样做的目的是让一个减速机独占地处理大的减速机,而其他减速机获得多组键。不过,这并不总能解决严重倾斜的问题。
这两大数据集的计数有多大价值?我经常看到像这样的事情 NULL 或空字符串。如果它们没那么值钱,就在测试前把它们过滤掉 GROUP BY .

相关问题