西河刘卡车医 发表于 2024-7-12 23:59:11

Google云计算原理与应用(一)


  Google(谷歌)拥有环球最强大的搜索引擎。除了搜索业务,Google 还有 Google Maps、Google Earth、Gmail、YouTube 等其他业务。这些应用的共性在于数据量巨大,且要面向环球用户提供实时服务,因此 Google 必须解决海量数据存储和快速处理问题。Google 研发出了简朴而又高效的技能,让多达百万台的廉价计算机协同工作,共同完成这些任务,这些技能在诞生几年后才被命名为 Google 云计算技能。Google 云计算技能包括:Google 文件体系 GFS、分布式计算编程模子 MapReduce、分布式锁服务 Chubby、分布式结构化数据表 Bigtable、分布式存储体系 Megastore、分布式监控体系 Dapper、海量数据的交互式分析工具 Dremel,以及内存大数据分析体系 PowerDrill 等。
一、Google文件体系GFS

  Google 文件体系(Google File System,GFS)是一个大型的分布式文件体系。它为 Google 云计算提供海量存储,而且与 Chubby、MapReduce 及 Bigtable 等技能团结十分精密,处于全部核心技能的底层。GFS 不是一个开源的体系,我们仅能从 Google 公布的技能文档来获得相干知识。
  当前主流分布式文件体系有 RedHat 的GFS(Global File System)、IBM 的 GPFS、Sun 的 Lustre 等。这些体系通常用于高性能计算或大型数据中心,对硬件设施条件要求较高。以 Lustre 文件体系为例,它只对元数据管理器 MDS 提供容错解决方案,而对于具体的数据存储节点 OST 来说,则依赖其自身来解决容错的问题。例如,Lustre 推荐 OST 节点采用 RAID 技能或 SAN 存储区域网来容错,但由于 Lustre 自身不能提供数据存储的容错,一旦 OST 发生故障就无法规复,因此对 OST 的稳定性就提出了相当高的要求,从而大大增加了存储的成本,而且成本会随着规模的扩大线性增长。
  Google GFS 的新奇之处在于它采用廉价的商用呆板构建分布式文件体系,同时将 GFS 的设计与 Google 应用的特点精密团结,简化实现,使之可行,最终达到创意新奇、有用、可行的完美组合。GFS 将容错的任务交给文件体系完成,利用软件的方法解决体系可靠性问题,使存储的成本成倍降落。GFS 将服务器故障视为正常征象,并采用多种方法,从多个角度,使用不同的容错步伐,确保数据存储的安全、保证提供不中断的数据存储服务。
