System Design class 6 – Computing with MapReduce

System Design class 6 - Computing with MapReduce | Liang Yu's Website 盒子

一个问题引出 Map-Reduce 框架的应用

Interviewer: Count the word frequency of a web page?
Leetcode Question:

方法一:
For Loop with HashMap,>

方法二:
多台机器 For Loop, 在merge的时候,那个机器上会有Bottle Neck

方法三:
使用MapReduce这个框架来解决问题

什么是MapReduce

MapReduce是一种集群数据并行计算的编程模型。MapReduce编程模型有Map(映射)和Reduce(规约)两个阶段。(还包括Shuffle这个过程)

采用的思想

假设我们手上有很多复杂的数据,那么怎样来处理呢?1.把数据分类,分类后的数据就不复杂了,这就是异化为同。2.分割,分割就是把数据切分为小块,这样就可以并发或则批量处理了,这既是大而化小。

MapReduce Framework解决了什么问题

  • 负责把文章拆分为一小段一小段
  • 中间传输整理, 把某一个split放在哪个机器上

MapReduce Steps

  1. Input – 设定好输入文档
  2. Split – 系统把文档尽量平分到每个机器
  3. Map —- 实现怎么把文章切分成单词
  4. Transfer |- 需要我们实现的两部分
  5. Reduce —- 实现怎么把单词统一在一起
  6. Output – 设定输出文档

MapReduce的规模

  1. Map多少台机器? Reduce 多少台机器?
    课程中,老师在lab里面配置了由10台Linux机器构成的系统。工业界,一般1,000 Map Node, 1,000 Reduce Node。

  2. 机器越多越好么?

    • Advantage
      • 机器越多,每台机器处理的数据就越少,总处理数据就越快
    • Disadvantage
      • 启动机器的时间相应变长
  3. Reduce的机器是越多就越快么?

    • Reduce的上限是Key的数目,相同的key只会被分到同一个机器上

传输的截图

传输整理这一步应该怎么设计?

传输的细节截图