MapReduce应该做更少的事情
来源:互联网 发布:matlab凸包算法代码 编辑:程序博客网 时间:2024/05/29 17:19
MapReduce 做的事情太多了。相比 unix 思想,它更多的是提供了一种策略(Policy),而非一种机制(Machanism)。
对于并行计算,如果我仅仅需要一种机制,暂且把这种机制叫做S,那么S只需要提供:
- 任意切分原始输入 ——split
- 无依赖的计算 ——map
- 按依赖切分中间结果 ——partition
- 有依赖的计算 ——reduce
- 容错 ——MR 矩阵(包括数据)
MapReduce当然提供了这个机制,只是,以它自己特定的方式(Policy)提供——就是排序。
Map 阶段是无依赖的计算,Reduce是有依赖的计算。Map的输入集合可以是任意顺序,任意切分,Combine可以看作只是为了提升效率而提前解决局部(local)依赖。
Reduce用来解决依赖,这个依赖,是按照Key的依赖,相同的Key和它的Value集合,是一个依赖集。
MapReduce 使用先排序,然后把整个Key-ValueList发送给应用接口,解决了这个问题。这样做,应用代码可以极大简化。但是,同时,这也严重地限制了性能。因为它做的事情,不是S的最小集。
一个S的最小集的实现:
- Map 处理每条输入记录——无依赖的计算
- Map 将处理后的记录按某种 Hash 规则进行切分,发送到各个 Reduce
- Map 发送记录的同时,将它备份到硬盘(或内存)
- Reduce 按自己的方式进行有依赖的计算(可以排序,也可以使用Hash<Key, *> 来解依赖)
如果 WordCount 使用这种方式,可以大幅提高速度,并减少内存用量。
- MapReduce应该做更少的事情
- 程序员应该做的事情
- 程序员应该做的事情
- 程序员应该做的事情
- 程序员应该做的事情
- 我应该做的事情
- MapReduce做了多余的事情
- 【收藏】300多个jQuery插件 -(写更少的代码,做更多的事情)...
- jQuery开发教程让你写更少的代码,做更多的事情
- 程序员应该做的事情zz
- 接下来几天应该做的事情
- 项目管理:做好应该做的事情
- 程序员每年应该做的事情
- 程序员每年应该做的事情
- 产品经理应该做的事情
- 程序员一月(周)应该做的事情
- 应该拒绝做的30件事情,做回自己
- 做程序猿的老婆应该注意的一些事情
- iis问题
- frame,window.open(),等相关的跳转总结
- css经典样式
- 简述国内网络硬盘发展
- 字符串基数排序
- MapReduce应该做更少的事情
- .net 中的委托机制
- LoadRunner测试Google Suggest
- count, sum, avg by range in log(n) time
- Java之Servlet开发
- 使用 VMware Server 在 Oracle Enterprise Linux 上安装 Oracle RAC 10g(一)
- 谈一下怎样判断网页是静态的还是伪静态的?
- mysql 5.0存储过程学习总结
- 美国一个计算计程序员可以挣多少钱?