Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
iasonliu committed Jan 4, 2024
1 parent 3b2e7e7 commit 9c75737
Showing 1 changed file with 0 additions and 33 deletions.
33 changes: 0 additions & 33 deletions _posts/2021-04-01-mit6824-2.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -41,36 +41,3 @@ comments: true
- `Get(k) -> v`

强一致性系统: 保证最新的一致性,但成本很高, 因为你必须跟他人进行大量的交流才能实现强一致性概念.

# Mapreduce
这是一个典型的 mapreduce job
![mapreduce](/images/posts/mapreduce01.png)
- 整个计算流程被称为 `Job`
- 任何一次 Map/Reduce的调用被称为 `Task`

一个完整的 `job` 由一系列 `map task``reduce task` 组成.

{% highlight ruby %}
Map(k,v)
split V into words
for each word w
emit(w, "1")
{% endhighlight %}

Map函数, k 是一个文件名, v 代表传入这个 map 函数的输入文件的内容. 通过调用 MapReduce framework 的 map 函数可以做出发送(emit)动作, emit 在 map 函数中 worker 会讲结果写入本地磁盘或存储
{% highlight ruby %}
Reduce(k, v)
emit(len(v))
{% endhighlight %}
K is word, Reduce 函数会更加这个 key 所关联的所有 map 对应的值得到一个 vector 数组. master 发送执行 Reduce 函数至 worker 节点以后, worker 节点会和所有 map执行节点通讯, 请求 map 结果文件然后执行 emit 操作, emit 在 Reduce 函数中 worker 会将结果写入集群或共享文件系统(GFS),作为最终结果.

GFS 会自动将你存储在它之上的任何大文件分割成 64Mb 大小的数据块, 并将它们分散存储在许多服务器上,

2004 年 当 mapreduce 提出的时候,系统最大的瓶颈来源于网络吞吐量, 所以他们通过一系列方法来避免网络传输, 本地优化:
- 其中一种就是讲 GFS 服务器和 mapreduce worker 配置在同一个计算机集群中, 接着 master 会讲 map 任务拆分,然后分配给不同的 worker, master 会从 GFS 找出实际保存该输入文件所在的服务器.
- map会将结果输出到运行map的计算机本地磁盘上

![mapreduce](/images/posts/shuffle.png)
- 当reduce 执行的时候, reduce 的 worker 会要求 map 的 worker 将行存储转换成列存储, 这个过程在论文中称作 **shuffle**. 这个过程将从整个网络中的 map worker 中获取数据, 这也是 mapreduce 中非常消耗性能的一部分.

但现在 2020 年, 许多数据中心的网络瓶颈已经解决了, 不会再有root路由器的性能瓶颈, google可能也不用MapReduce很久了, 所以map函数其实可以自由的从任何网络获取数据不知局限于本地磁盘了.

0 comments on commit 9c75737

Please sign in to comment.