欢迎来到CJY的博客|

wenli7363

园龄:3年3个月粉丝:7关注:6

【MIT6.824】Lab1 MapReduce

1 论文阅读

参考知乎这篇论文解读

2 个人答疑

  1. 在论文chapter3 实现中,为什么每个Map函数产生的中间结果,需要使用一个分片函数,将每一个Map结点产生的中间结果,分为R个部分?

我是在看上面知乎那个解读的例子才看懂的,原因是,不同的Map结点处理不同的文件,这些文件中会有很多相同的字母,比如说这篇解读的例子,3个map节点产生的中间结果,都包含it这个单词。如果没有分片函数,我们直接把每个map节点产生的结果,相应的传给一个reduce节点,那么reduce只能统计一个文件的it,这时你还需要对这些结果再次统计,才能得到这三个文件的最终结果。

或者,你说你得到中间结果之后,做一个大的整体排序,这样同样的key应该是相邻的,然后再分配任务给Reduce。这也行不通:

  1. 如果要等所有map任务结束,那么性能就有损失,毕竟要等。
  2. 如果不等,那么还是会出现上面,需要多次统计
  3. 而且你如果整体排序后,再平均分配R份中间结果,那么也是出现多次统计的问题,因为有可能一个单词出现非常多,出现在多份文件中。

论文中的解决方法非常nb,map之后用一个hash函数进行分片,分成R个region,哪怕是多个map节点都包含it这个单词,通过哈希后,每个map节点的这个key,都会包含在这个map节点的第一个region中(我假设是第一个region,具体第几个region看具体情况)。这些存储信息map之后会告诉master节点。
之后reduce节点,通过RPC从master节点处得知这些存储信息,从只需读每个map产生结果的第1个region就好了。

如果你还不能理解我的意思,看一下我上面给的解读,看一下例子,你就能理解了,妙啊妙啊!!!

posted @   wenli7363  阅读(19)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起