MIT6.824-lecture1(包括MapReduce论文阅读)

1. Focused Infrustructures

  • Storage
  • Computation
  • Communication(6.829)

2. Main Topics

  • Fault tolerace
    • avaliability
      continue to deliver service enven there exists some fault -> replication
    • recoverability
      bring it back when it rebuild -> logging/transactions
  • Consistency
    multi-systems word as a single system, i.e sequencial system
  • Performance
    to get a balance
    • throughput
      increase by machides numbers
    • latency / tail latency
      one small machine delay all request -> tail latency
  • Implementation

3. Thsis - Map Reduce

Abstract and Introduction

  MapReduce是一个用于处理大型数据集的编程模型。用户通过指定一个map函数,将原始数据处理成Key-Value形式的中间形式,以及一个reduce函数,处理这些中间键值对得到最终结果。许多现实世界的任务都可以通过这个模型表示。
  MapReduce是为了实现一个运行在集群上的自动并行处理系统。运行时,该系统自动完成对数据的切分、任务的派发、worker间的通信和机器运行错误。
  MapReduce隐藏了并行化(parallelization)、容错(fault-tolerance)、数据派发(data-distribution)和负载平衡(load balancing)的细节,简化任务算法的实现。
  输入和输出在gfs系统,中间在本地文件系统。

Programming Model

Type

map(k1, v1)list(k2, v2)
reduce(k2, list(v2))list(v2)

Example

  1. WordCount
    map函数将输入拆分为若干个<word, 1>,reduce函数接受这些对,输出<word, cnt>
  2. Distributed Grep
    map函数将输入进行模式匹配,输出匹配上的行,reduce函数直接复制到文件中
  3. Count of URL Access Frequency
    map函数输出<URL, 1>,reduce函数进行整合<URL, cnt>
  4. Reverse Web-Link Graph
    map函数输出<target, source>,target是网页的URL,source是网页名称,reduce函数输出<target, list(source)>
  5. Term-Vector per Host
    每一个tern-vector都是词语在文件中出现的频率<word, frequence>,map函数得到<host, term-vector>,reduce得到<host, list(term-vector)>
  6. Inverted Index
    map函数翻译每个文件,并输出<word, document ID>,reduce函数输出<word, list(document ID)>
  7. Distributed Sort
    map函数根据输入,输出<key, record>,reduce直接复制

Implementation

Overview

请添加图片描述

  1. 用户程序中的MapReduce库将输入拆分成M个片段,每个片段大小在16MB-64MB,然后启动集群内若干机器的程序副本
  2. 所有启动的程序副本中,有一个机器担任master的角色,它负责通过调度算法,分配M个map任务和R个reduce任务给其他机器
  3. 处理map任务的机器从输入中抽取负责的第m个片段,然后使用用户定义的map函数得到中间KV对,存储在本地内存缓冲
  4. 这些在本地内存缓冲中的KV对被周期性地写入到本地磁盘中,并向mater发送存储位置
  5. master将中间KV经过分区函数partional function进行shuffle后,将对应分区的中间KV地址交给reduce机器处理,reduce首先对这些文件使用RPC进行远程读取,然后对key进行排序,最后对同key的value进行合并
  6. 处理reduce的机器遍历完中间KV后,把处理好的key和value列表传递给用户定义的reduce函数,得到最后输出存入本地磁盘,并写入总文件系统
  7. 当所有的map和reduce任务完成后,master返回到用户程序

Master Data Structures

Worker-State

对每个执行map或reduce的机器,需要记录其状态(空闲、忙碌、完成)和标识符

File-Address-and-Size

对每个map产生的中间KV,要存储R个副本,master需记录这些副本的位置和大小,并将这些计算好的中间KV,增量地推送给reduce

Fault Tolerance

