引言
云计算(Cloud Computing)是一种新兴的商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务。云计算是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(ParallelComputing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization),负载均衡(Load Balance)等传统计算机技术和网络技术发展融合的产物。
它的数据存储是采用分布式存储方式实现的,这就可以保证高可靠性、高可用性和经济性,数据存储的高可靠性是采用冗余存储的方式来保证的,用可靠的软件来弥补硬件的不足,从而提供廉价可靠的海量分布式存储服务和计算服务。另外,数据存储技术必须具有高吞吐率和高传输率的特点。这样云计算系统就可同时满足大量用户的需求,才能为大量用户并行地提供服务。云计算的数据存储系统最著名的是谷歌研发的非开源系统GFS(Google File System)和Hadoop开发团队开发的开源系统HDFS(Hadoop Distributed FileSystem)。
1. MapReduce编程模型
并行计算技术是云计算的核心技术,也是最具战性的技术之一。MapReduce是Google公司的核心计算模型,名字源于函数式编程模型中的两项核心操作:Map和Reduce操作。Map操作独立地对每个元素进行操作,且操作没有副作用;Reduce操作对N个Map结果进行归约,也就是Map[1,2.。.,N]的结果是Reduce操作的参数。在一个指令式语言中求值顺序是确定的,每个函数都有可能会变更或依赖于外部状态,所以必须有序地执行这些函数。在MapReduce编程模型中,只要没有函数修改或依赖千全局变量,N个Map操作的执行顺序可以是无序的,这种特性使得MapReduce模型适合于对大规模数据进行并行处理。
在MapReduce计算模型中,有两个关键过程:映射过程Map和聚集过程Reduce。因此需要用户提供两个关键函数,映射(Map)函数和聚集(Reduce)函数,这两个函数对一组输人的键值对(key/value)进行计算,得出另一组输出键值对,即有:
Map:(in_key, in_value)-{(keyj, valuej)j=l.。.k}
Reduce :(key,[valuel,。..,valuem])一(key, fina_value)
在不同的应用中,Map和Reduce的输人参数和输出结果是不相同的。Map的输入参数in_key和in_value,给S了Map函数要处理的是哪些数据。每个Map函数计算完与后输出结果一组键/值对,它们是经过Mad任务执行完成后所返回的中间结果。系统在执行Reduce任务之前,先检查前面Map任务返回的中间结果,根据Key进行分类处理,把相同key值所对应的value合并在一起把它们送给同一个Reduce任务进行处理,从而可以看出Reduce的输入参数是(key,[ valuel,…,valuem])。Reduc任务主要对这些有着相同key值所对应的value值进行归字处理,在Reduce任务执行完成后输出(key, finaLvalue)的f果。一个key值对应了一个Reduce任务,把所有Reduce千务执行的结果合并连接在一起就形成了最终的输出结果。
典型的MapReduce计算过程如图1
图1 MapReduce的工作流
(4)MapReduce库把所有具有相同中间key值I的中间value值集合在一起后传递给reduce函数;
(5)用户自定义的Reduce函数接受一个中间key的值I和相关的一个value值的集合。Reduce函数将这些value值合并成一个较小的value值的集合。正常的,每次Reduce函数调用只产生0或I个输出value值。可以通过一个迭代器把中间value值提供给Reduce函数,这样就可以处理无法全部放入内存中的大量的value值的集合。
2. Hadoop框架的工作机制
Hadoop是Apache软件基金会(Apache SoftwareFoundation)组织下的一个开源项目,提供分布式计算环境下的可靠、可扩展软件。Hadoop平台拥有自己的分布式文件系统(HDFS),具体实现采用MapReduce模式。Hadoop采取文件备份的方式,为每份数据制作若干拷贝,拥有较高的安全可靠性。作为一个开源的分布式系统平台,Hadoop除了拥有开源所带来的更新速度快、应用广泛等优势外,还具有以下一些其它分布式云计算框架所共有的优点:高度的可扩展性、经济实用性、高速有效性、高可靠性。
HDFS采用Master/Slave架构,一个HDFS集群由一个命名节点((NameNode)和一组数据节点(DataNode)组成。命名节点是一个中心服务器,负责管理文件系统的名字空间(NameSpace)以及客户端对文件的访问。在集群系统中,一般在一个节点上运行一个数据节点,负责管理它所在节点上的数据存储,并负责处理文件系统客户端的读写请求,在命名节点的统一调度下进行数据块的创建、删除和复制。Hadoop还实现了Google的MapReduce分布式计算模型,MapReduce把应用程序的总任务分割成许多子任务,每个子任务可以在任何集群节点(数据节点,通常也作为计算节点)上并行处理。HDFS创建了多份数据块(Data Blocks)的副本(Replicas),以保证各个子任务节点计算的可靠性((Reliability)。由于采用了分布式文件系统和MapRedace模型,因此Hadoop框架具有高容错性及对数据读写的高吞吐率,能自动处理失败节点。图2是Hadoop集群系统架构的示意图。
由图2可知,HDFS是由一个命名节点和多个数据节点组成的。数据节点存储着文件系统的元数据,它的作用就像是文件系统的总指挥,维护文件系统命名空间、规范客户对于文件的存取和提供对于文件目录的操作,数据节点中存储着实际的数据,负责管理存储节点上的存储空间和来自客户的读写请求。数据节点也执行块创建、删除和来自命名节点的复制命令。
(责任编辑:蒙遗善)