MapReduce应该做更少的事情

MapReduce 做的事情太多了。相比 unix 思想,它更多的是提供了一种策略(Policy),而非一种机制(Machanism)。

对于并行计算,如果我仅仅需要一种机制,暂且把这种机制叫做S,那么S只需要提供:

  1. 任意切分原始输入  ——split
  2. 无依赖的计算    ——map
  3. 按依赖切分中间结果 ——partition
  4. 有依赖的计算    ——reduce
  5. 容错        ——MR 矩阵(包括数据)

MapReduce当然提供了这个机制,只是,以它自己特定的方式(Policy)提供——就是排序。

Map 阶段是无依赖的计算,Reduce是有依赖的计算。Map的输入集合可以是任意顺序,任意切分,Combine可以看作只是为了提升效率而提前解决局部(local)依赖。

Reduce用来解决依赖,这个依赖,是按照Key的依赖,相同的Key和它的Value集合,是一个依赖集。

MapReduce 使用先排序,然后把整个Key-ValueList发送给应用接口,解决了这个问题。这样做,应用代码可以极大简化。但是,同时,这也严重地限制了性能。因为它做的事情,不是S的最小集。

一个S的最小集的实现:

  1. Map 处理每条输入记录——无依赖的计算
  2. Map 将处理后的记录按某种 Hash 规则进行切分,发送到各个 Reduce
  3. Map 发送记录的同时,将它备份到硬盘(或内存)
  4. Reduce 按自己的方式进行有依赖的计算(可以排序,也可以使用Hash<Key, *> 来解依赖)

如果 WordCount 使用这种方式,可以大幅提高速度,并减少内存用量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值