基于云计算的分布式存储技术

2013-03-18 03:00唐京伟
中国传媒科技 2013年15期
关键词:阀值使用率客户端

文|唐京伟

自从亚马孙推出Amazon Web Service (AWS)的IaaS服务以来,现在其Amazon EC2、Amazon AWS、Amazon S3、Amazon SQS等云计算平台已经被上千家公司使用。Google公司在2008年提供了基于PaaS的Google App Engine。在Google的基础架构上运行网络应用程序,能让开发人员在支持着自己的应用程序的可扩展系统上构建网络应用程序。随后,微软公司也推出了Windows Azure操作系统,这个系统作为微软云计算计划的服务器端操作系统(Cloud OS)为广大开发者提供服务。IBM在2007年提出了“蓝云”计划,推出共有云和私有云的概念。IBM提出私有云解决方案是为了减少诸如数据、信息安全等共有云现存的问题,从而抢占企业云计算市场。

在我国云计算产业的发展也得到了政府的高度重视,在2010年10月召开的十七届五中全会的报告中,重点提到发展新一代信息技术,而云计算和三网融合、物联网等一起被作为最重要的方向之一。从2008年开始,已经有多个地方政府在积极推进云计算产业和应用的发展,例如:无锡中国云计算中心、上海的“云海计划”、北京的“祥云计划”,等等,此外,成都、佛山、东莞、鄂尔多斯等城市也在纷纷跟进。可以预见,未来云计算将成为十二五期间,信息技术领域最重要的发展方向,无论是技术研发、产品推广还是应用示范等方面,都将获得政府在政策、资金、项目等方面的大力支持。

云计算的概念与特点

云计算是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。广义云计算指服务的交付和使用模式,指通过网络以按需要、易扩展的方式获得服务。这种服务可以是IT软件和互联网相关服务,也可以是其他服务。狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源。总体来说云计算具有以下几个特点:

(1)超大规模:“云”具有相当的规模,Google云计算已经拥有100多万台服务器, Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。企业私有云一般拥有数百上千台服务器。“云”能赋予用户前所未有的计算能力。

(2)虚拟化:云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。

(3)高可靠性:“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。

(4)通用性:云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。

(5)高可扩展性:“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。

(6)按需服务:“云”是一个庞大的资源池,你按需购买;云可以像自来水,电,煤气那样计费。

(7)廉价性:由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势。

云计算是当今IT行业的热门话题。但事实上,云计算的原型是由太阳公司在1983年提出的“网络即电脑”(The Network is the Computer);2002年,亚马孙推出Amazon Web Service,是第一个云计算服务平台,2006年8月9日,Google首席执行官埃里克·施密特在搜索引擎大会(SES San Jose 2006)上首次提出云计算(Cloud Computing)这个概念。从此,云计算便成了IT业的焦点。

云计算与云存储

云存储是在云计算(cloud computing)概念上延伸和发展出来的一个新的概念,是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。 当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成为一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。简单来说,云存储就是将储存资源放到网络上供人存取的一种新兴方案。使用者可以在任何时间、任何地方,透过任何可连网的装置方便地存取数据。同时,在云数据中心所使用的存储必须具有良好的兼容性。在云计算时代,计算资源都被收归到数据中心之中,再连同配套的存储空间一起分发给用户,由于众多的用户带来了各种各样的需求,Windows、Linux、Unix、Mac OS,存储需要面对各种不同的操作系统,如果给每种操作系统都配备专门的存储的话,无疑与云计算的精神背道而驰,因此,云计算环境中,首先要解决的就是兼容性问题。其次是存储容量的扩展能力。

Hadoop软件平台

Hadoop是根据Google公司公开的资料开发出来的类似于Google File System的Hadoop File System 以及相应的Map/Reduce编程规范。Hadoop是开放源代码,开发人员可以使用它来开发云计算应用,尤其是云硬件平台。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且用来设计部署在低廉的硬件上。它提供高吞吐量来访问数据,适合那些有着大量数据的应用程序。HDFS可以以流的形式访问文件系统中的数据。

Hadoop还实现了MapReduce分布式计算模型。MapReduce将应用程序的工作分解成很多小的工作块。HDFS为了做到可靠性,创建了多份数据块的复制(Replicas),并将它们放置在服务器群的计算节点中,MapReduce就可以在它们所在的节点上处理这些数据。Hadoop 是由HDFS、MapReduce、HBase、Hive和ZooKeeper等组成,其中,HDFS和MapReduce是两个最基础、最重要的成员,其他子项目提供配套服务。总体来说Hadoop具有以下几个主要特点:1.扩展性强:能可靠地存储和处理千兆字节(GB)数据。2.成本低:可以通过普通机器组成的服务器群来分发以及处理数据,服务器群总计可达数千个节点。3.高效率:通过分发数据,Hadoop可以在数据所在的节点上并行地处理它们,非常快速。4.可靠性好:Hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署计算任务。

1、Hadoop Map/Reduce编程模型

Hadoop Map/Reduce是一个软件构架,基于它写出来的应用程序能够运行在由上千个机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级的数据集。一个Map/Reduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式处理它们。构架会对map的输出先进行排序,然后把结果输入给reduce任务。通常,作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

Map/Reduce框架和分布式文件系统通常是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在数据节点上高效地调度任务,可以非常高效地利用整个集群的网络带宽。Map/Reduce框架由一个单独的主(master)JobTracker和每个集群节点一个次(slave)TaskTracker共同组成。Master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务;而slave仅负责执行由master指派的任务。

应用程序至少应该指明输入/输出的位置,并通过实现合适的接口或抽象类提供map和reduce函数,再加上其他作业的参数,就构成了作业配置(job configuration)。然后,Hadoop的job client提交作业和配置信息给JobTracker,后者负责分发这些软件和配置信息给slave,调度任务并监控它们的执行,同时提供状态和诊断信息给job client。

MapReduce框架的核心步骤主要分成两个部分:Map和Reduce。当向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行。每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。

MapReduce的工作过程分为两个阶段:map阶段和reduce阶段。每个阶段都有键/值对作为输入和输出,并且它们的类型可由程序员选择。程序员还具体定义了两个函数:map函数和reduce函数。在处理大数据集的过程中,将大数据集分解为成千上万个小数据集,每个(或若干个)数据集分别由集群中的一个结点进行处理并生成中间结果,这些中间结果又由大量的结点进行合并,形成最终结果。如图1所示。

2、HDFS的分析

HDFS是Google GFS的开源版本,是一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储PB级的大文件。HDFS采用Master/Slave结构;NameNode维护集群内的元数据,对外提供创建、打开、删除和重命名文件或目录的功能;DataNode存储数据,并负责处理数据的读写请求。DataNode定期向NameNode上报心跳,NameNode通过响应心跳来控制DataNode。如图2所示。

NameNode和DataNode被设计成可以在普通的机器上运行,这些机器一般运行着Linux操作系统。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署NameNode或DataNode。由于采用了可移植性极强的Jave语言,使得HDFS可以部署到多种类型的机器上。一台机器上只运行一个NameNode实例,而集群中的其它机器分别运行一个DataNode实例。集群中单一NameNode的结构大大简化了系统的架构。NameNode是所有HDFS元数据的仲裁者和管理者,用户数据不会流过NameNode。

(1)HDFS读取数据过程

客户端通过调用DistributedFileSystem对象的open()来打开文件。对于HDFS来说,这个对象是分布式文件系统的一个实例。分布式文件系统(DistributedFileSystem)通过使用RPC来调用名称节点,以确定文件开头部分的块的位置。对于每一个块,名称节点返回具有该块的数据节点地址。此外,这些数据节点根据它们与客户端的距离来排序。如果该客户端本身就是一个数据节点,便从本地数据节点中读取。分布式文件系统返回一个FSDataInputStream对象给客户端读取数据。FSDataInputStream转而包装了一个DFSInputStream对象。接着,客户端对这个输入流调用read()操作。存储着文件开头部分的块的数据节点地址的FSDataInputStream 随即与这些块最近的数据节点相连接。通过在数据流中重复调用read(), 数据会从数据节点返回客户端。到达块的末端时,DFSInputStream会关闭与数据节点间的联系,然后为下一个块找到最佳的数据节点。客户端只需要读取一个连续的流,这些对于客户端来说都是透明的。客户端从流中读取数据时,块是按照DFSInputStream打开与数据节点的新连接的顺序读取。它也会调用名称节点来检索下一组需要的块的数据节点的位置。一旦客户端完成读取,就对文件系统数据输入流调用close()操作。如图3所示。

(2)HDFS写入数据过程

