avatar
阳生。
风毛丛劲节,只上尽头竿。

MapReduce

这篇blog用于记录,我在学习计算机系统工程导论,有关性能的章节时,阅读的一篇叫做MapReduce的论文

工程师提出MapReduce的编程模型和实现,他们的性能目标是什么?

他们的性能目标是通过MapReduce实现大规模数据专用计算的自动并行化,使得缺少并行与分布式系统经验的程序员可以轻松利用大规模分布式系统资源,从而突破数据处理的时延这一性能瓶颈。

Google是怎么通过实现去满足这些目标的?

MapReduce程序主要有用户部分和库部分,前者根据用户的业务逻辑需要在后者的基础上进行编写,而相关的并行化、容错、本地优化和负载均衡的细节被隐藏在后者中。整个系统的工作流程是:MapReduce库分割输入文件为较小块,并启动程序运行于机器集群之上;主结点根据块的分割情况,将map、reduce任务分配给各个机器处理;map任务通过用户的MAP函数建立相应的键值对;reduce任务将map任务处理的结果进行排序从而组合相同键,再通过用户的Reduce进行处理。这样的程序系统可以运行于廉价的PC集群之上,可以显著减少时延。

基于此,Google使用MapReduce程序来进行自己业务要求的实现:重写了生成Google网页搜索服务所需数据结构的生产索引、生成流行查询报告的数据提取、用于新实验和产品的网页属性提取等等。

MapReduce为什么选择这样实现,而没有走其它技术道路?

因为许多类型的问题都可以轻松地用MapReduce这种模型进行表示,从而被并行化地计算,所以其泛用性很好;基于这种模型的处理方式具有很强的可拓展性,考虑增加相应的工作结点,就可以用较低的代价换取较高的性能提升,通过合适的Map、Reduce函数也可以带来更加个性化的工作方式;这样的实现充分考虑了故障的可能,以及潜在的风险,并设计了相对应的处理方式,使得其可靠性较强,这一点从文献中提供的相关数据也可以看出。

Site by 阳生 | Powered by Hexo | theme PreciousJoy