-
Notifications
You must be signed in to change notification settings - Fork 623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lec1:入门介绍(以MapReduce为例) #2
Comments
什么是分布式系统?
但是分布式系统实现很复杂,需要解决各个层次上的并发,肯定会出现部分节点失效的情况,还需要有很强的系统性能优化能力(操作系统、文件系统、网络Lan->Wan、数据库等底层的优化使用)。本质上还是解决体系结构的老问题。体系结构无非三大领域:计算、存储、网络。这三大领域中关于分布式系统工程实现都有一些共性的需要解决的问题,包括
这些都是分布式系统设计与实现中需要考虑研究的问题。 |
让我们以MapReduce为例看看这个架构如何碰到上面的这些问题,又是如何解决的。 严格来讲,MapReduce是一种分布式计算模型,用于解决大于1TB数据量的大数据计算处理。著名的开源项目Hadoop和Spark在计算方面都实现的是MapReduce模型。从论文中可以看到花了不少篇幅在讲解这个模型的原理和运行过程,但同时也花了一点篇幅来讲解处理分布式系统实现中可能遇到的问题。 MapReduce的模型设计很容易进行水平横向扩展以加强系统的能力,基本分为两种任务:map和reduce,通过map任务完成程序逻辑的并发,通过reduce任务完成并发结果的归约和收集,使用这个框架的开发者的任务就是把自己的业务逻辑先分为这两种任务,然后丢给MapReduce模型去运行。设计上,执行这两种任务的worker可以运行在普通的PC机器上,不需要使用太多资源。当系统整体能力不足时,通过增加worker即可解决。 那么什么更容易导致系统性能扩展的瓶颈?CPU?内存?磁盘?还是网络?在2004年这篇文章问世的时候回答还是”网络带宽“最受限,论文想方设法的减少数据在系统内的搬运与传输,而到如今数据中心的内网速度要比当时快多了,因此如今更可能的答案恐怕就是磁盘了,新的架构会减少数据持久化到磁盘的次数,更多的利用内存甚至网络(这正是Spark的设计理念) 如何处理较慢的网络?参考论文3.4节减少网络带宽资源的浪费,都尽量让输入数据保存在构成集群机器的本地硬盘上,并通过使用分布式文件系统GFS进行本地磁盘的管理。尝试分配map任务到尽量靠近这个任务的输入数据库的机器上执行,这样从GFS读时大部分还是在本地磁盘读出来。中间数据传输(map到reduce)经过网络一次,但是分多个key并行执行 如何做负载均衡?某个task运行时间比较其他N-1个都长,大家都必须等其结束那就尴尬了,因此参考论文3.5节、3.6节系统设计保证task比worker数量要多,做的快的worker可以继续先执行其他task,减少等待。(框架的任务调度后来发现更值得研究) 如何做容错性?参考论文3.3节重新执行那些失败的MR任务即可,因此需要保证MR任务本身是幂等且无状态的。 更特别一些,worker失效如何处理?将失败任务调配到其他worker重新执行,保证最后输出到GFS上的中间结果过程是原子性操作即可。(减少写错数据的可能) Master失效如何处理?因为master是单点,只能人工干预,系统干脆直接终止,让用户重启重新执行这个计算 其实还有部分工程问题,这篇文章中并没有讨论,可能因为这些更偏重工程实践,比如:task任务的状态如何监控、数据如何移动、worker故障后如何恢复等。 最后总结一下MapReduce,这是个非常成功的分布式系统模型设计,尽管它可能不是某个问题的最佳解决方案,但是它是最通用化的解决方法(有点类似集装箱,不一定可以装最多,但是最容易标准化)。利用它你可以很轻松的将程序的逻辑进行标准化并放到多节点上并行执行。这种标准化模型的横向扩展性很强,同时因为标准化也解决了分布式系统中需要处理的种种问题,成功简化了分布式应用的开发,使得大数据处理程序得以工业级流水线生产,普通开发人员即可胜任,可谓是开启大数据时代的发明。它在工程设计上各个特性的取舍实践也很有学习的价值。 |
Lab links and expiration |
课前阅读论文:MapReduce(2004)
观看视频:Lecture1、讲义
代码实验:Lab1-MapReduce
参考资料:
The text was updated successfully, but these errors were encountered: