Skip to content

Commit

Permalink
add mapreduce
Browse files Browse the repository at this point in the history
  • Loading branch information
JameyWoo committed May 22, 2020
1 parent 2d03fd4 commit de4831c
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions 分布式.md
Expand Up @@ -12,6 +12,8 @@

[一篇掘金博客](https://juejin.im/post/5bb59f87f265da0aeb7118f2)

### 基本原理

MapReduce框架通常由三个操作(或步骤)组成:

1. **`Map`**:每个工作节点将 `map` 函数应用于本地数据,并将输出写入临时存储。主节点确保仅处理冗余输入数据的一个副本。
Expand All @@ -35,6 +37,41 @@ MapReduce 流程图:



### 容错

* worker失效: master会定期ping worker, 如果worker超时没有回复, 那么master认定他为故障. 将它的任务(未完成的Map和Reduce, 以及已完成的Map)重置为初始状态, 然后将它安排给其他的worker. 因为已完成的Map的结果保存在这台worker上, 已完成的reduce存储在全局文件系统上.
* master失效: 周期性将master结构写入磁盘, 作为检查点. 如果master失效了, 从最后一个检查点启动另一个master. 由于master恢复比较麻烦, 所以用户来决定是否重新执行mapreduce.
* Reduce完成时, 以原子的方式把临时文件重命名为最终文件.



### 优化

1. 尽量让Map任务在输入数据的机器上执行, 如果不行, 那尽量在附近机器上执行(接近从本地机器读取).
2. 针对"落伍者"问题: 在一个MapReduce操作快完成的时候, master调度备用任务来执行剩下的处于处理中的状态. (提升约40%)



### 技巧

1. 分区函数(map的worker分为R个区). 可以简单地使用hash方法, 也可以使用用户自定义的方法, 来实现特殊功能
2. 对于一个分区(Reduce部分), k-v pair的数据处理顺序是按key递增的
3. Combiner函数: 允许用户定义一个Combiner函数, 可以让k-v记录在本地进行一次合并, 然后再发送合并地结果. 比如词频统计, 不是将每个(key, 1), 而是将相同的key合并, 生成(key, k), 大大节省成本.



### mapreduce的优势

1. 并行计算

map任务之间相互独立, 可实现并行计算

2. 扩展简单, 只需要增加新的worker即可

3. 接口简单. 用户要使用MapReduce系统只需要自己定义map函数和reduce函数, 而不需要自己搭建复杂的分布式系统.






Expand Down Expand Up @@ -90,6 +127,8 @@ MapReduce 流程图:





## raft

### 一些资源
Expand Down

0 comments on commit de4831c

Please sign in to comment.