典型分布式系统分析:MapReduce
在 《分布式学习最佳实践:从分布式系统的特征开始(附思维导图)》一文中,提到学习分布式系统的一个好方法是思考分布式系统要解决的问题,有哪些衡量标准,为了解决这些问题;提出了哪些理论、协议、算法,这些解决办法各自的优缺点、适用场景;然后再思考,不同的系统是如何解决同一个问题的,比如说数据分片,比如说元数据的高可用,到了工程实践这个层面是怎么解决的。
刘杰的《分布式系统原理介绍》一文中,也是介绍了分布式系统的诸多概念和协议,然后说道:
“即便如此,笔者觉得后续可以再作一篇《典型分布式系统分析》,从各个系统的角度横向分析这些系统的特点。”
但是我在网上搜索并没有发现相关的文章,本文冒昧地使用了这个题目,而我自己深知,在分布式领域我知之甚少,因此只算得抛砖引玉,希望大牛多指正。如果业界前辈能够有时间来写写这个系列,那就更好了。
在这个系列中,一般都是根据论文对系统进行简介,然后尝试回答一下问题:
● 系统在性能、可扩展性、可用性、一致性之间的衡量,特别是CAP
● 系统的水平扩展是如何实现的,是如何分片的
● 系统的元数据服务器的性能、可用性
● 系统的副本控制协议,是中心化还是去中心化
● 对于中心化副本控制协议,中心是如何选举的
● 系统还用到了哪些协议、理论、算法
本文地址:http://www.cnblogs.com/xybaby/p/8878054.html
MapReduce简介
在google的论文《MapReduce: Simplified Data Processing on Large Clusters》中,MapReduce既指一种编程模型,又指google为这种编程模型开发的一套运行时框架。
MapReduce is a programming model and an associated implementation for processing and generating large data sets.
在《初识分布式计算:从MapReduce到Yarn&Fuxi》一文中,已经对MapReduce进行了详细介绍,而且论文本身也非常容易读懂。所以在本文中,只重述一些重要的点 -- 决定了MapReduce这个系统的特征的点。
MapReduce运算模型
MapReduce编程模型来自函数式编程,包含两个最基本的算子:map,reduce
map: (k1, v1) -> [(k2, v2)]
reduce: [(k2, [v2] )] --> [(k3, v3)]
将一个运算任务分解成大量独立正交的子任务,每个子任务通过map算子计算,得到中间结果,然后用reduce算子进行聚合,得到最终结果。这两个算子看起来简单,但很多问题都能用这个模型来解决。
这两个算子有一个很重要的特征:确定性的纯过程调用(pure function),函数既不会修改输入,也不存在中间状态,也没有共享的内存。因此,输入一致的情况下,输出也是一致的,这大大方便了容错性设计。
MapReduce运行框架
运行框架的作用在于提高用户(在这里也是程序员)的生产力,用户只需通过map function、reduce function描述自己的计算问题,而不用关心计算在哪个机器上进行、相互之间如何通信、机器故障如何处理等复杂的问题,因为这些问题本身与计算任务不相关。

