ITPub博客

首页 > > > Google MapReduce到底解决什么问题?

Google MapReduce到底解决什么问题?

作者:58沈剑 时间:2019-12-30 13:46:25 0 删除 编辑

搞架构的人,Google的架构论文是必看的,但好像大家都不愿意去啃英文论文。故把自己的读书笔记,加入自己的思考,分享给大家。

 

第二篇,Google MapReduce架构启示(上)。


很多时候,定义清楚问题比解决问题更难。

 

什么是MapReduce?

它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现。

 

MapReduce这个编程模型解决什么问题?

能够用分治法解决的问题,例如:

  • 网页抓取

  • 日志处理

  • 索引倒排

  • 查询请求汇总

  • …

画外音:能够发现,现实中有许多基于分治的应用需求。

 

为什么是Google,发明了这个模型?

Google网页抓取,分析,倒排的多个应用场景,当时的技术体系,解决不了Google大数据量高并发量的需求,Google被迫进行技术创新,思考出了这个模型。

画外音:谁痛谁想办法。

 

为什么MapReduce对“能够用分治法解决的问题”特别有效?

分治法,是将一个大规模的问题,分解成多个小规模的问题(分),多个小规模问题解决,再统筹小问题的解(合),就能够解决大规模的问题。

画外音:分治法详见《分治法与减治法》。


Google MapReduce为什么能够成功?

Google为了方便用户使用系统,提供给了用户很少的接口,去解决复杂的问题。
(1)
Map函数接口:处理一个基于key/value(后简称kv)的成对(pair)数据集合,同时也输出基于kv的数据集合;
(2)
Reduce函数接口:用来合并Map输出的kv数据集合;

画外音:MapReduce系统架构,能在大规模普通PC集群上实现并行处理,和GFS等典型的互联网架构类似。


用户仅仅关注少量接口,不用关心并行、容错、数据分布、负载均衡等细节,又能够解决很多实际的问题,还有这等好事!

 

能不能举一个例子,说明下MapReduce的Map函数与Reduce函数是如何解决实际问题的?

 

举例:假设要统计大量文档中单词出现的个数。

 

Map

输入KV:pair(文档名称,文档内容)

输出KV:pair(单词,1)

画外音:一个单词出现一次,就输出一个1。

 

Reduce

输入KV:pair(单词,1)

输入KV:pair(单词,总计数)

 

以下是一段伪代码,
Map(list<pair($doc_name, $doc_content)>){

    foreach(pair in list)

        foreach($word in $doc_content)

            echo pair($word, 1); // 输出list<k,v>

}

画外音:如果有多个Map进程,输入可以是一个pair,不是一个list。

 

Reduce(list<pair($word, $count)>){// 大量(单词,1)

    map<string,int> result;

    foreach(pair in list)

        result[$word] += $count;

 

    foreach($keyin result)

        echo pair($key, result[$key]); // 输出list<k,v>

}

画外音:即使有多个Reduce进程,输入也是list<pair>,因为它的输入是Map的输出。

 

最早在单机的体系下计算,输入数据量巨大的时候,处理很慢。如何能够在短时间内完成处理,很容易想到的思路是,将这些计算分布在成百上千的主机上,但此时,会遇到各种复杂的问题,例如:

  • 并行计算

  • 数据分发

  • 错误处理

  • 集群通讯

  • …

这些综合到一起,就成为了一个困难的问题,这也是Google MapReduce工程架构要解决的问题,也就是下一章将要分享的问题,敬请期待。


思路比结论更重要。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31556838/viewspace-3154319/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
58速运CTO,互联网架构技术专家,“架构师之路”公众号作者。曾任百度高级工程师,58同城技术委员会主席,高级架构师,58到家技术委员会主席,高级技术总监,目前主要负责58速运技术部。

注册时间:2018-09-30

  • 博文量
    420
  • 访问量
    82665