活跃农民
- 积分
- 659
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-4-27
- 最后登录
- 1970-1-1
|
读了mapreduce的论文,初步的了解了map reduce计算模型的整个过程:
1. map阶段,将输入pair处理并输出一个中间的<key, value> pair
2. reduce阶段:将中间的pair根据key进行聚合操作,输出为最终的结果文件
大多数的任务都可以被表达成这两个任务:
1. word count。map阶段输出<word, 1>, reduce阶段将相同的word的1相加,就是最终的词频
2. 分布式grep。map将匹配到的行用<pattern, line>保存起来,reduce只需要将line结果复制到输出文件
3. web-link反转。map输出<target, source>, reduce将target聚合<target, list(source)>
4. 倒排索引。map输出<word, docid>, reduce输出<word, list(docid)>
5. sort。暂时还没有搞懂,但是外排序一般是必须的
在实现层面:
一个Master, 多个Worker,Worker可以有map,reduce两种角色
输入文件分区: 在用户程序利用library来做,分区大小是16M~64M(具体为什么我得继续了解下),这M个分区会被复制到所有的map worker上
map阶段:处理输入并处理文件,利用用户提供的Map函数将输入的pair处理并且输出为一个中间数据,保存在memory中,并且周期性的写入磁盘并且分为R个区,当map阶段结束后,向master发一些location的push,master收到后将这个location转发给对应的reduce woker
reduce阶段:收到location,利用RPC进行读取,处理结束后最终保存到global file systrm
re-execute是解决执行失败的主要方法
|
|