(一)体系架构

  GFS 的体系架构如下图所示。GFS 将整个体系的节点分为三类角色:Client(客户端0、Master(主服务器)和 Chunk Server(数据块服务器)。Client 是 GFS 提供给应用程序的访问接口,它是一组专用接口,不服从 POSIX 规范,以库文件的形式提供。应用程序直接调用这些库函数,并与该库链接在一起。Master 是 GFS 的管理节点,在逻辑上只有一个,它保存体系的元数据,负责整个文件体系的管理,是 GFS 文件体系中的 “大脑” 。Chunk Server 负责具体的存储工作。数据以文件的形式存储在 Chunk Server 上,Chunk Server 的个数可以有多个,它的数量直接决定了GFS 的规模。GFS 将文件按照固定大小进行分块,默认是64MB,每一块称为一个Chunk(数据块),每个 Chunk 都有一个对应的索引号(Index)。
https://img-blog.csdnimg.cn/direct/efb01296b4284bb183b4b4a54e9f14b1.png#pic_center
GFS将整个体系节点分为三类角色:
https://img-blog.csdnimg.cn/direct/6090d5ebae904ad88ef63f3029d59905.png#pic_center
GFS的实现机制:


[*]客户端起首访问Master节点,获取交互的Chunk Server信息,然后访问这些Chunk Server,完成数据存取工作。这种设计方法实现了控制流和数据流的分离。
[*]Client与Master之间只有控制流,而无数据流,极大地低落了Master的负载。
[*]Client与Chunk Server之间直接传输数据流,同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server,从而使得整个体系的I/O高度并行,体系整体性能得到进步。
GFS的特点:
1、采用中心折务器模式


[*]可以方便地增加Chunk Server
[*]Master掌握体系内全部Chunk Server的情况,方便进行负载均衡
[*]不存在元数据的同等性问题
2、不缓存数据


[*]文件操作大部分是流式读写,不存在大量重复读写,使用Cache对性能进步不大
[*]Chunk Server上数据存取使用本地文件体系从可行性看,Cache与现实数据的同等性维护也极其复杂
3、在用户态下实现


[*]利用POSIX编程接口存取数据低落了实现难度,进步通用性
[*]POSIX接口提供功能更丰富
[*]用户态下有多种调试工具
[*]Master和Chunk Server都以进程方式运行,单个进程不影响整个操作体系
[*]GFS和操作体系运行在不同的空间,两者耦合性低落
4、只提供专用接口


[*]低落了实现的难度。通常与 POSIX 兼容的接口需要在操作体系内核一级实现,而 GFS 是在应用层实现的。
[*]采用专用接口可以根据应用的特点对应用提供一些特殊支持,如支持多个文件并发追加的接口等。
[*]专用接口直接和 Client、 Master、Chunk Server 交互,淘汰了操作体系之间上下文的切换,低落了复杂度,进步了服从。
(二)容错机制

1、Master容错


[*]命名空间(Name Space),也就是整个文件体系的目录结构。
[*]Chunk与文件名的映射表。
[*]Chunk副本的位置信息,每一个Chunk默认有三个副本。
https://img-blog.csdnimg.cn/direct/d9b129f18ec54480b7ec0ed413fd4185.png#pic_center
  当Master发生故障时,在磁盘数据保存完好的情况下,可以迅速规复以上元数据。为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份。
2、Chunk Server容错


[*]GFS采用副本的方式实现Chunk Server的容错
[*]每一个Chunk有多个存储副本(默认为三个)
[*]对于每一个Chunk,必须将全部的副本全部写入成功,才视为成功写入
[*]相干的副本出现丢失或不可规复等情况,Master自动将该副本复制到其他Chunk Server
[*]GFS中的每一个文件被划分成多个Chunk,Chunk的默认大小是64MB
[*]每一个Chunk以Block为单位进行划分,大小为64KB,每一个Block对应一个32bit的校验和
(三)体系管理技能

  GFS 是一个分布式文件体系,包罗从硬件到软件的整套解决方案。除了上面提到的 GFS 的一些关键技能外,还有相应的体系管理技能来支持整个 GFS 的应用,这些技能可能不一定为 GFS 独有。
https://img-blog.csdnimg.cn/direct/96394620442b4572a3a154508285dd02.png#pic_center
二、分布式数据处理MapReduce

  MapReduce 是 Google 提出的一个软件架构,是一种处理海量数据的并行编程模式,用于大规模数据集(通常大于1TB)的并行运算。Map(映射)、Reduce(化简)的概念和主要思想,都是从函数式编程语言和矢量编程语言借鉴来的。正是由于 MapReduce 有函数式和矢量编程语言的共性,使得这种编程模式特殊得当于非结构化和结构化的海量数据的搜索、挖掘、分析与呆板智能学习等。
(一)产生背景

https://img-blog.csdnimg.cn/direct/31ed84e5c0fc4a63a79b44fa2da9e7ee.png#pic_center
  Jeffery Dean 设计一个新的抽象模子, 封装并行处理、容错处理、本地化计算、负载均衡的细节,还提供了一个简朴而强大的接口。这就是MapReduce。
  MapReduce 这种并行编程模式思想最早是在1995年提出的。与传统的分布式程序设计相比,MapReduce 封装了并行处理、容错处理、本地化计算、负载均衡等细节,还提供了一个简朴而强大的接口。MapReduce 把对数据集的大规模操作,分发给一个主节点管理下的各分节点共同完成,通过这种方式实现任务的可靠执行与容错机制。
(二)编程模子



[*]Map函数——对一部分原始数据进行指定的操作。每个 Map 操作都针对不同的原始数据,因此 Map 与 Map 之间是互相独立的,这使得它们可以充实并行化。
[*]Reduce操作——对每个 Map 所产生的一部分中心结果进行合并操作,每个 Reduce 所处理的 Map 中心结果是互不交错的,全部 Reduce 产生的最终结果经过简朴连接就形成了完整的结果集。
https://img-blog.csdnimg.cn/direct/ed7a5ad5980a4413a8d7ab94f98d81f1.png#pic_center
   Map: (in_key, in_value) → {(keyj, valuej) | j = 1…k}
Reduce: (key, ) → (key, final_value)


[*] Map输入参数:in_key 和 in_value,它指明确 Map 需要处理的原始数据
[*] Map输出结果:一组 <key,value> 对,这是经过 Map 操作后所产生的中心结果
[*] Reduce输入参数:(key,)
[*] Reduce工作:对这些对应雷同 key 的 value 值进行归并处理
[*] Reduce输出结果:(key, final_value),全部 Reduce 的结果并在一起就是最终结果
(三)实现机制

https://img-blog.csdnimg.cn/direct/835bc92623644fe9ac180cce00e344ef.png#pic_center
(1)MapReduce 函数起首把输入文件分成M块
(2)分派的执行程序中有一个主控程序 Master
(3)一个被分配了 Map 任务的 Worker 读取并处理相干的输入块
(4)这些缓冲到内存的中心结果将被定时写到本地硬盘,这些数据通太过区函数分成R个区
(5)当 Maste r通知执行 Reduce 的 Worker 关于中心 <key,value> 对的位置时,它调用远程过程,从 Map Worker 的本地硬盘上读取缓冲的中心数据
(6)Reduce Worker 根据每一个唯一中心 key 来遍历全部的排序后的中心数据,而且把 key 和相干的中心结果值聚集传递给用户定义的 Reduce 函数
(7)当全部的 Map 任务和 Reduce 任务都完成的时间,Master 激活用户程序
  由于MapReduce在成百上千台呆板上处理海量数据,所以容错机制是不可或缺的。总的来说,MapReduce通过重新执行失效的地方来实现容错。
1、Master失效
  Master会周期性地设置查抄点(checkpoint),并导出Master的数据。一旦某个任务失效,体系就从最近的一个查抄点规复并重新执行。由于只有一个Master在运行,假如Master失效了,则只能终止整个MapReduce程序的运行并重新开始。
2、Worker失效
  Master会周期性地给Worker发送ping命令,假如没有Worker的应答,则Master认为Worker失效,终止对这个Worker的任务调理,把失效Worker的任务调理到其他Worker上重新执行。
(四)案例分析

第一个步骤
  对原始的数据进行分割(Split),得到N个不同的数据分块。
https://img-blog.csdnimg.cn/direct/18618bf57bd94769a24e0454ac89e252.png#pic_center
第二个步骤
  对每一个数据分块都启动一个Map进行处理。采用桶排序的方法,每个Map中按照首字母将字符串分配到26个不同的桶中。
https://img-blog.csdnimg.cn/direct/4cb1a27605b946639376a4e4dc3f0082.png#pic_center
第三个步骤
  对于Map之后得到的中心结果,启动26个Reduce。按照首字母将Map中不同桶中的字符串聚集放置到相应的Reduce中进行处理。
https://img-blog.csdnimg.cn/direct/2188cb0e54254ff7af53a40fd66d09d4.png#pic_center
  从上述过程可以看出,由于可以或许实现处理过程的完全并行化,因此利用 MapReduce 处理海量数据是非常得当的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Google云计算原理与应用(一)