客户端通过在分布式文件系统(DistributedFileSystem)中调用create()来创建文件。分布式文件系统通过一个RPC去调用名称节点,在文件系统的命名空间中创建一个新的文件,这时没有块与之相联系。名称节点执行各种不同的检查以确保这个文件不存在,并且客户端有可以创建文件的适当的许可。如果这些检查通过,名称节点就会生成一个新文件的记录;否则,文件创建失败并向客户端抛出一个IOException异常。分布式文件系统返回一个文件系统数据输出流,让客户端开始写入数据。就像读取一样,文件系统数据输出流控制一个DFSOutputStream,负责处理数据节点和名称节点之间的通信。在客户端写入数据时,DFSOutputStream将它分成一个个的包,写入内部的队列,即数据队列。数据队列随数据流流动,数据流的责任是根据适合的数据节点的列表来要求这些节点为副本分配新的块。DFSOutputStream也有一个内部的包队列来等待数据节点确认,称为确认队列。一个包只有在被管线中所有节点确认后才会被移出确认队列。客户端完成数据的写入后,就会在流中调用close()操作。在向名称节点发送完信息之前,此方法会将余下的所有包放入数据节点管线并等待确认。名称节点已经知道文件由哪些块组成,所以它只需在返回成功前等待块进行最小量的复制。如图4所示。

(3)HDFS负载均衡

HDFS集群会处于长时间运行状态,尤其是大量的delete操作后,集群中各个DataNode上的空间使用率可能会存在比较大的差异。所以需要一种机制使各个DataNode保持平衡,防止少数DataNode存储过多的文件。少数使用率过高的DataNode会导致对其的数据访问效率变低,并且如果该DataNode停止服务,则需要更多的时间进行恢复,对集群也会造成更大的影响。

Hadoop中提供了balancer的机制。Hadoop balancerthreshold。通过此命令可以使Hadoop对各个DataNode空间使用率进行评估并使他们保持平衡。参数threshold表示平衡的阀值,取值范围在0%到100%之间,该参数表示每个DataNode中空间使用率与HDFS集群总的空间使用率的差距百分比。假如当前集群总空间为20T,已经使用空间为10T,那么对于HDFS集群来说空间使用率为50%。如果当前集群有2台Datanode,每台有10T总空间。DataNode1已用空间为4T,那么DataNode的空间使用率为40%。DataNode2已用空间为6T,那么DataNode的空间使用率为60%。如果我们把balancer的阀值设为10%,那么此时两台Datanode的使用率与HDFS的总使用率的比值均超过阀值,此时需要执行balancer。如果balancer的阀值设为50%,那么此时两台DataNode的使用率与HDFS的总使用率的比值均未超过阀值,此时不需要执行balancer。

阀值设置的越小,HDFS各个DataNode的使用率越接近,整个集群也更加平衡,但会消耗更多的时间和资源来达到该平衡状态。如果阀值设置的过小,对于操作非常频繁的HDFS集群,有可能永远也不会达到该阀值所指定的平衡状态。阀值设置越大HDFS各个DataNode的使用率差距越大,但是会较容易达到平衡状态。

在balancer的过程,Hadoop会递归的把block从使用率高的DataNode转移到那些使用率低的DataNode上。在每次递归的过程中,单个DataNode转移或者接受的block不得超过10G或者它的存储能力的阀值(根据该Datanode的总空间决定)。并且每次递归过程的执行也不能超过20分钟。在每次递归过后,会更新DataNode的最新状态信息,决定下一次递归的执行。

整个balancer过程是比较复杂的,首先会计算集群总的使用率,然后分别计算各个正常运行的DataNode结点的使用率。根据balancer阀值对各个DataNode进行分类,找到那些使用率过高的和使用率过低的结点。

结语

云计算技术的兴起正在颠覆传统的分布式数据存储架构,面对当前PB级的海量数据存储需求,传统的SAN、NAS或IP存储的容量、可靠性和性能扩展等方面已不能满足当前数据存储和管理要求。如受到物理设备(异构的存储机构、磁盘驱动器的数量、内存大小和控制器性能)的限制,会造成许多功能上的限制,如:支持文件系统的数量、快照或数据备份的数量等。系统一旦遇到瓶颈,就会不断地要求用户升级到更大的存储系统或添加更多的存储管理设备,从而增加了成本,而基于云计算架构的分布式存储技术,能充分利用云计算新技术,结合其超大规模、高可扩展性、廉价性、高可靠性等特点来满足当前PB级别的海量数据存储管理要求。■

猜你喜欢
阀值使用率客户端
如何预防磁盘使用率过高?
如何看待传统媒体新闻客户端的“断舍离”?
2018年中国网络直播用户规模为3.97亿
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
激光多普勒测速系统自适应阀值检测算法
基于模糊数学的云南省区域经济研究
某尾矿库在线监测设防阀值确定方法
基于服务学习方法提高青少年安全带使用率