电子工业出版社《云计算(第二版)》配套课件 第2章 Google云计算原理与应用 《云计算(第二版)》购买网址: 当当网:http://product.dangdang.com/product.aspx?product_id=21094102 京东商城:http://book.360buy.com/10658667.html 解放军理工大学 刘鹏 教授主编 华东交通大学 刘鹏 制作
《云计算(第二版)》购买网址: 当当网 京东商城 姊妹力作《实战Hadoop》购买网址: 当当网 京东商城 《云计算(第二版)》购买网址: 当当网 京东商城 《云计算(第二版)》购买网址: 当当网:http://product.dangdang.com/product.aspx?product_id=21094102 京东商城:http://book.360buy.com/10658667.html 姊妹力作《实战Hadoop》购买网址: 当当网 京东商城
提 纲 Google文件系统GFS 分布式数据处理MapReduce 分布式锁服务Chubby 提 纲 Google文件系统GFS 分布式数据处理MapReduce 分布式锁服务Chubby 分布式结构化数据表Bigtable 分布式存储系统Megastore 大规模分布式系统的监控基础架构Dapper Google应用程序引擎
Google文件系统GFS 系统架构 容错机制 系统管理技术
秘密武器:云计算平台! Google业务 全球最大搜索引擎、Google Maps、Google Earth、Gmail、YouTube等 数据量巨大,且面向全球用户提供实时服务 秘密武器:云计算平台! Google云计算平台技术架构 文件存储,Google Distributed File System,GFS 并行数据处理MapReduce 分布式锁Chubby 分布式结构化数据表BigTable 分布式存储系统Megastore 分布式监控系统Dapper
是否可以在一堆廉价且不可靠的硬件上构建可靠的分布式文件系统? GFS设计动机 Google需要一个支持海量存储的文件系统 购置昂贵的分布式文件系统与硬件? 是否可以在一堆廉价且不可靠的硬件上构建可靠的分布式文件系统? 为什么不使用当时现存的文件系统? Google所面临的问题与众不同 不同的工作负载,不同的设计优先级(廉价、不可靠的硬件) 需要设计与Google应用和负载相符的文件系统
GFS将容错的任务交给文件系统完成,利用软件的方法解决系统可靠性问题,使存储的成本成倍下降。GFS将服务器故障视为正常现象,并采用多种方法,从多个角度,使用不同的容错措施,确保数据存储的安全、保证提供不间断的数据存储服务 GFS架构是怎样的?
系统架构 Client(客户端):应用程序的访问接口 Master(主服务器):管理节点,在逻辑上只有一个,保存系统的元数据,负责整个文件系统的管理 Chunk Server(数据块服务器):负责具体的存储工作。数据以文件的形式存储在Chunk Server上
客户端首先访问Master节点,获取交互的Chunk Server信息,然后访问这些Chunk Server,完成数据存取工作。这种设计方法实现了控制流和数据流的分离。 Client与Master之间只有控制流,而无数据流,极大地降低了Master的负载。 Client与Chunk Server之间直接传输数据流,同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server,从而使得整个系统的I/O高度并行,系统整体性能得到提高。 实现机制 GFS特点有哪些?
GFS特点 采用中心服务器模式 不缓存数据 在用户态下实现 只提供专用接口 可以方便地增加Chunk Server Master掌握系统内所有Chunk Server的情况,方便进行负载均衡 不存在元数据的一致性问题 不缓存数据 文件操作大部分是流式读写,不存在大量重复读写,使用Cache对性能提高不大 Chunk Server上数据存取使用本地文件系统,若读取频繁,系统具有Cache 从可行性看,Cache与实际数据的一致性维护也极其复杂 在用户态下实现 利用POSIX编程接口存取数据降低了实现难度,提高通用性 POSIX接口提供功能更丰富 用户态下有多种调试工具 Master和Chunk Server都以进程方式运行,单个进程不影响整个操作系统 GFS和操作系统运行在不同的空间,两者耦合性降低 只提供专用接口 降低实现的难度 对应用提供一些特殊支持 降低复杂度
Google文件系统GFS 系统架构 容错机制 系统管理技术
Chunk副本的位置信息(默认有三个副本) Master容错 Name Space,文件系统目录结构 Master Chunk与文件名的映射 Chunk副本的位置信息(默认有三个副本)
单个Master,对于前两种元数据,GFS通过操作日志来提供容错功能 第三种元数据信息保存在各个Chunk Server上,Master故障时,磁盘恢复 GFS还提供了Master远程的实时备份,防止Master彻底死机的情况 Name Space,文件系统目录结构 Master Chunk与文件名的映射 Chunk副本的位置信息
Chunk Server容错 采用副本方式实现Chunk Server容错 每一个Chunk有多个存储副本(默认为三个),分布存储在不同的Chunk Server上用户态的GFS不会影响Chunk Server的稳定性 副本的分布策略需要考虑多种因素,如网络的拓扑、机架的分布、磁盘的利用率等 对于每一个Chunk,必须将所有的副本全部写入成功,才视为成功写入
尽管一份数据需要存储三份,好像磁盘空间的利用率不高,但综合比较多种因素,加之磁盘的成本不断下降,采用副本无疑是最简单、最可靠、最有效,而且实现的难度也最小的一种方法。 Simple, and good enough!
GFS中的每一个文件被划分成多个Chunk,Chunk的默认大小是64MB Chunk Server存储的是Chunk的副本,副本以文件的形式进行存储 每个Chunk又划分为若干Block(64KB),每个Block对应一个32bit的校验码,保证数据正确(若某个Block错误,则转移至其他Chunk副本)
Google文件系统GFS 系统架构 容错机制 系统管理技术
GFS构建在不可靠廉价计算机之上的文件系统,由于节点数目众多,故障发生十分频繁 大规模集 群安装技术 故障检测技术 系统管理技术 Google采用了多种机制降低服务器能耗,如采用蓄电池代替昂贵的UPS 新的Chunk Server加入时 ,只需裸机加入,大大减少GFS维护工作量 节点动态加入技术 节能技术
小结 简单的,就是最好的!
讨论 GFS有什么问题吗?
分布式数据处理MapReduce 产生背景 编程模型 实现机制 案例分析
一种处理海量数据的并行编程模式,用于大规模数据集(通常大于1TB)的并行运算。 MapReduce 一种处理海量数据的并行编程模式,用于大规模数据集(通常大于1TB)的并行运算。 “Map(映射)”、“Reduce(化简)”的概念和主要思想,都是从函数式编程语言和矢量编程语言借鉴 适合非结构化和结构化的海量数据的搜索、挖掘、分析与机器智能学习等
Google拥有海量数据,并且需要快速处理 全球Web数据 邮件数据 地图数据 卫星照片 ……
简单的问题,计算并不简单! 待处理数据量巨大(PB级),只有分布在成百上千个节点上并行计算才能在可接受的时间内完成 计算问题简单,但求解困难 待处理数据量巨大(PB级),只有分布在成百上千个节点上并行计算才能在可接受的时间内完成 如何进行并行分布式计算? 如何分发待处理数据? 如何处理分布式计算中的错误? 简单的问题,计算并不简单!
Jeffery Dean设计一个新的抽象模型, 封装并行处理、容错处理、本地化计算、负载均衡的细节,还提供了一个简单而强大的接口 这就是MapReduce Google MapReduce 架构设计师 Jeffrey Dean
分布式数据处理MapReduce 产生背景 编程模型 实现机制 案例分析
MapReduce运行模型 Map函数——对一部分原始数据进行指定的操作。每个Map操作都针对不同的原始数据,因此Map与Map之间是互相独立的,这使得它们可以充分并行化 Reduce操作——对每个Map所产生的一部分中间结果进行合并操作,每个Reduce所处理的Map中间结果是互不交叉的,所有Reduce产生的最终结果经过简单连接就形成了完整的结果集
Map输入参数:in_key和in_value,它指明了Map需要处理的原始数据 开发者需编写 两个主要函数 Map: (in_key, in_value) {(keyj, valuej) | j = 1…k} Reduce: (key, [value1,…,valuem]) (key, final_value) Map输入参数:in_key和in_value,它指明了Map需要处理的原始数据 Map输出结果:一组<key,value>对,这是经过Map操作后所产生的中间结果
Reduce输入参数:(key, [value1,…,valuem]) Reduce工作:对这些对应相同key的value值进行归并处理 开发者需编写 两个主要函数 Map: (in_key, in_value) {(keyj, valuej) | j = 1…k} Reduce: (key, [value1,…,valuem]) (key, final_value) Reduce输入参数:(key, [value1,…,valuem]) Reduce工作:对这些对应相同key的value值进行归并处理 Reduce输出结果:(key, final_value),所有Reduce的结果并在一起就是最终结果
怎么用MapReduce计算一个大型文本文件中各单词出现次数? Map的输入参数指明了需要处理哪部分数据,以“<在文本中的起始位置,需要处理的数据长度>”表示,经过Map处理,形成一批中间结果“<单词,出现次数>”。而Reduce函数处理中间结果,将相同单词出现的次数进行累加,得到每个单词总的出现次数
分布式数据处理MapReduce 产生背景 编程模型 实现机制 案例分析
MapReduce操作执行流程图
操作过程 (1)输入文件分成M块,每块大概16M~64MB(可以通过参数决定),接着在集群的机器上执行分派处理程序 (2)M个Map任务和R个Reduce任务需要分派,Master选择空闲Worker来分配这些Map或Reduce任务 (3)Worker读取并处理相关输入块,Map函数产生的中间结果<key,value>对暂时缓冲到内存 (4)中间结果定时写到本地硬盘,分区函数将其分成R个区。中间结果在本地硬盘的位置信息将被发送回Master,然后Master负责把这些位置信息传送给Reduce Worker
操作过程 (5)当Master通知执行Reduce的Worker关于中间<key,value>对的位置时,它调用远程过程,从Map Worker的本地硬盘上读取缓冲的中间数据。当Reduce Worker读到所有的中间数据,它就使用中间key进行排序,这样可使相同key的值都在一起 (6)Reduce Worker根据每一个唯一中间key来遍历所有的排序后的中间数据,并且把key和相关的中间结果值集合传递给用户定义的Reduce函数。Reduce函数的结果写到一个最终的输出文件 (7)当所有的Map任务和Reduce任务都完成的时候,Master激活用户程序。此时MapReduce返回用户程序的调用点
MapReduce容错 MapReduce容错 Master会周期性地设置检查点(checkpoint),并导出Master的数据。一旦某个任务失效,系统就从最近的一个检查点恢复并重新执行 Master周期性地给Worker发送ping命令,若没有应答,则认为Worker失效,终止其任务调度,把该任务调度到其他Worker上重新执行
分布式数据处理MapReduce 产生背景 编程模型 实现机制 案例分析
假设有一批海量的数据,每个数据都是由26个字母组成的字符串,原始的数据集合是完全无序的,怎样通过MapReduce完成排序工作,使其有序(字典序)呢? 排序通常用于衡量分布式数据处理框架的数据处理能力
对原始的数据进行分割(Split),得到N个不同的数据分块
每一个数据分块都启动一个Map进行处理。采用桶排序的方法,每个Map中按照首字母将字符串分配到26个不同的桶中
按照首字母将Map中不同桶中的字符串集合放置到相应的Reduce中进行处理。具体来说就是首字母为a的字符串全部放在Reduce1中处理,首字母为b的字符串全部放在Reduce2,以此类推
谢 谢! http://www.chinacloud.cn