系统中有两类主要的进程节点:master(单点),worker(多个)。其中,worker根据不同的计算任务,又分为map worker(对应上图中的Map phase)、reduce worker(对应上图中的Reduce phase)。
master是系统的中心节点,负责计算任务到worker节点的分配,同时监控worker节点的状态。如果某个worker计算太慢,或者宕机,master会将该worker进程负责的计算任务转移到其他进程。
map worker从GFS(google file system)中读取输入数据,然后将中间结果写到本地文件;reduce worker从master处得知中间结果的问题,通过rpc读取中间文件,计算之后将最终结果写入到可靠存储GFS。
MapReduce系统分析
Scalability
由于计算任务的正交性,很容易通过增加map worker、reduce worker来处理计算任务的增长。Input file 到 Map phase这个阶段,使用了基于范围(range based)的分片方法,master作为元数据服务器会记录split到worker的映射关系。当用户指定R份最终输出(也就是reduce worker的输出)时,如何对中间结果(intermediate files)进行划分呢?系统默认提供了hash分片方法(e.g. hash(key) mod R), 也允许用户自行提供partition function来进行划分。
We subdivide the map phase into M pieces and the reduce phase into R pieces, as described above.Ideally,M and R should be much larger than the number of worker machines.Having each worker perform many different tasks improves dynamic load balancing, and also speeds up recovery when a worker fails: the many map tasksit has completed can be spread out across all the other worker machines.
系统的scalability主要受到master的约束,master是系统中的单点,需要维护每个计算子任务(task)的状态,与所有的worker保持心跳,记录map worker计算的中间结果的文件位置。
Availability
系统对worker的容错性较好,但对master的容错性较差。
master通过心跳来保证确定worker是否存活,如果心跳超时,那么master标记这个worker failed,然后将该worker所负责的所有task设置为idle(等待计算)状态。在《关于心跳、故障监测、lease机制》一文种中,提到了心跳检测只能保证完整性(completeness),无法保证准确性(accuracy),接下来后分析到,在MapReduce,不准确也是没有关系的。
对于map worker,计算结果是写到本地文件,本地文件的位置需要通知到master,即使同一个task被多个map worker执行,单点的master只会采纳一份中间结果。而且上面提到了map function是pure function,所以计算结果也是一样的。
对于reduce worker,reduce task的计算结果会先写到临时文件(temporary file),task完成之后再重命名写入gfs,那么如果一个reduce task再多个reduce worker上计算,那么会不会有问题呢,答案是不会的
We rely on the atomic renameoperation provided by the underlying file system to guarantee that the final file system state contains just the data produced by one execution of the reduce task.
而由于master是单点,即使有周期性的checkpoint也可能造成状态的不一致,因此MapReduce会将master的crash告知用户,用户可自行决定是否重试整个计算。
Performance
MapReduce作为离线计算平台,更多关注的是系统的吞吐率,那么有哪些提高性能的点呢
第一:data locality
在论文中提到,网络传输代价是昂贵的,所以如果worker能从本地文件系统读取数据的话就能尽可能的少网络传输。这也归功于GFS系统,GFS以chuck(对应的就是Input file split)的粒度将每一份文件在不同的机器上保存三份。那么master在掌握了chunk的位置时,就可以将map worker调度到相应的机器,避免网络传输。
第二:backup task
master在发现某个worker上的task进展异常缓慢的时候,会将这个task调度到其他worker,以缩短这个任务(Job)的完成时间。在上面avaliability已经提到,即使有两个worker执行同一份task,也不会有问题的。
references
MapReduce: Simplified Data Processing on Large Clusters
6.824 Schedule: Spring 2016 LEC 1
典型分布式系统分析:MapReduce的更多相关文章
- 典型分布式系统分析之MapReduce
在 <分布式学习最佳实践:从分布式系统的特征开始(附思维导图)>一文中,提到学习分布式系统的一个好方法是思考分布式系统要解决的问题,有哪些衡量标准,为了解决这些问题:提出了哪些理论.协议. ...
- 典型分布式系统分析: GFS
本文是典型分布式系统分析系列的第二篇,关注的是GFS,一个分布式文件存储系统.在前面介绍MapReduce的时候也提到,MapReduce的原始输入文件和最终输出都是存放在GFS上的,GFS保证了数据 ...
- 典型分布式系统分析:Bigtable
本文是典型分布式系统分析的第三篇,分析的是Bigtable,一个结构化的分布式存储系统. Bigtable作为一个分布式存储系统,和其他分布式系统一样,需要保证可扩展.高可用与高性能.与此同时,Big ...
- 典型分布式系统分析:Dynamo
本文是典型分布式系统分析系列的第四篇,主要介绍 Dynamo,一个在 Amazon 公司内部使用的去中心化的.高可用的分布式 key-value 存储系统. 在典型分布式系统分析系列的第一篇 MapR ...
- Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解
Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...
- 分布式并行计算MapReduce
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...
- 作业——11 分布式并行计算MapReduce
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapRedu ...
- 【大数据】分布式并行计算MapReduce
作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1. 用自己的话阐明Hadoop平台上HDFS和MapReduc ...
- 【大数据作业十一】分布式并行计算MapReduce
作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce的功 ...
随机推荐
- python全栈开发-Day10 装饰器(闭合函数的应用场)
一. 装饰器 装饰器就是闭包函数的一种应用场景 什么是闭包函数?我们再来回忆一下: 闭包函数: 定义在函数内部的函数,并且该函数包含对外部函数作用域(强调:对全局作用域名字的引用不算闭包)名字的引用, ...
- NSRC技术分享——自制Linux Rootkit检测工具
### 前言 Linux系统中存在用户态与内核态,当用户态的进程需要申请某些系统资源时便会发起系统调用.而内核态如何将系统的相关信息实时反馈给用户态呢,便是通过proc文件系统.如此便营造了一个相对隔 ...
- IDEA 中配置JDK
提前安装jdk,配置环境变量 一.配置jdk 1.依次点开File -->Project Structure,点击左侧标签页,点击SDKs 2.点击+号,选SDK 3.在弹出框选择jdk路径(我 ...
- Mybatis学习笔记一
Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...
- JAVA入门——Generic/泛型
在台科大的第二次JAVA作业,老师课上讲的内容是泛型. 泛型(generic),泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以 ...
- 如何在mac上搭建sqli-labs
近期想学习sql注入,但是一来网络上的资料参差不齐,难以系统的学习:二来随着程序员安全意识的提高,这种完全可以避免的注入漏洞越来越少见了,所以难以找一个合适的网站练手,于是乎,sqli-labs这种实 ...
- C语言程序设计(基础)- 第0次作业
亲爱的同学们,恭喜你成为一名大学生,我也很荣幸能够带大家一起学习大学的第一门专业基础课.还在军训的你,肯定对大学生活和计算机专业有着美好的憧憬,那么大学生活是什么样子的那?计算机专业应该怎么学习那?请 ...
- 2017 清北济南考前刷题Day 3 afternoon
期望得分:100+40+100=240 实际得分:100+40+100=240 将每个联通块的贡献乘起来就是答案 如果一个联通块的边数>点数 ,那么无解 如果边数=点数,那么贡献是 2 如果边数 ...
- New UWP Community Toolkit - RangeSelector
概述 前面 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 RangeSelector,本篇我们结合代码详细讲解一下 Ra ...
- nyoj 聪明的kk
聪明的kk 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 聪明的"KK"非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国 ...