阅读 80

大数据基础笔记(4):为什么MapReduce这么设计

有了GFS这样的分布式存储,

  • Google会用它来做什么?

  • 给什么样的人用?

  • 会遇到哪些问题?

  • 如何解决(设计)?

1. 问题

问题思考
1.GFS拿来做什么用?搜索引擎网页分析、机器学习、信息聚类、生成报表、图计算等
2.给什么人用?数据分析师,开发工程师等。重点是,这些人对分布式技术不了解
3.会遇到哪些问题?由于使用者对GFS的分布式技术不是很了解,直接用GFS的门槛较高,因此需要提供一个简单易上手的框架(屏蔽底层复杂的细节)
4.如何解决(设计)?下面开始分析

2. 分析

拿最简单的词频统计作为例子:

输入:一个英文网页,包含了莎士比亚的经典文章

处理:统计文章中出现频率最高的词

输出:返回频率最高的词,及其在文章中出现的次数

2.1 暴力解法

假设这篇文章为2000个单词,这个程序完全可以在单机搞定。处理的逻辑也很简单,这里不做展开。

2.2 数据量规模扩大

文章的规模这时变为2TB。

  • 单机的内存无法满足

  • 计算能力也超出范围

考虑用多台计算机,分布式计算来处理。如果把文章变成抓取的网页,这个问题就是Google可能会面对的实际问题,而且处理的要求会多种多样。

3. 解决思路

3.1 要求

既然考虑用多台计算机分布式计算来解决,那么:

  1. 算法应该是可替换的,即将计算的函数作为模板,由用户提供;

  2. 由于输入会被拆分发送到计算的服务器上,最好能将输入标准化,即处理的数据结构最好单一。否则,模板化很难实现。例如,对输入执行map函数统一处理为key-value。

  3. 计算完毕,执行用户提供的函数实现汇总,得到最终结果。例如,对处理后的内容进行归纳,执行reduce函数。

  4. 在这个过程中,可能需要优化。即不同节点处理的数据在执行归纳之前,需要根据需要进行分组。就像洗牌一样,在最后发牌时能根据需要方便地拿到自己想要的牌。例如,执行shuffle函数(混洗)。

3.2 用Map/Reduce统计词频的过程

MapReduce设计1.png

4. 总结

与常见的应用框架类似,

  • MapReduce抽象了分布式计算的基本流程;

  • 提供了模板骨架,即接口;

  • 屏蔽了用户不需要关心的底层细节。

这些思路在其他的系统设计案例中也会频繁遇到,可以对照总结。


作者:tangyouhua
链接:https://juejin.cn/post/7015590674040881183


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