一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

文件管理方法和装置及HDFS系统与流程

2022-04-25 04:59:05 来源:中国专利 TAG:

文件管理方法和装置及hdfs系统
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种文件管理方法和装置及hdfs系统。


背景技术:

2.hdfs作为大数据处理的一个基础组件,随着业务、集群规模的增长,单个机房的资源可能存在瓶颈,很难支撑更大规模的需求,因此需要在多机房部署hdfs集群。在现有技术中,一般采用多集群、多机房的部署方式,即在每一机房部署一个hdfs集群,不同hdfs集群之间通过distcp(一种集群间拷贝工具)等方式进行数据复制。
3.在实现本发明的过程中,发明人发现现有技术至少存在以下问题:首先,现有技术中数据块副本通过多个集群的多个名字节点进行管理,无法实现统一的副本分布策略,数据块副本往往随机分布在各机房,无法满足业务需要;其次,受限于带宽,机房间进行数据复制时只能采用增量复制方式,往往造成同一数据块的副本在不同机房具有不同大小的状况,数据一致性无法保证;再次,现有技术并不根据数据访问情况对各机房的数据块副本数量进行动态调整,因此形成大量的冗余副本,资源利用率低。


技术实现要素:

4.有鉴于此,本发明实施例提供一种文件管理方法和装置及hdfs系统,能够基于多机房、单集群的部署方式在多机房实现统一的副本分布策略,同时提高资源利用率。
5.为实现上述目的,根据本发明的一个方面,提供了一种文件管理方法。
6.本发明实施例的文件管理方法应用在hdfs集群的名字节点,所述hdfs集群为由多个机房的节点组成的单集群,所述节点包括数据节点;所述方法包括:响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;对于具有所述跨机房分布标签的数据块,利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量对该数据块在该机房的当前副本数量进行调整。
7.可选地,所述副本分布标签配置在所述待写入文件的目录或上级目录,所述副本分布标签进一步包括单机房分布标签,所述单机房分布标签表征用于存储所述待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量;以及,所述根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点,包括:在接收到客户端发送的文件写入请求之后,如果判断所述待写入文件具有单机房分布标签,则控制所述客户端将所述待写入文件的数据块按照所述单机房分布标签指示的副本初始数量复制到该机房的数据节点。
8.可选地,所述根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点,进一步包括:在接收到客户端发送的文件写入请
求之后,如果判断所述待写入文件具有跨机房分布标签、并且所述客户端处在所述跨机房分布标签指示的第一机房,则控制所述客户端将待写入文件的数据块按照所述跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并以第一机房的数据节点为源节点、按照所述跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点;其中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制;在所述将该数据块复制到其它机房的数据节点之后,将所述待写入文件的数据块标识写入预先建立的管理队列。
9.可选地,所述管理队列为基于最近最少使用算法lru的队列;以及,所述方法进一步包括:在接收到客户端发送的文件读取请求之后,从存储待读取文件数据块的机房中选取距离所述客户端最近的机房,将该机房中存储待读取文件数据块的数据节点的地址向所述客户端返回以进行读取;在判断所述待读取文件具有跨机房分布标签时,将所述待读取文件的数据块标识写入所述管理队列;在读取完成之后,更新所述待读取文件数据块在该机房的历史访问数据。
10.可选地,所述历史访问数据包括:发生在预设的历史时间间隔内的每一次访问的访问时间;以及,所述利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,包括:周期性地对所述管理队列中的每一数据块执行以下步骤:依据所述访问时间对应的权重值以及从所述历史访问数据中得到的访问频次数据计算该数据块在该机房的理论副本数量;如果该机房为该数据块的主机房,则将所述理论副本数量和预先为该数据块和该主机房配置的第一兜底数量中的最大值确定为该数据块在该主机房的期望副本数量;如果该机房为该数据块的非主机房,则:在该数据块的生命周期长度小于预设时长时,将所述理论副本数量和预先为该数据块以及该非主机房配置的第二兜底数量中的最大值确定为该数据块在该非主机房的期望副本数量;在该数据块的生命周期长度大于或等于所述预设时长时,将所述理论副本数量确定为该数据块在该非主机房的期望副本数量。
11.可选地,所述依据所述期望副本数量对该数据块在该机房的当前副本数量进行调整,包括:在所述期望副本数量小于所述当前副本数量时,删除该数据块在该机房的至少一个副本;其中,删除的副本数量等于所述当前副本数量与所述期望副本数量的差值;在所述期望副本数量大于所述当前副本数量时,增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于所述期望副本数量与所述当前副本数量的差值;在所述增加过程中,对于该机房中欲存储该数据块的数据节点,当同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;当同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制。
12.可选地,所述多个机房中的数据节点周期性地向所述名字节点发送心跳信号以上报当前状态;以及,所述方法进一步包括:当基于所述心跳信号感知到任一机房的任一数据节点下线时,针对该数据节点存储的任一数据块:利用该数据块在该机房的历史访问数据确定该数据块在该机房的期望副本数量,如果该期望副本数量大于该数据块在该机房的当前副本数量,则增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果判断该数据块具
有所述跨机房分布标签,则将该数据块的标识写入所述管理队列;当基于所述心跳信号感知到任一机房的任一数据节点存在异常数据块时,删除该异常数据块;并利用所述异常数据块对应的正常数据块在该机房的历史访问数据确定该正常数据块在该机房的期望副本数量,如果该期望副本数量大于该正常数据块在该机房的当前副本数量,则增加该正常数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果判断该正常数据块具有所述跨机房分布标签,则将该正常数据块的标识写入所述管理队列;针对同一机房内的不同数据节点执行预设的负载均衡策略,在执行完成之后,基于所述心跳信号获取该机房内各数据节点当前存储的数据块的元数据。
13.为实现上述目的,根据本发明的另一方面,提供了一种文件管理装置。
14.本发明实施例的文件管理装置应用在hdfs集群的名字节点,所述hdfs集群为由多个机房的节点组成的单集群,所述节点包括数据节点;所述装置可以包括:主单元、标签管理单元、副本管理单元和补块单元;其中,所述主单元可用于:响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;所述标签管理单元可用于配置所述副本分布标签;所述副本管理单元可用于:对于具有所述跨机房分布标签的数据块,利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量控制所述补块单元对该数据块在该机房的当前副本数量进行调整。
15.可选地,所述副本分布标签配置在所述待写入文件的目录或上级目录,所述副本分布标签进一步包括单机房分布标签,所述单机房分布标签表征用于存储所述待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量;以及,所述主单元可进一步用于:在接收到客户端发送的文件写入请求之后:如果判断所述待写入文件具有单机房分布标签,则控制所述客户端将所述待写入文件的数据块按照所述单机房分布标签指示的副本初始数量复制到该机房的数据节点;如果判断所述待写入文件具有跨机房分布标签、并且所述客户端处在所述跨机房分布标签指示的第一机房,则控制所述客户端将待写入文件的数据块按照所述跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并控制所述补块单元执行以下步骤:以第一机房的数据节点为源节点、按照所述跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点;其中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制;在所述将该数据块复制到其它机房的数据节点之后,将所述待写入文件的数据块标识写入预先在所述副本管理器建立的管理队列。
16.为实现上述目的,根据本发明的另一方面,提供了一种hdfs系统。
17.本发明实施例的hdfs系统为部署在多个机房的hdfs单集群,包括处在所述多个机房的数据节点以及处在所述多个机房中任一机房的名字节点;所述名字节点响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文
件切分得到的数据块写入所述数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;对于具有所述跨机房分布标签的数据块,所述名字节点利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量对该数据块在该机房的当前副本数量进行调整。
18.可选地,所述副本分布标签配置在所述待写入文件的目录或上级目录,所述副本分布标签进一步包括单机房分布标签,所述单机房分布标签表征用于存储所述待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量;所述名字节点在接收到客户端发送的文件写入请求之后,如果判断所述待写入文件具有单机房分布标签,则控制所述客户端将所述待写入文件的数据块按照所述单机房分布标签指示的副本初始数量复制到该机房的数据节点。
19.可选地,所述名字节点在接收到客户端发送的文件写入请求之后,如果判断所述待写入文件具有跨机房分布标签、并且所述客户端处在所述跨机房分布标签指示的第一机房,则控制所述客户端将待写入文件的数据块按照所述跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并以第一机房的数据节点为源节点、按照所述跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点;其中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,所述名字节点将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,所述名字节点将已存储同一数据块的外部机房的数据节点作为源节点进行复制;在所述将该数据块复制到其它机房的数据节点之后,所述名字节点将所述待写入文件的数据块标识写入预先建立的管理队列。
20.可选地,所述管理队列为基于最近最少使用算法lru的队列;以及,在接收到客户端发送的文件读取请求之后,所述名字节点从存储待读取文件数据块的机房中选取距离所述客户端最近的机房,将该机房中存储待读取文件数据块的数据节点的地址向所述客户端返回以进行读取;在判断所述待读取文件具有跨机房分布标签时,所述名字节点将所述待读取文件的数据块标识写入所述管理队列;在读取完成之后,所述名字节点更新所述待读取文件数据块在该机房的历史访问数据。
21.可选地,所述历史访问数据包括:发生在预设的历史时间间隔内的每一次访问的访问时间;以及,所述名字节点周期性地对所述管理队列中的每一数据块执行以下步骤:依据所述访问时间对应的权重值以及从所述历史访问数据中得到的访问频次数据计算该数据块在该机房的理论副本数量;如果该机房为该数据块的主机房,则将所述理论副本数量和预先为该数据块和该主机房配置的第一兜底数量中的最大值确定为该数据块在该主机房的期望副本数量;如果该机房为该数据块的非主机房,则:在该数据块的生命周期长度小于预设时长时,将所述理论副本数量和预先为该数据块以及该非主机房配置的第二兜底数量中的最大值确定为该数据块在该非主机房的期望副本数量;在该数据块的生命周期长度大于或等于所述预设时长时,将所述理论副本数量确定为该数据块在该非主机房的期望副本数量。
22.可选地,在所述期望副本数量小于所述当前副本数量时,所述名字节点删除该数据块在该机房的至少一个副本;其中,删除的副本数量等于所述当前副本数量与所述期望
副本数量的差值;在所述期望副本数量大于所述当前副本数量时,所述名字节点增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于所述期望副本数量与所述当前副本数量的差值;在所述增加过程中,对于该机房中欲存储该数据块的数据节点,当同一机房中存在已存储同一数据块的数据节点时,所述名字节点将该数据节点作为源节点进行复制;当同一机房中不存在已存储同一数据块的数据节点时,所述名字节点将已存储同一数据块的外部机房的数据节点作为源节点进行复制。
23.可选地,所述多个机房中的数据节点周期性地向所述名字节点发送心跳信号以上报当前状态;以及,当所述名字节点基于所述心跳信号感知到任一机房的任一数据节点下线时,针对该数据节点存储的任一数据块:利用该数据块在该机房的历史访问数据确定该数据块在该机房的期望副本数量,如果该期望副本数量大于该数据块在该机房的当前副本数量,则增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果所述名字节点判断该数据块具有所述跨机房分布标签,则将该数据块的标识写入所述管理队列;当所述名字节点基于所述心跳信号感知到任一机房的任一数据节点存在异常数据块时,删除该异常数据块;并利用所述异常数据块对应的正常数据块在该机房的历史访问数据确定该正常数据块在该机房的期望副本数量,如果该期望副本数量大于该正常数据块在该机房的当前副本数量,则增加该正常数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果所述名字节点判断该正常数据块具有所述跨机房分布标签,则将该正常数据块的标识写入所述管理队列;所述名字节点针对同一机房内的不同数据节点执行预设的负载均衡策略,在执行完成之后,基于所述心跳信号获取该机房内各数据节点当前存储的数据块的元数据。
24.为实现上述目的,根据本发明的又一方面,提供了一种电子设备。
25.本发明的一种电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的文件管理方法。
26.为实现上述目的,根据本发明的再一方面,提供了一种计算机可读存储介质。
27.本发明的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的文件管理方法。
28.根据本发明的技术方案,上述发明中的实施例具有如下优点或有益效果:
29.在多机房部署hdfs单集群,使用统一的名字节点管理多机房的数据节点,在名字节点设置标签管理单元用于在写入文件之前基于目录配置文件的副本分布标签,该标签可指示对应于业务需求的副本分布情况(即,将文件部署在一个还是多个机房以及每一机房的初始副本数量),写入文件时按照该标签进行副本复制即可实现副本分布的统一管理策略,解决了现有技术中存在的数据管理不统一的问题。进一步地,本发明实施例还提供了统一的各机房副本数量调整策略(由名字节点中的副本管理单元执行),即,针对具有跨机房分布标签的数据块,根据其在相应机房的历史访问数据来确定其在该机房期望副本数量从而进行调整,同时在上述调整策略中考虑到对主机房进行全时段的数据块兜底以及对非主机房进行预设时长内的数据块兜底,如此即可实现随访问热度改变的副本数量,避免数据冗余以及低利用率。另外,副本管理单元可以使用基于lru算法的管理队列来管理数据块,
当数据块被写入或读取时,其标识即可写入该管理队列头部,尾部的较冷数据块可能会被移出,由此进一步提高数据利用率。此外,本发明实施例还可以在名字节点中设置补块单元,用于与副本管理单元协作执行跨机房的副本复制,在复制过程中优选选取同一机房的数据节点作为源节点,在同一机房不存在所需节点时再考虑外部机房节点,由此节约跨机房带宽资源,提高系统执行效率;同时在复制时按照hdfs的校验策略进行校验,从而保证数据一致性,而单hdfs集群固有的多个数据节点与单名字节点之间基于心跳信号的通信机制与数据同步方式能够进一步确保数据一致性。最后,针对可能发生的数据节点下线或者异常数据块,本发明实施例还可以通过副本管理单元和补块单元进行及时修复,还可以在每一机房内执行负载均衡以确保机房内各数据节点的存储量均衡。
30.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
31.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
32.图1是本发明实施例中文件管理方法的主要步骤示意图;
33.图2是本发明实施例的文件写入示意图;
34.图3是本发明实施例的文件读取示意图;
35.图4是本发明实施例的副本数量调整示意图;
36.图5是本发明实施例中文件管理装置的组成部分示意图;
37.图6是本发明实施例中hdfs系统的架构示意图;
38.图7是用来实现本发明实施例中文件管理方法的电子设备结构示意图。
具体实施方式
39.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
40.需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。
41.图1是根据本发明实施例中文件管理方法的主要步骤示意图。
42.如图1所示,本发明实施例的文件管理方法可具体按照如下步骤执行:
43.步骤s101:响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由待写入文件切分得到的数据块写入数据节点;副本分布标签包括跨机房分布标签。
44.需要说明的是,本发明实施例的文件管理方法应用在hdfs集群的名字节点,hdfs集群为由多个机房的节点组成的单集群,以上节点包括数据节点和以上名字节点。可以理解,以上机房可以是处在不同地理区域的数据中心,例如,可以将处在北京、上海、广州的三个数据中心作为三个机房,当然也可以将处在同一地理区域的多个数据中心作为多个机房。在以上hdfs集群中,一般只具有一个名字节点。
45.在计算机技术领域,hdfs(hadoop distributed file system)是一个文件系统,用于存储文件并通过目录树来定位文件;hdfs是分布式的,由多个服务器联合起来实现其功能,集群中的服务器有各自的角色。hdfs的设计适合一次写入、多次读取的场景,且一般不支持文件的修改,适合用来进行数据分析。hdfs具有高容错性,数据一般自动保存多个副本,通过增加副本的形式可提高容错性;某一副本丢失以后,系统可以自动恢复;适合大数据处理,能够处理的数据规模可达到pb级别,能够处理百万规模以上的文件数量;支持流式数据访问,能够保证数据一致性;可构建在廉价机器上,通过多副本机制,提高可靠性。
46.hdfs集群中的服务器包括以下角色:客户端(client)、名字节点(namenode)、数据节点(datanode)。客户端在上传文件时执行文件切分为至少一个数据块(block),数据块大小一般固定,例如128m;与名字节点交互来获取用于存储数据块的数据节点的地址(可以是ip地址或域名);与数据节点交互来写入或者读取文件;可以提供一些命令来访问或管理hdfs。名字节点用于管理hdfs的命名空间,管理数据块(block)映射信息,配置副本策略以及处理客户端读写请求。数据节点用于存储实际的数据块,执行数据块的读/写操作,可以周期性地向名字节点发送心跳信号来汇报健康状况、副本情况等。在本发明实施例中,多个机房的节点组成一个hdfs集群,可以在其中的一个机房选取一个节点作为该集群的名字节点,例如,可以将访问量最高的机房中的适用节点选取为名字节点。这样,多个机房中的其它节点可以作为数据节点和客户端。
47.在执行步骤s101之前,可以在名字节点配置待写入文件的副本分布标签。副本分布标签用于描述待写入文件各数据块的副本在各机房的分布情况。例如,某文件的副本分布标签为:“机房1:3,机房2:2”,表示该文件需要在机房1存储三个副本,在机房2存储两个副本。可以理解,以上副本分布标签可以根据业务需要进行配置,如果业务在某地理区域的访问量较大,则可以在该地理区域的机房配置较多副本,同理,如果业务在某地理区域的访问量较小,则可以在该地理区域的机房配置较少副本,如此可实现副本初始数量与业务需求的匹配,解决了现有技术中存在的副本随机分布、与业务脱节的问题。具体场景中,可以为副本分布标签配置生效时间点,代表该时间点之后的具有该副本分布标签的文件需要被副本管理单元(副本管理单元将在以下说明)管理。
48.特别地,在本发明实施例中,可以在副本分布标签中进一步配置待写入文件的主机房和非主机房(例如在副本分布标签中为主机房配置1、为非主机房配置零)。主机房指的是用于对待写入文件进行兜底保存的机房,其可以在较长时间(例如一年内)最少按照预先配置的第一兜底数量(该数量可以等于副本分布标签中为主机房配置的副本数量)进行保存,例如,如果第一兜底数量为3,则主机房在较长时间内至少保存待写入文件的三个副本,该较长时间之后,主机房可以采用更为节省存储空间的方式对待写入文件进行保存。相对地,非主机房可以在预先配置的预设时长内(该时长是数据热度的通常维持时长,例如两个月)按照预先配置的第二兜底数量(该数量可以等于副本分布标签中为非主机房配置的副本数量)进行保存,在该预设时长之后,非主机房不进行兜底,副本数量可以减少到零。
49.实际应用中,可以在目录级别配置副本分布标签,副本分布标签可以配置在待写入文件的目录或上级目录。具体地,如果待写入文件的目录或上级目录此前没有配置副本分布标签,则可以在写入文件之前进行配置;如果待写入文件的目录或上级目录此前已经配置副本分布标签,则待写入文件自动具有该副本分布标签。可以理解,如果某目录具有某
副本分布标签,则该目录中的文件以及该目录的下级目录中的文件都具有该副本分布标签。
50.具体应用中,副本分布标签可以包括单机房分布标签和跨机房分布标签,单机房分布标签表征用于存储待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量,跨机房分布标签表征用于存储待写入文件数据块的多个机房以及各机房存储的数据块副本的初始数量。出于对机房间带宽资源利用率的考虑,在后续步骤中,本发明实施例主要对具有跨机房分布标签的数据块进行基于访问热度的副本数量调整。
51.在步骤s101中,客户端向名字节点发送文件写入请求,其中携带待写入文件的目录和文件名;名字节点在接收到文件写入请求之后,根据预先配置的副本分布标签控制由待写入文件切分得到的数据块被写入数据节点。具体地,名字节点在接收到客户端发送的文件写入请求之后,如果判断待写入文件具有单机房分布标签、并且客户端处在单机房分布标签指示的机房,则控制客户端将待写入文件的数据块按照单机房分布标签指示的副本初始数量复制到该机房的数据节点;如果判断待写入文件具有单机房分布标签、并且客户端并不处在单机房分布标签指示的机房,则需要执行跨机房的数据块复制(同样由名字节点控制客户端将待写入文件的数据块按照单机房分布标签指示的副本初始数量复制到该机房的数据节点)。
52.名字节点在接收到客户端发送的文件写入请求之后,如果判断待写入文件具有跨机房分布标签、并且客户端处在所述跨机房分布标签指示的第一机房,则控制客户端将待写入文件的数据块按照跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并以第一机房的数据节点为源节点、按照跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点。具体场景中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制。如果判断待写入文件具有跨机房分布标签、并且客户端并不处在跨机房分布标签指示的任一机房,则需要执行多次跨机房数据块复制(可以首先在主机房执行数据块复制,复制完成之后再在非主机房进行复制)。实际应用中,在将数据块写入某数据节点时,该数据节点首先需要对数据块进行校验,例如在chunk(更小粒度的数据块)粒度进行校验,在校验通过之后进行响应。
53.例如,某文件的副本分布标签为:“机房1:3,机房2:2”,客户端处在机房1(此时机房1为第一机房),则名字节点控制客户端将待写入文件数据块的三个副本分别复制到机房1的三个数据节点;此后名字节点以上述三个数据节点中的任一数据节点为源节点、机房2的适用数据节点为目标节点来复制一个副本,在复制完成之后,以机房2的该数据节点为源节点、机房2的另一数据节点为目标节点来复制一个副本,这样即可完成文件写入。可以理解,以上方式有助于节约跨机房带宽资源,提高系统执行效率。
54.作为一个优选方案,名字节点在判断待写入文件具有跨机房分布标签时,可以将待写入文件的标识写入预先建立的管理队列,以便对具有跨机房分布标签的数据块进行管理;当名字节点获取到待写入文件切分成的各数据块的标识时(一般在数据块复制完成之后),可以将各数据块的标识写入管理队列,以替换待写入文件的标识。特别地,以上管理队列用于对数据块进行基于历史访问数据的副本数量调整,名字节点一般只针对管理队列中
存储的数据块执行以上调整。在本发明实施例中,以上管理队列为基于lru(least recently used,最近最少使用,可以包括lru算法或lru-k算法)算法的队列(例如链表),当数据块被写入或读取时,其标识可以被名字节点写入管理队列的头部,而处于管理队列尾部的数据块标识则可能被移出,这样,即可实现基于访问热度的数据块管理,避免名字节点中待监测的数据块过多导致存储空间不足。
55.以上为hdfs的文件写入流程,hdfs的文件读取流程如下:名字节点接收客户端发送的文件读取请求,该请求中携带文件目录和文件名,也可以携带客户端标识。名字节点可以通过客户端标识从存储待读取文件数据块的机房中选取距离客户端最近的机房(也可以通过客户端的ip地址进行选取),将该机房中存储待读取文件数据块的数据节点的地址向客户端返回以进行读取。以上距离指的是网络传输距离,例如,名字节点如果判断客户端所在机房存储有待读取文件的数据块,则将该机房距离客户端最近的数据节点(例如存储有待读取文件的数据块、并且与客户端处在同一机架的数据节点)的地址向客户端返回;名字节点如果判断客户端所在机房未存储有待读取文件的数据块,则确定距离客户端所在机房最近的机房,并从中确定一个数据节点向客户端返回。特别地,名字节点如果判断待读取文件具有跨机房分布标签,则将待读取文件的数据块标识写入管理队列以进行监测及副本数量调整。
56.在以上读取完成之后,名字节点可以更新待读取文件数据块在上述机房的历史访问数据。一般地,数据块在机房历史访问数据可以包括:发生在预设的历史时间间隔(例如距离当前时刻一个月)内的每一次访问(即针对该机房的该数据块的访问)的访问时间,通过历史访问数据可以判断某数据块在某机房的访问热度。
57.步骤s102:对于具有跨机房分布标签的数据块,利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据期望副本数量对该数据块在该机房的当前副本数量进行调整。
58.在本步骤中,可以周期性地(例如每分钟一次)对管理队列中的每一数据块执行以下步骤以实现副本数量调整。具体地,对于某数据块以及某机房,名字节点首先根据预设逻辑(一般地,访问时间越早权重值越小)确定历史访问数据中的每一次访问的访问时间对应的权重值,接着依据该权重值以及从历史访问数据中得到的访问频次数据(可以是在历史时间间隔内的访问总数或访问频率)计算该数据块在该机房的理论副本数量。以上计算可以基于预设公式执行,公式需要限制:理论副本数量与权重值以及访问频次数据正相关。
59.可以理解,计算过程还需考虑机房性质(即属于主机房还是非主机房)和数据块的生命周期(即从数据块被写入的时刻到当前时刻)。具体地,如果名字节点判断该机房为该数据块的主机房,则将理论副本数量和预先为该数据块和该主机房配置的第一兜底数量中的最大值确定为该数据块在该主机房的期望副本数量;如果该机房为该数据块的非主机房,则:在该数据块的生命周期长度小于预设时长(例如两个月)时,将理论副本数量和预先为该数据块以及该非主机房配置的第二兜底数量中的最大值确定为该数据块在该非主机房的期望副本数量;在该数据块的生命周期长度大于或等于上述预设时长时,将理论副本数量确定为该数据块在该非主机房的期望副本数量。
60.此后,名字节点即可依据期望副本数量对该数据块在该机房的当前副本数量进行调整。具体地,在期望副本数量小于当前副本数量时,删除该数据块在该机房的至少一个副
本,删除的副本数量等于当前副本数量与期望副本数量的差值;在期望副本数量大于当前副本数量时,增加该数据块在该机房的至少一个副本,增加的副本数量等于期望副本数量与当前副本数量的差值。在以上增加过程中,可以执行以下策略以节省带宽资源:对于该机房中欲存储该数据块的数据节点,当同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;当同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制。
61.通过以上步骤,即可根据访问热度动态调整副本数量,避免数据冗余以及低利用率,同时结合通过副本分布标签实现的副本初始数量配置实现统一的多机房副本分布策略。
62.较佳地,本发明实施例通过以下步骤处理数据节点下线的情况。具体地,当名字节点基于心跳信号感知到任一机房的任一数据节点下线时,针对该数据节点存储的任一数据块:利用该数据块在该机房的历史访问数据确定该数据块在该机房的期望副本数量,如果该期望副本数量大于该数据块在该机房的当前副本数量,则增加该数据块在该机房的至少一个副本,增加的副本数量等于该期望副本数量与该当前副本数量的差值。在执行该增加之前、之后或同时,如果判断该数据块具有跨机房分布标签,则将该数据块的标识写入管理队列进行管理。
63.本发明实施例可以通过以下步骤处理存在异常数据块(即当某数据块发生更新时,未更新的原数据块为异常数据块)的情况:当名字节点基于心跳信号感知到任一机房的任一数据节点存在异常数据块时,删除该异常数据块;并利用异常数据块对应的正常数据块(即更新后的正确数据块)在该机房的历史访问数据确定该正常数据块在该机房的期望副本数量,如果该期望副本数量大于该正常数据块在该机房的当前副本数量,则增加该正常数据块在该机房的至少一个副本,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果判断该正常数据块具有跨机房分布标签,则将该正常数据块的标识写入管理队列进行管理。
64.此外,在本发明实施例中,名字节点还可以针对同一机房内的不同数据节点执行预设的负载均衡策略,在执行完成之后,基于心跳信号获取该机房内各数据节点当前存储的数据块的元数据(包括数据块标识、数据块大小、写入时间戳等)。
65.根据本发明实施例的技术方案,在多机房部署hdfs单集群,使用统一的名字节点管理多机房的数据节点,在名字节点设置标签管理单元用于在写入文件之前基于目录配置文件的副本分布标签,该标签可指示对应于业务需求的副本分布情况(即,将文件部署在一个还是多个机房以及每一机房的初始副本数量),写入文件时按照该标签进行副本复制即可实现副本分布的统一管理策略,解决了现有技术中存在的数据管理不统一的问题。进一步地,本发明实施例还提供了统一的各机房副本数量调整策略(由名字节点中的副本管理单元执行),即,针对具有跨机房分布标签的数据块,根据其在相应机房的历史访问数据来确定其在该机房期望副本数量从而进行调整,同时在上述调整策略中考虑到对主机房进行全时段的数据块兜底以及对非主机房进行预设时长内的数据块兜底,如此即可实现随访问热度改变的副本数量,避免数据冗余以及低利用率。另外,副本管理单元可以使用基于lru算法的管理队列来管理数据块,当数据块被写入或读取时,其标识即可写入该管理队列头部,尾部的较冷数据块可能会被移出,由此进一步提高数据利用率。此外,本发明实施例还
可以在名字节点中设置补块单元,用于与副本管理单元协作执行跨机房的副本复制,在复制过程中优选选取同一机房的数据节点作为源节点,在同一机房不存在所需节点时再考虑外部机房节点,由此节约跨机房带宽资源,提高系统执行效率;同时在复制时按照hdfs的校验策略进行校验,从而保证数据一致性,而单hdfs集群固有的多个数据节点与单名字节点之间基于心跳信号的通信机制与数据同步方式能够进一步确保数据一致性。最后,针对可能发生的数据节点下线或者异常数据块,本发明实施例还可以通过副本管理单元和补块单元进行及时修复,还可以在每一机房内执行负载均衡以确保机房内各数据节点的存储量均衡。
66.以下提供文件管理方法的一个具体实施例。
67.在本实施例中,对名字节点进行以下设置,将其原有功能模块作为主单元,并设置标签管理单元、副本管理单元和补块单元。其中,标签管理单元用于实现副本分布标签的配置;副本管理单元中设置管理队列,用于对具有跨机房分布标签的数据块进行管理、以及针对管理队列中的数据块执行基于历史访问数据的副本数量动态调整,副本管理单元还用于控制补块单元进行跨机房的副本增加或删除;补块单元还可以在主单元的控制下进行同一机房的副本增加或删除。
68.图2是本发明实施例的文件写入示意图,如图2所示,第一步,客户端向主单元发送文件写入请求,其中携带待写入文件的目录、文件名以及大小;第二步,主单元在接收到文件写入请求之后,通过标签管理单元判断待写入文件是否具有跨机房分布标签:若是,在第三步将待写入文件的标识写入管理队列,以便对具有跨机房分布标签的数据块进行管理;否则,不将待写入文件的标识写入管理队列。第四步,主单元在校验客户端身份以及目录通过之后,向客户端返回每一数据块(block)的标准大小以及用于存储每一数据块的数据节点的地址。第五步,客户端将待写入文件切分为标准大小的数据块,并根据数据节点地址与相应数据节点交互以复制数据块。第六步,各数据节点在验证通过之后依次发送响应。第七步,在待写入文件写入完成之后,客户端向主单元汇报。需要说明的是,当主单元获取到待写入文件切分成的各数据块的标识时,可以将各数据块的标识写入副本管理单元的管理队列中,以替换此前写入的待写入文件标识。第八步,如果存在其它机房的数据块复制任务,主单元通知副本管理单元进行操作。第九步,副本管理单元指示补块单元进行跨机房的数据块复制。补块单元在进行复制时,首先判断同一机房中是否存在已存储相应数据块的数据节点:若是,将该数据节点作为源节点进行复制;否则,将已存储相应数据块的外部机房的数据节点作为源节点进行复制。
69.图3是本发明实施例的文件读取示意图,如图3所示,第一步,主单元接收客户端发送的文件读取请求,该请求中携带文件目录和文件名,也可以携带客户端标识。第二步,主单元通过标签管理单元判断待读取文件是否具有跨机房分布标签:若是,在第三步将待读取文件的数据块标识写入管理队列,以便对具有跨机房分布标签的数据块进行管理;否则,不将待读取文件的标识写入管理队列。第四步,主单元可以通过客户端标识从存储待读取文件数据块的机房中选取距离客户端最近的机房(也可以通过客户端的ip地址进行选取),将该机房中存储待读取文件数据块的数据节点的地址向客户端返回以进行数据块读取。第五步,客户端根据该地址从相应数据节点中读取数据块。第六步,当读取完成之后,客户端向主单元汇报。第七步,主单元将由此次读取更新的相应数据块的历史访问数据向副本管
理单元发送。
70.图4是本发明实施例的副本数量调整示意图,如图4所示,当客户端与主单元交互进行文件写入或读取时,主单元通过标签管理单元获取文件的副本分布标签。主单元在判断文件具有跨机房分布标签时,将文件的数据块标识写入副本管理单元的管理队列。副本管理单元在接收到数据块标识之后,自动更新管理队列,并周期性地执行以下判断:针对消息队列中的每一数据块,从主单元获取该数据块在每一机房的历史访问数据,依据历史访问数据以及该机房性质(属于主机房还是非主机房)和数据块生成周期计算该数据块在该机房的期望副本数量。以上计算方法已在前文说明,此处不再重复。此后,如果期望副本数量与当前副本数量相等,则不需调整;如果期望副本数量大于或小于当前副本数量,副本管理单元指示补块单元进行数据块的增加或删除。当执行完毕后,数据节点通过心跳信号将当前状况汇报到主单元,主单元将各机房的当前副本数量发送到副本管理单元,副本管理单元判断期望副本数量与当前副本数量是否相等:若是,则结束此次调整流程;否则,继续指示补块单元进行数据块的增加或删除。
71.此外,在名字节点中还可以设置负载均衡单元(balancer),其用于针对同一机房内的不同数据节点执行预设的负载均衡策略,以使同一机房内各数据节点的存储量较为均衡。在执行负载均衡策略完成之后,主单元可以基于心跳信号获取该机房内各数据节点当前存储的数据块的元数据(包括数据块标识、数据块大小、写入时间戳等)。
72.需要说明的是,对于前述的各方法实施例,为了便于描述,将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,某些步骤事实上可以采用其它顺序进行或者同时进行。此外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是实现本发明所必须的。
73.为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
74.请参阅图5所示,本发明实施例提供的文件管理装置500应用在hdfs集群的名字节点,所述hdfs集群为由多个机房的节点组成的单集群,所述节点包括数据节点;所述装置500包括:主单元501、标签管理单元502、副本管理单元503和补块单元504。
75.其中,所述主单元501可用于:响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;所述标签管理单元502可用于配置所述副本分布标签;所述副本管理单元503可用于:对于具有所述跨机房分布标签的数据块,利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量控制所述补块单元对该数据块在该机房的当前副本数量进行调整。
76.在本发明实施例中,所述副本分布标签配置在所述待写入文件的目录或上级目录,所述副本分布标签可进一步包括单机房分布标签,所述单机房分布标签表征用于存储所述待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量;以及,所述主单元501可进一步用于:在接收到客户端发送的文件写入请求之后:如果判断所述待写
入文件具有单机房分布标签,则控制所述客户端将所述待写入文件的数据块按照所述单机房分布标签指示的副本初始数量复制到该机房的数据节点;如果判断所述待写入文件具有跨机房分布标签、并且所述客户端处在所述跨机房分布标签指示的第一机房,则控制所述客户端将待写入文件的数据块按照所述跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并控制所述补块单元执行以下步骤:以第一机房的数据节点为源节点、按照所述跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点;其中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,将已存储同一数据块的外部机房的数据节点作为源节点进行复制;在所述将该数据块复制到其它机房的数据节点之后,将所述待写入文件的数据块标识写入预先在所述副本管理器建立的管理队列。
77.具体应用中,所述管理队列为基于最近最少使用算法lru的队列;以及,所述主单元501可进一步用于:在接收到客户端发送的文件读取请求之后,从存储待读取文件数据块的机房中选取距离所述客户端最近的机房,将该机房中存储待读取文件数据块的数据节点的地址向所述客户端返回以进行读取;在判断所述待读取文件具有跨机房分布标签时,将所述待读取文件的数据块标识写入所述副本管理单元503中的管理队列;在读取完成之后,更新所述待读取文件数据块在该机房的历史访问数据。
78.实际应用中,所述历史访问数据包括:发生在预设的历史时间间隔内的每一次访问的访问时间;以及,所述副本管理单元503可进一步用于:周期性地对所述管理队列中的每一数据块执行以下步骤:依据所述访问时间对应的权重值以及从所述历史访问数据中得到的访问频次数据计算该数据块在该机房的理论副本数量;如果该机房为该数据块的主机房,则将所述理论副本数量和预先为该数据块和该主机房配置的第一兜底数量中的最大值确定为该数据块在该主机房的期望副本数量;如果该机房为该数据块的非主机房,则:在该数据块的生命周期长度小于预设时长时,将所述理论副本数量和预先为该数据块以及该非主机房配置的第二兜底数量中的最大值确定为该数据块在该非主机房的期望副本数量;在该数据块的生命周期长度大于或等于所述预设时长时,将所述理论副本数量确定为该数据块在该非主机房的期望副本数量。
79.作为一个优选方案,所述副本管理单元503可进一步用于:在所述期望副本数量小于所述当前副本数量时,指示所述补块单元504删除该数据块在该机房的至少一个副本;其中,删除的副本数量等于所述当前副本数量与所述期望副本数量的差值;在所述期望副本数量大于所述当前副本数量时,指示所述补块单元504增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于所述期望副本数量与所述当前副本数量的差值;在所述增加过程中,对于该机房中欲存储该数据块的数据节点,当同一机房中存在已存储同一数据块的数据节点时,所述补块单元504将该数据节点作为源节点进行复制;当同一机房中不存在已存储同一数据块的数据节点时,所述补块单元504将已存储同一数据块的外部机房的数据节点作为源节点进行复制。
80.此外,在本发明实施例中,所述多个机房中的数据节点周期性地向所述名字节点发送心跳信号以上报当前状态;以及,所述主单元501可进一步用于:当基于所述心跳信号感知到任一机房的任一数据节点下线时,针对该数据节点存储的任一数据块:获取所述副
本管理单元503基于该数据块在该机房的历史访问数据确定的该数据块在该机房的期望副本数量,如果该期望副本数量大于该数据块在该机房的当前副本数量,则控制所述补块单元504增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果判断该数据块具有所述跨机房分布标签,则将该数据块的标识写入所述管理队列;
81.所述主单元501可进一步用于:当基于所述心跳信号感知到任一机房的任一数据节点存在异常数据块时,控制所述补块单元504删除该异常数据块;并获取所述副本管理单元503基于所述异常数据块对应的正常数据块在该机房的历史访问数据确定的该正常数据块在该机房的期望副本数量,如果该期望副本数量大于该正常数据块在该机房的当前副本数量,则控制所述补块单元504增加该正常数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果判断该正常数据块具有所述跨机房分布标签,则将该正常数据块的标识写入所述管理队列;
82.所述主单元501可进一步用于:针对同一机房内的不同数据节点执行预设的负载均衡策略,在执行完成之后,基于所述心跳信号获取该机房内各数据节点当前存储的数据块的元数据。
83.根据本发明实施例的技术方案,在多机房部署hdfs单集群,使用统一的名字节点管理多机房的数据节点,在名字节点设置标签管理单元用于在写入文件之前基于目录配置文件的副本分布标签,该标签可指示对应于业务需求的副本分布情况(即,将文件部署在一个还是多个机房以及每一机房的初始副本数量),写入文件时按照该标签进行副本复制即可实现副本分布的统一管理策略,解决了现有技术中存在的数据管理不统一的问题。进一步地,本发明实施例还提供了统一的各机房副本数量调整策略(由名字节点中的副本管理单元执行),即,针对具有跨机房分布标签的数据块,根据其在相应机房的历史访问数据来确定其在该机房期望副本数量从而进行调整,同时在上述调整策略中考虑到对主机房进行全时段的数据块兜底以及对非主机房进行预设时长内的数据块兜底,如此即可实现随访问热度改变的副本数量,避免数据冗余以及低利用率。另外,副本管理单元可以使用基于lru算法的管理队列来管理数据块,当数据块被写入或读取时,其标识即可写入该管理队列头部,尾部的较冷数据块可能会被移出,由此进一步提高数据利用率。此外,本发明实施例还可以在名字节点中设置补块单元,用于与副本管理单元协作执行跨机房的副本复制,在复制过程中优选选取同一机房的数据节点作为源节点,在同一机房不存在所需节点时再考虑外部机房节点,由此节约跨机房带宽资源,提高系统执行效率;同时在复制时按照hdfs的校验策略进行校验,从而保证数据一致性,而单hdfs集群固有的多个数据节点与单名字节点之间基于心跳信号的通信机制与数据同步方式能够进一步确保数据一致性。最后,针对可能发生的数据节点下线或者异常数据块,本发明实施例还可以通过副本管理单元和补块单元进行及时修复,还可以在每一机房内执行负载均衡以确保机房内各数据节点的存储量均衡。
84.图6是本发明实施例中hdfs系统的架构示意图,如图6所示,所述系统为部署在多个机房的hdfs单集群,包括处在所述多个机房的数据节点以及处在所述多个机房中任一机房的名字节点。
85.其中,所述名字节点响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入所述数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;对于具有所述跨机房分布标签的数据块,所述名字节点利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量对该数据块在该机房的当前副本数量进行调整。
86.在本发明实施例中,所述副本分布标签配置在所述待写入文件的目录或上级目录,所述副本分布标签进一步包括单机房分布标签,所述单机房分布标签表征用于存储所述待写入文件的数据块的一个机房以及该机房存储的数据块副本的初始数量;所述名字节点在接收到客户端发送的文件写入请求之后,如果判断所述待写入文件具有单机房分布标签,则控制所述客户端将所述待写入文件的数据块按照所述单机房分布标签指示的副本初始数量复制到该机房的数据节点。
87.作为一个优选方案,所述名字节点在接收到客户端发送的文件写入请求之后,如果判断所述待写入文件具有跨机房分布标签、并且所述客户端处在所述跨机房分布标签指示的第一机房,则控制所述客户端将待写入文件的数据块按照所述跨机房分布标签指示的第一机房的副本初始数量复制到第一机房的数据节点;并以第一机房的数据节点为源节点、按照所述跨机房分布标签指示的第一机房以外的其它机房的副本初始数量,将该数据块复制到其它机房的数据节点;其中,对于其它机房中欲存储该数据块的数据节点,在同一机房中存在已存储同一数据块的数据节点时,所述名字节点将该数据节点作为源节点进行复制;在同一机房中不存在已存储同一数据块的数据节点时,所述名字节点将已存储同一数据块的外部机房的数据节点作为源节点进行复制;在所述将该数据块复制到其它机房的数据节点之后,所述名字节点将所述待写入文件的数据块标识写入预先建立的管理队列。
88.较佳地,在本发明实施例中,所述管理队列为基于最近最少使用算法lru的队列;以及,在接收到客户端发送的文件读取请求之后,所述名字节点从存储待读取文件数据块的机房中选取距离所述客户端最近的机房,将该机房中存储待读取文件数据块的数据节点的地址向所述客户端返回以进行读取;在判断所述待读取文件具有跨机房分布标签时,所述名字节点将所述待读取文件的数据块标识写入所述管理队列;在读取完成之后,所述名字节点更新所述待读取文件数据块在该机房的历史访问数据。
89.具体应用中,所述历史访问数据包括:发生在预设的历史时间间隔内的每一次访问的访问时间;以及,所述名字节点周期性地对所述管理队列中的每一数据块执行以下步骤:依据所述访问时间对应的权重值以及从所述历史访问数据中得到的访问频次数据计算该数据块在该机房的理论副本数量;如果该机房为该数据块的主机房,则将所述理论副本数量和预先为该数据块和该主机房配置的第一兜底数量中的最大值确定为该数据块在该主机房的期望副本数量;如果该机房为该数据块的非主机房,则:在该数据块的生命周期长度小于预设时长时,将所述理论副本数量和预先为该数据块以及该非主机房配置的第二兜底数量中的最大值确定为该数据块在该非主机房的期望副本数量;在该数据块的生命周期长度大于或等于所述预设时长时,将所述理论副本数量确定为该数据块在该非主机房的期望副本数量。
90.实际应用中,在所述期望副本数量小于所述当前副本数量时,所述名字节点删除
该数据块在该机房的至少一个副本;其中,删除的副本数量等于所述当前副本数量与所述期望副本数量的差值;在所述期望副本数量大于所述当前副本数量时,所述名字节点增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于所述期望副本数量与所述当前副本数量的差值;在所述增加过程中,对于该机房中欲存储该数据块的数据节点,当同一机房中存在已存储同一数据块的数据节点时,所述名字节点将该数据节点作为源节点进行复制;当同一机房中不存在已存储同一数据块的数据节点时,所述名字节点将已存储同一数据块的外部机房的数据节点作为源节点进行复制。
91.此外,在本发明实施例中,所述多个机房中的数据节点周期性地向所述名字节点发送心跳信号以上报当前状态;以及,当所述名字节点基于所述心跳信号感知到任一机房的任一数据节点下线时,针对该数据节点存储的任一数据块:利用该数据块在该机房的历史访问数据确定该数据块在该机房的期望副本数量,如果该期望副本数量大于该数据块在该机房的当前副本数量,则增加该数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果所述名字节点判断该数据块具有所述跨机房分布标签,则将该数据块的标识写入所述管理队列;当所述名字节点基于所述心跳信号感知到任一机房的任一数据节点存在异常数据块时,删除该异常数据块;并利用所述异常数据块对应的正常数据块在该机房的历史访问数据确定该正常数据块在该机房的期望副本数量,如果该期望副本数量大于该正常数据块在该机房的当前副本数量,则增加该正常数据块在该机房的至少一个副本;其中,增加的副本数量等于该期望副本数量与该当前副本数量的差值;在执行该增加之前、之后或同时,如果所述名字节点判断该正常数据块具有所述跨机房分布标签,则将该正常数据块的标识写入所述管理队列;所述名字节点针对同一机房内的不同数据节点执行预设的负载均衡策略,在执行完成之后,基于所述心跳信号获取该机房内各数据节点当前存储的数据块的元数据。
92.根据本发明实施例的技术方案,在多机房部署hdfs单集群,使用统一的名字节点管理多机房的数据节点,在名字节点设置标签管理单元用于在写入文件之前基于目录配置文件的副本分布标签,该标签可指示对应于业务需求的副本分布情况(即,将文件部署在一个还是多个机房以及每一机房的初始副本数量),写入文件时按照该标签进行副本复制即可实现副本分布的统一管理策略,解决了现有技术中存在的数据管理不统一的问题。进一步地,本发明实施例还提供了统一的各机房副本数量调整策略(由名字节点中的副本管理单元执行),即,针对具有跨机房分布标签的数据块,根据其在相应机房的历史访问数据来确定其在该机房期望副本数量从而进行调整,同时在上述调整策略中考虑到对主机房进行全时段的数据块兜底以及对非主机房进行预设时长内的数据块兜底,如此即可实现随访问热度改变的副本数量,避免数据冗余以及低利用率。另外,副本管理单元可以使用基于lru算法的管理队列来管理数据块,当数据块被写入或读取时,其标识即可写入该管理队列头部,尾部的较冷数据块可能会被移出,由此进一步提高数据利用率。此外,本发明实施例还可以在名字节点中设置补块单元,用于与副本管理单元协作执行跨机房的副本复制,在复制过程中优选选取同一机房的数据节点作为源节点,在同一机房不存在所需节点时再考虑外部机房节点,由此节约跨机房带宽资源,提高系统执行效率;同时在复制时按照hdfs的校验策略进行校验,从而保证数据一致性,而单hdfs集群固有的多个数据节点与单名字节点
之间基于心跳信号的通信机制与数据同步方式能够进一步确保数据一致性。最后,针对可能发生的数据节点下线或者异常数据块,本发明实施例还可以通过副本管理单元和补块单元进行及时修复,还可以在每一机房内执行负载均衡以确保机房内各数据节点的存储量均衡。
93.本发明还提供了一种电子设备。本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的文件管理方法。
94.下面参考图7,其示出了适于用来实现本发明实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
95.如图7所示,计算机系统700包括中央处理单元(cpu)701,其可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理。在ram703中,还存储有计算机系统700操作所需的各种程序和数据。cpu701、rom 702以及ram 703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
96.以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便从其上读出的计算机程序根据需要被安装入存储部分708。
97.特别地,根据本发明公开的实施例,上文的主要步骤图描述的过程可以被实现为计算机软件程序。例如,本发明实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在上述实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元701执行时,执行本发明的系统中限定的上述功能。
98.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执
行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
99.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
100.描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括主单元、标签管理单元、副本管理单元和补块单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,标签管理单元还可以被描述为“向主单元提供副本分布标签的单元”。
101.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中的。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备执行的步骤包括:响应于客户端发送的文件写入请求,根据预先为待写入文件配置的副本分布标签,控制由所述待写入文件切分得到的数据块写入数据节点;其中,所述副本分布标签包括跨机房分布标签,所述跨机房分布标签表征用于存储所述数据块的多个机房以及各机房存储的数据块副本的初始数量;对于具有所述跨机房分布标签的数据块,利用该数据块在任一机房的历史访问数据确定该数据块在该机房的期望副本数量,依据所述期望副本数量对该数据块在该机房的当前副本数量进行调整。
102.根据本发明实施例的技术方案,在多机房部署hdfs单集群,使用统一的名字节点管理多机房的数据节点,在名字节点设置标签管理单元用于在写入文件之前基于目录配置文件的副本分布标签,该标签可指示对应于业务需求的副本分布情况(即,将文件部署在一个还是多个机房以及每一机房的初始副本数量),写入文件时按照该标签进行副本复制即可实现副本分布的统一管理策略,解决了现有技术中存在的数据管理不统一的问题。进一步地,本发明实施例还提供了统一的各机房副本数量调整策略(由名字节点中的副本管理单元执行),即,针对具有跨机房分布标签的数据块,根据其在相应机房的历史访问数据来确定其在该机房期望副本数量从而进行调整,同时在上述调整策略中考虑到对主机房进行全时段的数据块兜底以及对非主机房进行预设时长内的数据块兜底,如此即可实现随访问热度改变的副本数量,避免数据冗余以及低利用率。另外,副本管理单元可以使用基于lru算法的管理队列来管理数据块,当数据块被写入或读取时,其标识即可写入该管理队列头部,尾部的较冷数据块可能会被移出,由此进一步提高数据利用率。此外,本发明实施例还可以在名字节点中设置补块单元,用于与副本管理单元协作执行跨机房的副本复制,在复
制过程中优选选取同一机房的数据节点作为源节点,在同一机房不存在所需节点时再考虑外部机房节点,由此节约跨机房带宽资源,提高系统执行效率;同时在复制时按照hdfs的校验策略进行校验,从而保证数据一致性,而单hdfs集群固有的多个数据节点与单名字节点之间基于心跳信号的通信机制与数据同步方式能够进一步确保数据一致性。最后,针对可能发生的数据节点下线或者异常数据块,本发明实施例还可以通过副本管理单元和补块单元进行及时修复,还可以在每一机房内执行负载均衡以确保机房内各数据节点的存储量均衡。
103.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献