t*********2 发帖数: 32 | 1 【 以下文字转载自 SanFrancisco 讨论区 】
发信人: tianyagirl2 (呢喃), 信区: SanFrancisco
标 题: 请教:Map reduce到底是什么啊
发信站: BBS 未名空间站 (Mon May 26 23:28:01 2008)
我是CS的小本,经常听到有人说Google的map reduce,网上也找不到。请问这到底是什
么样的算法,是Google发明的么?谢谢。 |
j*******g 发帖数: 5 | 2 我也刚刚学的,不对的地方大家指正。
首先,最简单地说MapReduce是一种编程模式。举个例子,程序员有两个表分别有100条
记录要对他们进行join查询。最简单的办法是使用数据库。现在假设我们不想用数据库
,那么程序员把程序编写成这样
myMap.java
1.读入表文件A,B
2.做一些ETL工作,比如去除你不需要的列
3.将A和B里面的join key找出来,假设叫做key
4.将A和B所有记录按照(key,value)的格式发出去。
(key,value one from A)
(key,value two from A)
.......................
(key,value n from A)
(key,value one from B)
(key,value two from B)
.......................
(key,value m from B)
一般是发送到标准输出。
紧接着,运行时环境就处理你的(key,value)pair。把同样key的发到一个机器上(应该
是reduce进程,现在假设一台 |
b**n 发帖数: 26 | 3 写得相当详细. 楼主什么时候再写写Map Reduce对云计算的Implication? |
m*****r 发帖数: 130 | 4 map reduce是两种常见的高阶函数(high-order function),就是说它们接受至少一
个参数为函数。map 就是把一个函数应用到一个数据集里所有的元素上的高阶函数。
reduce是另外一个高阶函数,可以把一个集合的数简化(reduce)成一个值,这个
reduce一般接受一个associative 函数,譬如加法函数。
这两个函数联合起来用就可以实现很多计算。google用它是因为这个模式很适合‘并行
’的,’冗余‘的,’分布式‘的做web data有关的数据计算,譬如查找啥的。一般程
序员不需要关心并行啥的细节,只要写好那个给map、reduce的函数就好了。
除了这两个高阶函数外,还有很多别的常用函数,譬如scan。
这种东西也叫algorithm skeleton, algorithm template啥的。函数式编程语言里可
以很方便的做各种algorithm skeleton。所有的函数语言里,都包含有map、reduce这
两个最基本的高阶函数。
【在 t*********2 的大作中提到】 : 【 以下文字转载自 SanFrancisco 讨论区 】 : 发信人: tianyagirl2 (呢喃), 信区: SanFrancisco : 标 题: 请教:Map reduce到底是什么啊 : 发信站: BBS 未名空间站 (Mon May 26 23:28:01 2008) : 我是CS的小本,经常听到有人说Google的map reduce,网上也找不到。请问这到底是什 : 么样的算法,是Google发明的么?谢谢。
|
d**n 发帖数: 198 | 5 pig is still buggy
【在 j*******g 的大作中提到】 : 我也刚刚学的,不对的地方大家指正。 : 首先,最简单地说MapReduce是一种编程模式。举个例子,程序员有两个表分别有100条 : 记录要对他们进行join查询。最简单的办法是使用数据库。现在假设我们不想用数据库 : ,那么程序员把程序编写成这样 : myMap.java : 1.读入表文件A,B : 2.做一些ETL工作,比如去除你不需要的列 : 3.将A和B里面的join key找出来,假设叫做key : 4.将A和B所有记录按照(key,value)的格式发出去。 : (key,value one from A)
|
t*********2 发帖数: 32 | 6 我用了pig,觉得不是很方便啊。pig是面向oo得,但是她产生的map/reduce不一定是最
优化的吧?怎么才能看到pig自己产生的map/recude code呢?我想和自己写的作个比较。
【在 j*******g 的大作中提到】 : 我也刚刚学的,不对的地方大家指正。 : 首先,最简单地说MapReduce是一种编程模式。举个例子,程序员有两个表分别有100条 : 记录要对他们进行join查询。最简单的办法是使用数据库。现在假设我们不想用数据库 : ,那么程序员把程序编写成这样 : myMap.java : 1.读入表文件A,B : 2.做一些ETL工作,比如去除你不需要的列 : 3.将A和B里面的join key找出来,假设叫做key : 4.将A和B所有记录按照(key,value)的格式发出去。 : (key,value one from A)
|
t*********2 发帖数: 32 | 7 pig最主要的bug是什么?
【在 d**n 的大作中提到】 : pig is still buggy
|