3

有关于级联/烫伤如何优化地图侧评估的通知 他们使用所谓的部分聚合。它实际上是比组合器更好的方法吗?一些常见的hadoop任务(例如字数)是否有任何性能比较?如果是这样,hadoop 将来会支持这个吗?

4

2 回答 2

1

在实践中,部分聚合比使用组合器有更多的好处。

组合器有用的情况是有限的。此外,组合器优化了任务所需的吞吐量,而不是减少的数量——这是一个微妙的区别,它加起来显着的性能增量。

在大型分布式工作流中,部分聚合的用例范围更广。此外,部分聚合可用于优化工作流所需的作业步骤数。

示例显示在https://github.com/Cascading/Impatient/wiki/Part-5中,它使用CountBySumBy部分聚合。如果您回顾一下该项目在 GitHub 上的代码提交历史,之前使用了GroupByand Count,这导致了更多的减少。

于 2013-01-03T06:16:50.547 回答
0

对于某些类型的聚合更好。级联聚合对于可以聚合的内容要灵活一些。 从级联站点(重点是我的):

级联不支持所谓的 MapReduce 组合器。组合器非常强大,因为它们减少了 Mappers 和 Reducers 之间的 IO。当您可以在 Map 端计算一些值并将它们组合在 Reducer 中时,为什么要将所有 Mapper 数据发送到 Reducers。但是组合器仅限于关联和交换函数,例如 'sum' 和 'max'。并且为了工作,必须对 Map 任务发出的值进行序列化、排序(反序列化和比较)、再次反序列化和操作,然后再对结果进行序列化和排序。组合器用 CPU 换取 IO 的收益

级联通过提供一种机制来执行部分聚合 Map 端并将它们组合到 Reduce 端,从而采用不同的方法。但是 Cascading 选择通过缓存值(达到阈值)来用内存换取 IO 增益。这种方法绕过了不必要的序列化、反序列化和排序步骤。它还允许实现任何聚合函数,而不仅仅是关联和交换函数。

于 2012-06-07T09:03:54.707 回答