这里写自定义目录标题
步骤概览
- MapReduce 库将用户成据的输入分割成 M 快,每块通常 16-64 MB。
- 存在一个 Master, 和多个 Worker。存在 M 个 map 任务和 N 个 reduce 任务等待分配。 Master从worker中选择空闲的worker来完成任务。
- 被分配了 map 任务的 worker, 读取对应的 input 中的内容。通过 Map函数,完成对输入内容的解析。解析的结果是一系列的 key/value 对。这些 key/value 对被称为中间值,被暂存在内存中。
- 定期的,这些内存中的中间值会经过一个用户自定义的 Pratition 分割函数,分成 N 份,(即 reduce task的数量)。然后写到本地的磁盘中。这些文件的存放位置需要发送给 Master, 以保证能够被正确找到,进行 reduce 任务。
- 当一个 worker 被分配了 reduce 任务后,通过远程程序调用,读取 map worker存放在其本地的中间文件。当读取了所有的中间值后,reduce worker 对中间值按照键值对的 key 进行排序。如果中间值太大以至于内存容纳不下,那么,一个可能就需要一个外部的排序。 reduce worker 重复迭代排序后的中间值。
- reduce worker接下来对中间值经过用户自定义的 Reduce 来处理。得到一个 output 文件。
- 当所有的 Map 和 Reduce完成后,程序正常退出。