一个任务的分区数量通常很多,如果只是简单地将数据存储到Executor上。在执行reduce任务时会存在大量的网络I/O操作,这时网络I/O将成为系统性能的瓶颈,reduce任务读取map任务的计算结果变慢,导致其他想要分配到被这些map任务占用的节点的任务不得不等待或者降低本地化选择分配到更远的节点上。对于更远节点的I/O本身会更慢,因此还会导致更多的任务得不到分配或者无法高效本地化。经过这样的恶性循环,整个集群将变得迟钝,新的任务长时间得不到执行或者执行变慢。
通过在map端对计算结果在缓存中执行聚合和排序,能够节省I/O操作,进而提升系统性能。这种情况下,必须要定义聚合器(aggregator)函数,以便于对计算结果按照按照partitionID和key聚合后进行排序。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。