读谷歌3篇论文《Google File System》、《Google BigTabel》、《Google MapReduce》读后感

谷歌3篇论文读后感

一、《Google File System》

Google GFS 文件系统, 一个面向大规模数据密集型应用的、 可伸缩的分布式文件系统。GFS 虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。

我们来看看GFS文件系统的特点:Google GFS文件系统重新审视了传统文件系统,设计出了完全不同的设计思路,首先针对组件频繁失效的问题,将持续的监控监控、错误侦测、灾难冗余以及自动恢复机制集成在GFS中,为了解决这个问题设计了快速恢复和复制机制,快速恢复通过创建Chunk和Master副本的方式;其次由于文件巨大,假设条件和参数,I/O操作和Block的尺寸都经过重新考虑,为了保持数据的完整性每个用于存储数据的Chunk服务器都使用Checksum来检查保存的数据的完整性,并通过闯将;然后是由于海量文件的访问模式,采用在文件末尾追加数据,而不是覆盖原有数据,通过记录追加操作实现了生产者-消费者队列模式;最后应用程序和文件系统API协同设计,提高系统的灵活性。

为了解决上述问题,Google针对不同的应用部署了多套GFS集群,一个集群包含一个单独的Master节点、多台Chunk服务器,能够同时被多个客户端访问。Master节点管理所有的文件系统的元数据,Chunk服务器用于将GFS存储的文件的以Linux文件形式保存到本地磁盘中,用Chunk标识数据和管理数据,GFS客户端代码以库的形式链接到客户程序中,客户端代码实现了GFS文件系统的API接口函数、应用程序与Master节点和Chunk服务器通讯、以及对数据进行读写操作,控制流是在Mastr服务器处理,而数据流在Chunk服务器和客户端处理,这样的方式能够将中心的Master服务器的负担降到最低。

结合于传统的文件系统,和更加详细和全面的考虑,Google设计出了一个交互更可靠和稳定、具有自己容错和诊断的机制,能够在大量的并发读写操作时提高很高的合计吞吐量GFS文件系统,提高了文件系统整体性能和灾难冗余的能力。

二、《Google BigTabel》

BigTable是Google设计的一个分布式的结构化数据存储系统,被用来处理分布在数千台普通服务器上的PB级的海量数据,能够满足不同的应用需求,如Google Analytics、Google Finance、Orkut、Personalized Search、Writely 和 Google Earth等, 无论是对于数据量(从URL到网页再到卫星系统)上,和响应速度(从后端的批量处理到实时数据服务)上,BigTable均能提供一个灵活的、高性能的解决方案。

Bigtabel实现了适用性广泛、可扩展、高性能和高可用性的4个目标,BigTable使用了很多和并行数据库和内存数据库(具备)的实现策略,但是它不支持完整的关系数据模型,为客户提供的数据模型更加简单,客户可以动态控制数据的分布和格式、推测底层存储数据的位置相关性。

Bigtable的数据模型将存储的数据都视为字符串,但并不解析,客户程序将各种结构化和半结构化的数据串行化到这些字符串里。BigTabel是一个稀疏的、分布式的、持久化存储的多维度排序的Map,Map的索引是行关键字、列关键字以及时间戳,每个value是一个未经解析的byte数组,通过行关键字的字典顺序组织数据,每个行可以动态分区,每个分区叫做一个“Tablet”,用户对同一个行关键字的读或者写操作是原子的,这使得我们用户可以更加清楚的理解程序对同一个行进行并发更新操作时的行为;通过列关键字组成的集合组成的“列族”,访问控制、磁盘和内存使用统计;时间戳主要是控制不同版本的数据,防止数据版本冲突,和列族一同使用。另外BigTable提供了建立和删除表以及列族的、修改集群、表和列族的元数据的API,这些API帮助我们更好的管理和处理数据。这样的数据模型,让系统变得更加具有灵活性。
BigTable是基于Google的GFS文件系统、Chubby锁服务组件构建成的,利用GFS来存储日志文件和数据文件,内部存储数据的文件是持久化的、排序的、不可更改的Map结构的Google SSTable 格式,Cubby服务有5个活动的副本,主要用于存储BigTable数据的自引导指令的位置、查找和解决Tablet服务器失效,存储每张表的列族信息、存储访问控制列表,如果Chubby长时间无法访问,BigTable就会失效。BigTable的3个主要组件:链接到客户程序中的库、一个 Master 服务器和多个 Tablet 服务器。Master用于管理Tablets,处理模式的相关修改操作,Tablet 服务器都管理一个 Tablet 的集合,每个Tablet服务器负责处理它所加载的 Tablet 的读写操作,以及在 Tablets 过大时,对其进行分割。Tablet服务器使用二级缓存策略提高读操作的性能。

