我正在运行一个执行 GROUP BY 和嵌套 FOREACH 的猪脚本,由于一个或两个减少任务,该脚本需要数小时才能运行。例如:
B = GROUP A BY (fld1, fld2) parallel 50;
C = FOREACH B {
U = A.fld1;
DIST = DISTINCT U;
GENERATE FLATTEN(group), COUNT_STAR(DIST);
}
在检查慢任务的计数器后,我意识到这两个 reducer 处理的数据似乎比其他任务多得多。基本上,我的理解是数据非常倾斜,因此“慢”任务实际上比快速任务做更多的工作。我只是想知道如何提高性能?我讨厌增加并行性来尝试拆分工作,但这是唯一的方法吗?