MapReduce论文阅读记录

本文为阅读MapReduce论文的记录,内容主要是论文的第三部分——实现。方便本人今后查看。

1. 运行概述

下图展示了 MapReduce 过程的整体情况

这里写图片描述

当用户程序执行 MapReduce 时,会依次发生以下动作(对应图中的标号):

  1. 用户程序中的 MapReduce 库将输入文件分成 M 个分片,每片有16M-64M(由用户决定),MapReduce 库还会将程序拷贝到集群机器上。

  2. 集群中有一个 master,多个 worker。在拷贝程序过程中,其中 master 获得的程序是特殊的。master 将分配工作给 worker。现在有 M 个 map 任务和 R 个 reduce 任务需要被分配。master 会选择空闲的 worker,分配给 map 任务或 reduce 任务。一个 worker 只能担任一个 map 任务或 一个reduce 任务。

  3. 被分配 map 任务的 worker 接下来会读取相应的输入块,将输入数据解析成 k-v 对,并将 k-v 对传给用户定义的 Map 函数。由 Map 函数生成的中间结果 k-v 对缓存在内存中。

  4. 缓存的中间结果将定期地被写到本地磁盘上。分区函数(例如,hash(key) mod R)将中间结果分割成 R 个分区。然后,中间结果在本地磁盘的位置将传回给 master,接着 master 将负责把这些位置传给reduce worker。

  5. 当 reduce worker 被 master 通知了中间结果的位置,它将通过 RPC 读取 map worker 本地磁盘上的中间结果。当完成读取工作,它会对中间结果进行排序,让具有相同 key 的对被分组在一块。

    排序工作的重要性在于:通常具有不同 key 的对会被分到同一个 reduce 任务中(与分区函数有关)。如果由于中间结果过大,无法装进内存进行排序,需要使用外部排序。

  6. reduce worker 对已排序的数据进行遍历,每遇到一个不同的 key,便将 key 与对应的一系列 value 传给用户定义的 reduce 函数。其输出将作为该 reduce 分区的结果,追加到最终的输出文件中。

  7. 当所有的 map 、reduce 任务完成, master 将唤醒用户程序。同时,用户程序中的mapreduce 调用得到返回。

在执行完成后,mapreduce 的输出将是 R 个文件(每个 reduce 任务一个)。通常,用户不需要将这 R 个文件合并成一个,可作为输入传给另一个 mapreduce 调用,或另一个分布式程序。


2. Master 数据结构

对于每个 map、reduce 任务,master 都会存储其状态(idle、in-progress、completed)和 non-idle的 worker 的信息。

master 在 map 任务到 reduce 任务之间传输中间结果的位置。对于每个完成的 map 任务,master 会存储其 R 个分区的位置和大小,并将该信息逐渐传输给处于 in-progress的reduce worker。


3. 容错

3.1 worker 故障

master 定期地 ping 所有 worker。如果一个 worker 长时间没有响应, master 认为该 worker 已故障。该worker 上,以下任务,将被重置为 idle 状态,并将该任务重新分配到其他 worker 上

  • 处于 completed 状态的 map 任务
  • 处于 in-progress 状态的 map、reduce 任务
  • 处于 in-progress 状态的 reduce 任务

completed 状态的 map 任务需要重新执行的原因:输出存储在故障机器的本地磁盘上,已经不可访问了。

completed 状态的 reduce 任务不需要重新执行的原因:输出存储在全局文件系统(GFS)上。

worker A 执行 map 任务,由于 A 故障了,接着由 worker B 执行该 map 任务。所有在运行 reduce 任务的 worker 都将被通知重新执行,而还没有从 worker A 读数据的 reduce 任务,将转为 worker B。

3.2 master 故障

master 定期检查点记录状态,当 master 任务死亡时,从最近的检查点状态开始执行。

3.3 本地性

网络带宽是我们的计算环境中相对稀缺的资源。 我们通过利用输入数据(由 GFS 管理)存储在组成我们集群的机器的本地磁盘上的来节省网络带宽。 GFS 将每个文件分成 64MB 块,并在不同的机器上存储每个块的多个副本(通常是3个副本)。 mapReduce master 将输入文件的位置信息考虑在内,并尝试在包含相应输入数据副本的机器上分配 map 任务。否则,它将尝试在该任务的输入数据副本附近(例如,在与包含数据的计算机处于同一网络交换机上的机器上)安排一个 map 任务。 在集群中大部分 worker 上运行大型MapReduce操作时,大多数输入数据都是本地读取的,不会消耗网络带宽。

3.4 任务粒度

从上文我们可以得知,map 阶段被划分成 M 个 task,reduce 阶段被划分成 R 个 task,MR 一般会比集群中节点数大得多。每个节点运行多个 task 有利于动态的负载均衡,加速 worker 从失败中恢复。

在具体的实现中,MR 的大小是有实际限制的,因为 master 至少要做 O(MR) 次的调度决策,并且需要保持O(M * R)个状态(使用的内存并不大,一条 M-R 记录需要 1 字节)。

通常情况下,R 的大小是由用户指定的,而对 M 的选择要保证每个任务的输入数据大小,即一个输入分片在 16MB~64MB 之间(数据本地性最优)。R 的大小是 worker 数量的一个较小的倍数。

3.5 备份任务

一种最常见的延长 mapreduce 运行总时间的原因是 “straggler”:一台机器花费异常时间完成最后一个 map 或 reduce 任务。“straggler” 出现的原因有很多,例如:磁盘有问题,读取速度下降;集群调度在机器上安排了其他任务,由于竞争CPU、内存、本地磁盘或网络带宽,导致其更慢地执行 mapreduce 代码。

解决“straggler”的机制:当 mapreduce 操作快完成时, master 会备份剩余的 in-progress 状态的任务。无论主程序或备份程序执行完成,该任务都会被标记为已完成。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • mapreduce是什么? 是一个编程模型, 分为map和reduce. map接受一条record, 将这条re...
    日出卡尔阅读 928评论 0 0
  • MapReduce 一、什么是MapReduce 1.1 定义: MapReduce是Google提出的一个软件架...
    806349745123阅读 692评论 0 1
  • sina mapreduce是一种模式,hadoop是一种框架,是一个实现了mapreduce模式的开源的分布式并...
    橙小汁阅读 1,661评论 0 5
  • Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce...
    5a4982b9b5fe阅读 276评论 0 2
  • 绩效管理 目标管理,成果管理。 定目标,追过程,拿结果,表优劣。 1.使命:我们为什么远航 2.愿景:我们到底驶向...
    程本超阅读 163评论 0 1