Bigtable的高性能和高可用性,让其能够满足各种应用需求,让我我们可以根据的自己的系统对资源的需求增加情况,通过简单的增加机器,就可以扩展系统的承载能力。但是随着服务集群的增加,我们需要解决BigTable系统内存关于资源共享的问题。

三、《Google MapReduce》

MapReduce是利用Map函数处理一个输入key/value pair集合来产生一个具有相同key值key值的value值输出的中间key/value pair集合,使用Reduce函数合并所有相同key值的value值的编程模型, 也是一个处理和生成超大数据集的算法实现模型。MapReduce这个模型能够处理因为数据量大而将计算分布在成百上千的主机上产生的并行计算、分发数据、错误处理等问题,它将并行计算、容错、数据分布、负载均衡等复杂的细节封装在一起,也能让那些并没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源。

MapReduce模型可根据当前的具体环境而采用不同的实现方式,如:小型的共享内存方式的机器、大型NUMA架构的多处理器的主机、大型的网络连接集群。MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理,通过Map调用的输入数据自动分割为M个数据片段的集合,然后Map调用被分布到多台机器上执行,用户程序在机群中创建大量的副本(一个主副本程序master,其它的是worker程序),master分配M个Map任务和R个Reduce任务,而worker程序则负责处理Map或Reduce任务,读取相关的输入数据片段解析出key/value pair后传递给用户自定以的Map函数生成并输出中间的key/value pair,将通过分区函数将其缓存在内存中的R个区域,之后周期性的写入到磁盘中,master会记录其在磁盘上的位置并传递给Reduce worker, R个区域的主机则会从 Map worker所在的主机读取数据,进行相同key值的数据聚合排序,这个过程由Reduce worker 完成,当所有的任务完成之后,master唤醒用户程序,用户对MapReduce的输出进行返回。任务处理过程中用到了成千上百的机器,会出现一定的问题,所以master还负责周期性的ping每个worker,监测机器故障;这个过程中产生的存储问题则是通过GFS文件系统来管理存储在机器的本地磁盘上节省网络带宽问题。我们用计算大约1TB的数据进行特定的模式匹配和排序来衡量MapReduce的性能。

MapReduce编程模型将并行处理、容错处理、数据本地化、负载均衡等问题在一个库里面方便我们使用,能够解决网络搜索服务、排序、数据挖掘和机器学习等各个方面,可以在一个数千台计算机组成的大型集群上部署,让我们可以更加好的利用计算资源和解决大量计算问题。

总结:

读完Google三篇论文之后,虽然在实现细节上还不能充分理解,理解起来甚至有点儿困难,但是大概的了解到GFS文件系统、BigTabel存储系统、MapReduce计算模型之间的关系和实现细节,三者之间互相关联,对于解决大数据时代各个应用领域(如:人工智能)的数据的计算和数据存储问题提供了有效的解决方案,能够在各个领域都能够得到广泛的应用。

你可能感兴趣的:(学习论文总结,hadoop,大数据,深度学习,数据挖掘)