本发明涉及云计算领域,具体涉及一种云计算平台下的数据同步更新方法。
背景技术:
近年来,随着信息技术的蓬勃发展和信息量的急剧增长,信息和数据处理占据了人们生活、学习、工作等日常交往中的方方面面。虽然这一发展有利于信息的交互与共享,但也同样成为了人们繁重工作的一部分。此后,计算机技术的飞速发展与高效应用使得快速处理海量数据成为可能。因此,为了更好地保证数据的安全性和完整性,数据的同步备份对于企业和个人来说显得尤为重要。
对于大多数中小企业来说,数据大量存放于本地数据库和服务器集群中,开发人员或管理人员通过数据库管理系统对数据进行自动或手工方式的同步备份。现有的数据库同步备份技术主要有介质传输技术、数据复制技术和数据库软件自有的备份技术等。这些技术的实现都要求本地服务器磁盘具备一定的数据存储空间来存放同步备份后的数据,管理人员需要定期维护系统软件和硬盘来防止数据的损坏和丢失。其中,由于介质传输技术将更新数据存储在物理介质中需要较长的时延,因此已不再广泛使用。
对于个人用户来说,数据主要存储在移动设备和计算机硬盘中。现有的个人数据同步备份方法主要通过移动设备和同步备份软件来完成。经常往返于异地间的用户需要随身携带这些设备或使用带有备份功能的软件来存储数据。其中,移动设备由于其使用频率和使用年限会影响数据传输的效率和同步备份的可靠性,因此需要定期地检查和整理其中的信息以保证数据的安全性。同样地,用户使用同步备份软件进行个人数据的上传与下载,需要每次在不同的PC机上安装和配置软件客户端来收取邮件、网页收藏夹等私人数据,相比于浏览器的直接访问较为复杂。
针对大量数据存储和现有数据同步备份方法的不足,新兴计算产业——云计算可以使用户无需担心设备的管理和维护,并提供海量的云端存储空间,其按需付费、随取随用的特性可以很大程度地满足目前计算发展的应用。随着数据同步备份的频率和要求提高,用户需要相应地升级硬件设备来满足日益增大的数据。云计算提供的强大平台和海量空间不仅减少了用户维护的人力成本和数据存储的设备成本,而且,尤其对于广大的PC用户来说,不需要相关的数据管理专业技术,就可以利用浏览器通过已部署在云平台的应用程序界面进行数据的同步备份操作。
云计算是网格计算、效用计算、网络存储、虚拟化、负载均衡等计算机技术和网络技术相融合的产物。它将所有的计算资源集中起来,并由软件实现自动管理,用户无需参与实际的管理。这使得企业和个人没有必要为计算能力和存储以及对这些资源的管理而烦恼,能够更加专注于自己的业务流程,有利于创新和降低成本。作为一种按需服务、高性价比和资源透明化的业务提供方式,其本质就是通过对互联网的计算、存储及传送等资源的池化,满足不同用户的个性化、多层次服务需求。云计算提供了可靠、安全的数据存储中心,用户不必再担心数据丢失、病毒入侵等严重问题;同时云计算可应用于多种用户终端设备,电脑、手机、电视等终端均可接入;此外,云计算可以轻松实现不同设备间的数据与应用共享,更重要的是云计算在网络使用方面也提供了无限多的可能。
目前,云计算平台下的数据同步还存在效率不高的问题。
技术实现要素:
至少部分的解决现有技术中存在的问题,本发明提出一种云计算平台下的数据同步更新方法,包括:
1.构建基于Hadoop分布式文件系统的云数据备份系统,所述系统从物理上分为客户端、备份服务器和Hadoop分布式文件系统集群;
2.客户端中保存着为本机提供服务的备份服务器的信息,当需要备份或恢复时向备份服务器发出相应请求;
3.备份服务器接收到客户客户端的请求,进行文件的备份和恢复;
其中,
所述客户端是企业中众多需要数据备份/恢复服务的计算机节点,按照地域、系统类别等分成若干个群,当需要进行数据备份或者恢复时,他们向负责本群的备份服务器提出请求,得到许可后进行文件的备份和恢复操作;客户端用于实现数据备份恢复,包括文件打包、压缩策略,数据的备份和恢复;
所述备份服务器是客户端和Hadoop分布式文件系统集群间数据备份恢复的桥梁,由多个高性能、大存储量服务器构成,每个服务器负责一个客户端群。他们接受客户端的备份恢复请求,缓存客户端的备份数据,根据备份数据的不同情况,分别对他们进行合并、分割、压缩后上传到Hadoop分布式文件系统集群进行备份,同时保存客户端备份文件的映像表,当客户端提出恢复请求时,从Hadoop分布式文件系统集群中读取备份文件,按照文件映像表发送给客户端;
所述Hadoop分布式文件系统集群由安装了Hadoop分布式文件系统软件的计算机组成,在Hadoop分布式文件系统软件的架构下,通过配置向多个备份服务器提供上传、下载服务,实现系统的核心功能;
Hadoop分布式文件系统集群采用主/从结构,由一个名字节点Namenode和一定数量的数据节点Datanodes组成,Namenode作为为中心服务器负责管理文件系统的名字空间(namespace)以及客户对文件的访问;Namenode执行文件系统的打开、关闭、重命名文件或目录这些名字空间操作;也负责确定数据块到特定Datanode节点的映射,Namenode由企业云中具有较高性能的服务器配置而成,以实现高效的元数据管理,避免性能瓶颈,DataNode用于存储数据,由企业内部大量廉价计算机配置而成,并且可以根据备份数据的规模进行动态扩展。备份时文件被分成一个或多个数据块,这些块存储在一组Datanode上;Datanode负责对文件系统客户端的读写请求进行处理,并在Namenode的统一调度下进行数据块的创建、删除和复制等操作。
优选的,备份服务器包含以下几个具体功能模块:
(1)备份管理模块:系统的核心功能模块,主要负责文件的备份管理工作;
(2)恢复管理模块:负责备份文件的恢复工作;
(3)安全管理模块:该模块的功能包括控制文件的传输安全及存储安全,对客户端的认证与授权;
(4)目录管理模块:该模块负责是客户端管理和备份文件目录管理。文件备份信息表负责管理备份文件的目录,客户信息表负责管理备份服务器所负责的所有客户;
(5)用户接口模块:提供友好的用户操作界面,用于显示、配置备份操作信息,用户可以根据自己的需要选择备份方式;
(6)同步处理模块:该模块主要负责文件的同步处理,用于监视客户端文件的变化,进行客户端和Hadoop分布式文件系统集群端之间的同步工作,当监测到客户端文件改变时,将Hadoop分布式文件系统集群上的相应文件进行同步更新。
优选的,当监测到客户端的文件发生改变时,使用以下方式同步更新Hadoop分布式文件系统集群上相应的文件:
1.当监测到客户端的文件CFold变更为文件CFnew时,将发生改变的文件ID发送给Hadoop分布式文件系统集群;
2.根据客户端发来的文件ID,Hadoop分布式文件系统集群将CFold对应的SFold划分为大小为B的块,SFold[(i-1)B,iB-1],表示文件从偏移地址(i-1)B到iB-1的内容,其中,i的取值为[1,2,3,……,N],N是文件SFold划分的块数;然后计算每个块Bi的的两个哈希值:qi=hq(Bi)和ri=hm(Bi),其中,hq(Bi)表示对块Bi进行alder-32校验计算,hm(Bi)表示对块Bi进行MD5校验计算,然后将两个校验值发送给客户端;
3.客户端接收Hadoop分布式文件系统集群发来的每个块的两个哈希值(qi,ri),建立哈希表;
4.客户端遍历文件CFnew,从偏移地址j=0开始,重复执行以下步骤4.1-4.4
4.1计算hq(CFnew[j,j+B-1]);
4.2从哈希表中查找是否具有匹配的哈希值;
4.3如果找到匹配哈希值,计算hm(CFnew[j,j+B-1]),如果hm也匹配,则发送该块的偏移地址j和该块的大小信息给分布式文件系统集群,并对j进行加B操作;
4.4如果没有找到匹配哈希值,或者hm不匹配,则传输CFnew[j]给Hadoop分布式文件系统集群,CFnew[j]表示文件CFnew在偏移地址j处的内容,j=j+1;
5.Hadoop分布式文件系统集群根据客户端传送的内容和SFold构建出与CFnew对应的文件SFnew。
优选的,当监测到客户端的文件发生改变时,使用以下方式同步更新Hadoop分布式文件系统集群上相应的文件:
1.当监测到客户端的文件CFold变更为文件CFnew时,将发生改变的文件ID发送给Hadoop分布式文件系统集群;
2.根据客户端发来的文件ID,Hadoop分布式文件系统集群将CFold对应的SFold划分为大小为B的块,SFold[(i-1)B,iB-1],表示文件从偏移地址(i-1)B到iB-1的内容,其中,i的取值为[1,2,3,……,N],N是文件SFold划分的块数;然后计算每个块Bi的的两个哈希值:qi=hq(Bi)和ri=hm(Bi),其中,hq(Bi)表示对块Bi进行alder-32校验计算,hm(Bi)表示对块Bi进行MD5校验计算,然后将两个校验值发送给客户端;
3.客户端接收Hadoop分布式文件系统集群发来的每个块的两个哈希值(qi,ri),建立哈希表;
4.客户端遍历文件CFnew,从偏移地址j=0开始,重复执行以下步骤4.1-4.4
4.1计算hq(CFnew[j,j+B-1]);
4.2从哈希表中查找是否具有匹配的哈希值;
4.3如果找到匹配哈希值,计算hm(CFnew[j,j+B-1]),如果hm也匹配,则将该块的偏移地址j和该块的大小信息存储到列表MatchList中,并对j进行加B操作;
4.4如果没有找到匹配哈希值,或者hm不匹配,则将CFnew[j]存储到列表MatchList中,CFnew[j]表示文件CFnew在偏移地址j处的内容,判断列表MatchList中所存储的CFnew[j]总容量是否达到Hadoop分布式文件系统集群中的最小存储单元CK,如果是,则将列表MatchList中存储的内容发送给Hadoop分布式文件系统集群并继续以下操作,否则直接继续以下操作,j=j+1;
5.Hadoop分布式文件系统集群根据客户端传送的内容和SFold构建出与CFnew对应的文件SFnew。
本发明提出了一种新的基于云计算平台的备份文件、更新文件的方法,提高了备份文件、更新文件的效率。
附图说明
图1为本发明一种云计算平台下的数据同步更新方法的流程图;
具体实施方式
下面将结合本发明的附图,对本发明的技术方案进行清楚、完整地描述。这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
参见图1,本发明提出了一种云计算平台下的数据同步更新方法,包括:
1.构建基于Hadoop分布式文件系统的云数据备份系统,所述系统从物理上分为客户端、备份服务器和Hadoop分布式文件系统集群;
客户端是企业中众多需要数据备份/恢复服务的计算机节点,按照地域、系统类别等分成若干个群,当需要进行数据备份或者恢复时,他们向负责本群的备份服务器提出请求,得到许可后进行文件的备份和恢复操作。客户端用于实现数据备份恢复,包括文件打包、压缩策略,数据的备份和恢复。
备份服务器是客户端和Hadoop分布式文件系统集群间数据备份恢复的桥梁,由多个高性能、大存储量服务器构成,每个服务器负责一个客户端群。他们接受客户端的备份恢复请求,缓存客户端的备份数据,根据备份数据的不同情况,分别对他们进行合并、分割、压缩后上传到Hadoop分布式文件系统集群进行备份,同时保存客户端备份文件的映像表,当客户端提出恢复请求时,从Hadoop分布式文件系统集群中读取备份文件,按照文件映像表发送给客户端。
备份服务器包含以下几个具体功能模块:
(1)备份管理模块:系统的核心功能模块,主要负责文件的备份管理工作;
(2)恢复管理模块:负责备份文件的恢复工作;
(3)安全管理模块:该模块的功能包括控制文件的传输安全及存储安全,对客户端的认证与授权;
(4)目录管理模块:该模块负责是客户端管理和备份文件目录管理。文件备份信息表负责管理备份文件的目录,客户信息表负责管理备份服务器所负责的所有客户;
(5)用户接口模块:提供友好的用户操作界面,用于显示、配置备份操作信息,用户可以根据自己的需要选择备份方式;
(6)同步处理模块:该模块主要负责文件的同步处理,用于监视客户端文件的变化,进行客户端和Hadoop分布式文件系统集群端之间的同步工作,当监测到客户端文件改变时,将Hadoop分布式文件系统集群上的相应文件进行同步更新。
Hadoop分布式文件系统集群由安装了Hadoop分布式文件系统软件的计算机组成,在Hadoop分布式文件系统软件的架构下,通过配置向多个备份服务器提供上传、下载服务,实现系统的核心功能。
Hadoop分布式文件系统集群采用主/从结构,由一个名字节点Namenode和一定数量的数据节点Datanodes组成,Namenode作为为中心服务器负责管理文件系统的名字空间(namespace)以及客户对文件的访问;Namenode执行文件系统的打开、关闭、重命名文件或目录这些名字空间操作;也负责确定数据块到特定Datanode节点的映射,Namenode由企业云中具有较高性能的服务器配置而成,以实现高效的元数据管理,避免性能瓶颈,DataNode用于存储数据,由企业内部大量廉价计算机配置而成,并且可以根据备份数据的规模进行动态扩展。备份时文件被分成一个或多个数据块,这些块存储在一组Datanode上。Datanode负责对文件系统客户端的读写请求进行处理,并在Namenode的统一调度下进行数据块的创建、删除和复制等操作。
基于Hadoop分布式文件系统的云数据备份系统应用备份服务器作为客户端与备份集群的桥梁出于以下考虑:备份服务器可以屏蔽客户端对备份集群的直接访问,提高备份集群的安全性,同时在备份服务器和客户端之间通过防火墙、安全信道等技术手段实现数据安全,进而保证整个系统的安全;备份服务器可以暂存数据,并根据备份集群的负载状况,网络状况决定在合适的时间上传数据,从而保证备份集群的负载平衡;虽然在特殊情况下,备份服务器由于大量客户端的备份/恢复请求可能成为系统的瓶颈,但通过应用高性能的服务器作为备份服务器及客户端的合理调度可以最大可能地避免此种情况的发生;向Hadoop分布式文件系统集群上传、下载文件需要在计算机上安装Hadoop特定组件,这对数量众多、水平参差不齐的客户来说是不现实的,通过在备份服务器上收集用户需备份的数据,并在其上安装Hadoop组件实现备份、恢复功能,易于实现并充分发挥Hadoop分布式文件系统的功能。
2.客户端中保存着为本机提供服务的备份服务器的信息,当需要备份或恢复时向备份服务器发出相应请求;
客户端模块备份数据前,应用tar、winrar等工具将所有数据文件打包成一个备份文件,按照“客户Id-备份日期-bak”的规则命名;同时进行压缩以节省存储空间、减少备份恢复时间。
客户端文件的备份过程具体为:
B1调用工具对备份数据打包;
B2调用压缩工具压缩打包文件;
B3向备份服务器提出备份请求;
B4判断备份请求是否通过;
B5如备份请求通过,将数据文件上传至备份服务器。
客户端文件的恢复过程具体为:
H1向备份服务器提出恢复请求;
H2判断恢复请求是否通过;
H3如恢复请求通过,下载数据文件;
H4调用工具解压缩打包文件;
H5调用工具解包备份文件。
3.备份服务器接收到客户客户端的请求,进行文件的备份和恢复;
3.1备份服务器的备份操作具体包括:
备份服务器接收到客户客户端的备份请求后,首先对客户端进行识别认证,认证通过后接收客户端上传的备份文件,备份文件上传完毕后,备份服务器将备份文件加上时间戳编号后暂存,并将备份文件的信息记入备份文件信息表,然后将文件名作为参数调用云数据上传算法上传数据到Hadoop分布式文件系统集群。
云数据上传算法首先检测用户上传文件大小是否大于等于阈值th_size,如果大于等于则上传该文件到Hadoop分布式文件系统集群,上传成功后将文件备份数据信息表中对应的上传标志置为真,填写上传文件名,删除备份服务器上的文件;如果文件大小小于th_size,则读取备份文件信息表,得到所有未上传备份文件的信息,计算全部未上传文件的大小,如果大于等于th_size,则将所有未上传文件打包成一个文件,按照“文件名1-文件2…-文件名n”的方式对该文件命名后上传,上传成功后,将备份文件信息表中对应的上传标志位置为真,填写上传文件名后删除文件;如果全部为上传文件大小依然小于th_size,则暂时不将文件上传至Hadoop分布式文件系统集群。
3.2备份服务器的恢复操作具体包括:
备份服务器接收到客户端的恢复请求后,首先对客户端进行识别认证,认证通过后,检查备份文件信息表,如果备份文件暂存在本地,则从备份服务器上发送文件给客户端;如果备份文件存于Hadoop分布式文件系统集群中,则从Hadoop分布式文件系统集群中下载文件后,再发送给客户端,如果备份文件是由多个文件打包而成,则还需要对文件解包,再发送给客户端。
备份服务器在进行下载和上传数据时遵从以下规则:
备份服务器需要下载数据时,立即进行;而当需要上传数据时,如果没有其他备份服务器上传数据,立即上传,否则称之为产生冲突,等待一段时间再进行检测以决定是否上传,等待时间的长短由退避算法决定,退避算法具体包括:
1)当第一次检测发生冲突时,设置参数L=2;
2)退避间隔取1到L个时间片中的一个随机数;
3)重复检测发生冲突时,将参数L加倍,L的最大值为256,当L增加到256时,
L不再增加;
4)一旦检测次数超过8,则立即无条件上传数据。
通过应用退避算法,当备份服务器检测冲突较多时,产生较长等待时间的概率越大,从而保证在系统重负载时,尽可能少的对系统进行测试计算;同时当备份服务器退避次数超过8次时立即上传以保证公平性。
大文件的同步问题是云同步的难点。大文件同步不仅仅在云端要占据大量的存储空间,大文件的上传下载有很多难题需要解决,基于网络传输的不稳定性,文件安全性,文件校验,文件加密压缩等问题。目前国内外大多数的云同步应用只支持100MB以下的文件同步。大文件的同步主要面临以下几个问题:1.网络传输的不稳定性;2.文件传输的安全性;3.网络带宽的限制;4.大文件更新的效率问题。
为此,本发明采用文件分割的技术,将文件分割成多个独立的文件块,提高文件同步处理的效率。文件经过分割之后,文件块的大小在一个可控的范围内,无论原始文件本身多大,分割后的文件块都在云存储系统可接受的范围内。这样Hadoop分布式文件系统集群的文件存储系统就能够快速的处理云同步的文件存储问题,对相应的文件块进行管理避免Hadoop分布式文件系统集群出现大的文件块,造成Hadoop分布式文件系统集群存储系统的性能问题以及Hadoop分布式文件系统集群存储空间的浪费。
文件上传恢复的时候,采用文件分割的方式来管理文件。文件上传之前将文件分割成小文件块,再将文件块进行上传;文件恢复的时候是先下载文件的文件块,所有文件块下载完成之后将文件块合并成原来的文件。
文件的上传包含以下几个步骤:
1.文件分割:将原始的用户文件分割成几个小的文件块,文件分割是将大文件的存储文件变为了多个小文件的存储问题,可以直接避免大文件存储需要应对的多个技术难题;
2.文件块加密:文件块加密采用公钥加密的技术,文件块的公钥跟私钥都需用从Hadoop分布式文件系统集群获取。文件块加密是为了保证文件数据的包密性,对于任何云同步的应用,数据的保密性都是用户的必备需求,用户不会将数据存放在可能泄露的应用中;
3.文件块压缩:对加密后的文件块进行压缩;
4.文件块校验:文件块经过加密加压之后,通过hash算法算出文件块的hash值,文件的上传恢复都需要通过hash值校验,以确定文件块在传输过程中没有出现错误;同时,如果发现hash值已经存在,也就是已经有相同的文件块存放在服务器,那么文件块就不需要重复上传了。使用文件校验不仅仅可以保证数据的完整性,避免上传一样的文件内容可以节省服务器的存储空间,同时减少数据流量,提高文件同步的效率。
5.文件块上传:文件块通过Hadoop分布式文件系统集群提供的远程接口进行同步,将文件块上传到Hadoop分布式文件系统集群,文件块上传结束之后,Hadoop分布式文件系统集群需要通过hash值来确定文件块无错误。
文件的恢复包含以下几个步骤:
1.获取文件块列表:通过文件ID获取文件对应的文件块列表,根据文件块的ID获取详细的文件块信息,下载文件块来间接完成文件下载功能;
2.文件块下载:使用文件块的ID,到指定的位置查找文件块,将列表中的文件块下载到本地;
3.文件块校验:文件块下载完成之后,通过文件块大小以及hash值来校验文件块是否成功下载;如果文件块校验失败,则此文件块无效,需要重新下载或者采用人工策略进行处理;
4.文件块解压:采用文件块压缩时相对应的文件块解压缩算法,对文件块解压缩;
5.文件块解密:从Hadoop分布式文件系统集群获取文件块解密的私钥,采用文件块加密对应的解密算法对文件块进行解密;
6.文件块合并:文件块完成下载、校验、解压、解密之后,将分离的文件块重新合并,恢复用户的原始文件。
当监测到客户端的文件发生改变时,本发明使用以下方式同步更新Hadoop分布式文件系统集群上相应的文件:
1.当监测到客户端的文件CFold变更为文件CFnew时,将发生改变的文件ID发送给Hadoop分布式文件系统集群;
2.根据客户端发来的文件ID,Hadoop分布式文件系统集群将CFold对应的SFold划分为大小为B的块,SFold[(i-1)B,iB-1],表示文件从偏移地址(i-1)B到iB-1的内容,其中,i的取值为[1,2,3,……,N],N是文件SFold划分的块数;然后计算每个块Bi的的两个哈希值:qi=hq(Bi)和ri=hm(Bi),其中,hq(Bi)表示对块Bi进行alder-32校验计算,hm(Bi)表示对块Bi进行MD5校验计算,然后将两个校验值发送给客户端;
3.客户端接收Hadoop分布式文件系统集群发来的每个块的两个哈希值(qi,ri),建立哈希表;
4.客户端遍历文件CFnew,从偏移地址j=0开始,重复执行以下步骤4.1-4.4
4.1计算hq(CFnew[j,j+B-1]);
4.2从哈希表中查找是否具有匹配的哈希值;
4.3如果找到匹配哈希值,计算hm(CFnew[j,j+B-1]),如果hm也匹配,则发送该块的偏移地址j和该块的大小信息给分布式文件系统集群,并对j进行加B操作;
4.4如果没有找到匹配哈希值,或者hm不匹配,则传输CFnew[j]给Hadoop分布式文件系统集群,CFnew[j]表示文件CFnew在偏移地址j处的内容,j=j+1;
5.Hadoop分布式文件系统集群根据客户端传送的内容和SFold构建出与CFnew对应的文件SFnew。
上述同步更新方式计算量小、速度快。对于文件修改量很小的情况,还可以对上述算法进行进一步的改进。当CFnew的第i块与SFold的第j块匹配时,极有可能CFnew的第i+1块与SFold的第j+1块匹配,而上述算法每次找到一个匹配的块时要传输的数据次数过多,对带宽的利用性不高。
当监测到客户端的文件发生改变时,本发明还可以使用以下方式同步更新Hadoop分布式文件系统集群上相应的文件:
1.当监测到客户端的文件CFold变更为文件CFnew时,将发生改变的文件ID发送给Hadoop分布式文件系统集群;
2.根据客户端发来的文件ID,Hadoop分布式文件系统集群将CFold对应的SFold划分为大小为B的块,SFold[(i-1)B,iB-1],表示文件从偏移地址(i-1)B到iB-1的内容,其中,i的取值为[1,2,3,……,N],N是文件SFold划分的块数;然后计算每个块Bi的的两个哈希值:qi=hq(Bi)和ri=hm(Bi),其中,hq(Bi)表示对块Bi进行alder-32校验计算,hm(Bi)表示对块Bi进行MD5校验计算,然后将两个校验值发送给客户端;
3.客户端接收Hadoop分布式文件系统集群发来的每个块的两个哈希值(qi,ri),建立哈希表;
4.客户端遍历文件CFnew,从偏移地址j=0开始,重复执行以下步骤4.1-4.4
4.1计算hq(CFnew[j,j+B-1]);
4.2从哈希表中查找是否具有匹配的哈希值;
4.3如果找到匹配哈希值,计算hm(CFnew[j,j+B-1]),如果hm也匹配,则将该块的偏移地址j和该块的大小信息存储到列表MatchList中,并对j进行加B操作;
4.4如果没有找到匹配哈希值,或者hm不匹配,则将CFnew[j]存储到列表MatchList中,CFnew[j]表示文件CFnew在偏移地址j处的内容,判断列表MatchList中所存储的CFnew[j]总容量是否达到Hadoop分布式文件系统集群中的最小存储单元CK,如果是,则将列表MatchList中存储的内容发送给Hadoop分布式文件系统集群并继续以下操作,否则直接继续以下操作,j=j+1;
5.Hadoop分布式文件系统集群根据客户端传送的内容和SFold构建出与CFnew对应的文件SFnew。
本发明中,客户端读取文件的具体实现过程包括:
1.客户端通过调用分布式文件系统的一个实例FileStream对象的open()方法来打开希望读取的文件;
2.分布式文件系统通过RPC远程调用名称节点以获得文件开头部分的数据块的位置,对于每个块,名称节点返回该块所在的数据节点的地址,并且这些数据节点会根据其距离客户端的远近进行排序,如果客户端本身也是数据节点,则直接读取本地数据,分布式文件系统返回一个支持文件定位的输入流的FSDataInputStream对象给客户端,让客户端从FSDataInputStream中读取数据;
3.客户端调用FSDataInputStream的read()方法;
4.存储文件开头部分块的数据节点地址的DFSInputStream随即与这些块最近的数据节点相连接,通过在数据流中重复调用read(),读取数据从数据节点返回客户端;
5.当第一个块读完,DFSInputStream关掉与这个数据节点的连接,然后开始第二个块的操作;
6.客户端从流中读取数据时,块是按照DFSInputStream打开与数据节点的新连接的顺序读取的,DFSInputStream也会调用名称节点来检索下一组需要的块的数据节点的位置,客户端完成数据读取后,调用FSDataInputStream的close()方法关闭数据流。
在文件读取过程中,如果客户端从一个数据节点上读取出错,则选择下一个离它最近的数据节点。同时记住这个失败的数据节点,在读取后面的块的时候不再选择这个数据节点。
这个设计的一个重要方面是:客户端直接联系数据节点接收数据,并且客户端通过名字节点直接导向包含所需数据的最佳数据节点。这样的设计可以使Hadoop分布式文件系统扩展而适应大量的客户端,因为数据传输线路是通过集群中的所有数据节点的;名称节点只需要提供相应块的位置查询服务即可,并且名称节点是将块的位置信息存放在内存中的,这样效率就非常高,名称节点不需要提供数据传输服务,否则数据服务将随着客户端的增加将很快成为瓶颈。
本发明中,客户端写入文件的具体实现过程包括:
1.客户端通过调用分布式文件系统的create()方法来创建文件;
2.分布式文件系统通过RPC远程调用名称节点,在文件系统的名字空间里创建一个新文件,此时这个文件还没有任何块与之相联系;名称节点执行检查以确保这个文件不会已经存在,并且客户端拥有创建此文件的权限;如果上述检查通过,名称节点会生成一个新文件的记录;否则文件创建失败并向客户端抛出一个异常;分布式文件系统返回一个FSDataOutputStream,让客户端开始写入数据,FSDataOutputStream控制一个DFSOutputStream,DFSOutputStream负责处理数据节点和名称节点之间的通信;
3.当客户端写入数据时,DFSDataOutputStream把要写入的数据分成很多包,并将它们写入内部的数据队列,数据队列中的数据由数据流来读取,数据流让名称节点找出一个合适的数据节点列表,并要求这些数据节点分配一些新的块以存储作为副本而复制的数据,这个数据节点列表组成了一个管线;
4.FSDataInputStream将包分流给管线中第一个的数据节点,这个节点会对包进行存储并且发送给管线中的第二个数据节点,第二个数据节点存储包并且传给管线中第三个数据节点,直至将包传给管线中的最后一个数据节点;
5.DFSOutputStream有一个内部的包队列来等待数据节点收到确认,称为确认队列,只有当管线中所有的数据节点都返回写入成功,这个包才算写成功,发送确认给DFSOutputStream,包被移出确认队列,然后开始下一个包的写入;
如果在有数据写入期间,数据节点发生故障,则会执行下面的操作:首先管线被关闭,确认队列中的任何包都会被添加回数据队列的前面,以确保数据节点从失败的节点处是顺流的,不会漏掉任意一个包,当前的块在正常工作的数据节点中被给予一个新的身份并联系名称节点,以便能在故障数据节点后期恢复时其中的部分数据块会被删除;故障数据节点会从管线中删除并且余下块的数据会被写入管线中的两个好的数据节点;名称节点注意到块副本不足时,会在另一个节点上安排创建一个副本;随后,后续的块会继续正常处理;
6.客户端完成数据的写入后,就会在FSDataInputStream中调用close();
7.在块完成复制到最少的份数之后,名字节点将成功返回。
本发明提出了一种新的基于云计算平台的备份文件、更新文件的方法,提高了备份文件、更新文件的效率。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。