Worker Failure
  1. master定时ping节点,没有回应认为失败,进行任务地重新调度
  2. 已完成地map也需要重新调度,因为中间KV存储在map机器上,一旦失败就无法读取
  3. map失败会同步所有reduce,以便重定向中间KV地址
Master Failure
  1. 可以通过写日志进行回滚
  2. 但是因为只有一个master,故障可能性低,所以直接abort
Semantics in Presense of Failures

一般要求map\reduce是确定的,这样就能保证重试的结果同串行相同。如果不能保证确定,容错的语义就很弱

Locality

网络带宽会很大程度影响整体性能,现只有map到reduce中间会有通信,其他都在本地完成。出错时也优先选择同交换机内的节点进行重试,以减少网络带宽造成的影响

Task Granularity

master需要做O(M+R)的调度决策,并且记录O(M*R)个状态信息。
所以一般要求M和R要远远大于机器数量,由于R受用户影响,所以一般来说M会是一个大倍数,R是一个小倍数

Backup Task

整体框架的速度受starggler的影响,它被定义为由于各种原因导致处理速度变慢的机器。
master在所有任务即将完成的时候,会记录仍在运行中的任务,并将这些任务调度给其他机器执行,优先接受先完成的结果。

Refinements

提供了很多可扩展的参数以进行优化

Partitioning Function

分区函数影响最终输出的文件内容,因为一个reduce只生成一个磁盘文件。一般来说,将中间KV进行分区的函数使用一个哈希映射(hash(key) mod R)来完成分区,但是用户也可以根据任务的特殊性自定义。如对于URL的分析,一般来说希望将同一host的url存储在同一文件中,那么就可以定义分区函数为hash(hostname(URLKey)) mod R,这样就能让同一hostname的url在同一分区中,被同一reduce处理,存储在同一磁盘文件中

Ordering Guarantees

同一分区内的数据都是根据key进行升序排列的,这可以提高后续输出读取的速度

Combiner Function

通常来说,中间KV可能是重复的,比如词语计数中的<the, “1”>,使用一个combiner函数,在处理map的机器上,先组合一遍再向master报告完成,这样能减少对网络带宽的依赖。一般来说合并函数combiner functonreduce function是一样的代码,只是其运行的位置不同————一个在map worker上运行、一个再reduce worker上运行

Input and Output Types

标准库提供了多种类型,比如text类型和有序KV列表类型。每个类型都知道该如何将自己平均且正确的切片,比如text类型就只会在行结尾标志进行拆分,而不会拆行。用户可以自定义一个reader接口来自定义KV类型,这个接口不一定从文件读数据,也可以从数据库读

Side-effects

对于某些特定问题,可能通过map/reduce函数生成中间文件会很方便,标准库要求程序员能保证任务具有跨文件一致性,以确保操作的原子化和幂等化。

Skipping Bad Records

有些数据会导致程序陷入漏洞,标准库提供一个可选择的执行模式以记录并跳过这些数据。每个工作机器在执行任务前都会安装一个信号处理程序通过记录序列号来捕获分割冲突和总线错误,一旦发生错误,机器向master发送一个“last gasp”UDP包,master记录下坏数据以跳过

Local Execution

由于底层是分布式系统,所以调试map/reduce会很艰难。标准库提供一种模式,进行单机模拟,来调试、分析和小规模测试

Status Information

master会运行一个http服务器用以展示集群状态。

Counters

可以为map/reduce函数提供一个计数器对象的参数用以计数。计数器的综合将有master进行处理,master会进行去重(由于容错和备份机制的存在,可能会出现重复的数据副本)

4. Fault Tolerance

cordinator reruns map/reduce function

  • map function can run twice
    because maybe there exitst nont crush but network latency, the cordinator may mistake it as a cruch. But it doesn’t matter 'cause same input processed by same functoin will get a same answer.
  • reduce function can run twice
    • cordinator cannot fail
    • slow worder -> stragger
      take their work as back up task, assign the same task for other workers to do it again
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值