买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】数据存储方法及装置_北京小米移动软件有限公司_201710891133.6 

申请/专利权人:北京小米移动软件有限公司

申请日:2017-09-27

公开(公告)日:2021-09-21

公开(公告)号:CN107657027B

主分类号:G06F16/185(20190101)

分类号:G06F16/185(20190101);G06F16/182(20190101)

优先权:

专利状态码:有效-授权

法律状态:2021.09.21#授权;2018.03.02#实质审查的生效;2018.02.02#公开

摘要:本公开是关于一种数据存储方法及装置。该方法应用于分布式文件系统中部署有命名节点的服务器中,分布式文件系统还包括客户端以及处于不同机房中的M个数据节点。该方法包括:接收客户端的数据块创建请求;根据数据节点的机房标识和状态信息以及客户端机房标识,确定可承载数据块副本的数据节点;创建数据块的数据块副本;向客户端发送数据块的属性信息,使得客户端根据属性信息写入文件。根据本公开的实施例,能够根据数据节点的状态及机房标识,确定可承载数据块副本的数据节点,创建数据块副本并向客户端发送数据块属性信息,以使客户端将文件写入到多个数据节点,实现多机房的数据存储,提高了分布式文件系统的可用性。

主权项:1.一种数据存储方法,其特征在于,所述方法应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,每个数据节点设有机房标识,所述方法包括:接收客户端的数据块创建请求;确定待存储的数据块可创建的数据块副本数量N;根据所述M个数据节点的状态信息,确定当前可用的数据节点列表;设置当前索引为客户端机房标识;在当前可用的数据节点列表中,根据当前索引对应的机房标识随机选择一个具有相同机房标识的数据节点,将选中的数据节点从当前可用的数据节点列表中移除,并将当前索引设置为下一个机房标识,返回执行根据当前索引对应的机房标识随机选择一个具有相同机房标识的数据节点,直至选出N个数据节点;其中,当具有可用数据节点的机房的数量小于N,则N个数据节点中部分数据节点的机房标识相同,且部分数据节点的机房标识不同,当具有可用数据节点的机房的数量大于或等于N,则选中的N个数据节点的机房标识均不相同;在所述N个数据节点中创建所述数据块的N个数据块副本;向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,其中,M、N为大于1的自然数,且M≥N。

全文数据:数据存储方法及装置技术领域[0001]本公开涉及计算机技术领域,尤其涉及一种数据存储方法及装置。背景技术[0002]随着互联网技术的不断发展,对于信息存储的需求越来越大,人们越来越多地采用分布式文件系统来存储数据。为了提高数据的可用性,通常会采用多机房架构,也即承载数据的服务器放在多个机房中,并且数据按照多副本的方式存放到多个机房的服务器上,当单个机房出现故障或者网络不通时,可以通过其他的机房访问需要的数据。[0003]在相关技术中,有的分布式文件系统采用一个主机房和多个备机房的方式,客户端将数据写到主机房中,并异步或同步写入到备机房中,然后才能返回给客户端。但该方式在机房间网络不通时,可能出现数据丢失或服务器不可用等情况,导致可用性较低。有的分布式文件系统采用多个副本分别存放到多个机房中,并用分布式协议选择一个主副本进行读写的方式,但该方式实现较为复杂,且在客户端与主副本所在的服务器之间网络不通时,客户端不可用,可用性较低。发明内容[0004]为克服相关技术中存在的问题,本公开提供一种数据存储方法。[0005]根据本公开实施例的第一方面,提供一种数据存储方法,所述方法应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,所述方法包括:[0006]接收客户端的数据块创建请求;[0007]根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;[0008]在所述N个数据节点中创建所述数据块的N个数据块副本;[0009]向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,[0010]其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,[0011]其中,M、N为大于1的自然数,且MSN。[0012]对于以上方法,在一种可能的实现方式中,所述方法还包括:[0013]当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迁移数据节点的机房标识与所述N个数据节点的机房标识不同匕[0014]当存在所述可迁移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迁移数据节点中。_[0015]对于以上方法,在一种可能的实现方式中,根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点,包括:[0016]根据所述M个数据节点的状态信息,确定当前可用的数据节点列表;[0017]根据所述M个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;[0018]将选中的N个数据节点确定为承载数据块副本的N个数据节点。[0019]对于以上方法,在一种可能的实现方式中,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。[0020]对于以上方法,在一种可能的实现方式中,所述N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。[0021]对于以上方法,在一种可能的实现方式中,所述N个数据节点的机房标识不同。[0022]根据本公开实施例的第二方面,提供一种数据存储方法,所述方法应用于分布式文件系统中部署有客户端的服务器中,所述分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,所述方法包括:[0023]在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;[0024]接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;[0025]将所述数据块确定为所述数据块列表中的可用数据块,[0026]其中,M、N为大于1的自然数,且M彡N。[0027]对于以上方法,在一种可能的实现方式中,所述方法还包括:[0028]当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性{目息;[0029]当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;[0030]向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。[0031]根据本公开实施例的第三方面,提供一种数据存储装置,所述装置应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,所述装置包括:[0032]请求接收模块,用于接收客户端的数据块创建请求;[0033]节点确定模块,用于根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;[0034]副本创建模块,用于在所述N个数据节点中创建所述数据块的N个数据块副本;[0035]发送模块,用于向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,[0036]其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,[0037]其中,M、N为大于1的自然数,且M彡N。[0038]对于以上装置,仕一WWHEH、」大视乃式中,所述装置还包括:[0039]检测模块,用于当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迁移数据节点的机房标识与所述N个数据节点的机房标识不同;[0040]迁移模块,用于当存在所述可迁移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迁移数据节点中。[0041]对于以上装置,在一种可能的实现方式中,所述装置还包括:[0042]第三发送模块,用于在所述数据块不可用时,向所述客户端发送数据块不可用信肩、。[0043]对于以上装置,在一种可能的实现方式中,所述节点确定模块包括:[0044]列表确定子模块,用于根据所述^^个数据节点的状态信息,确定当前可用的数据节点列表;[0045]节点选择子模块,用于根据所述1'1个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;[0046]节点确定子模块,用于将选中的N个数据节点确定为承载数据块副本的N个数据节点。[0047]对于以上装置,在一种可能的实现方式中,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。[0048]对于以上装置,在一种可能的实现方式中,所述N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。[0049]对于以上装置,在一种可能的实现方式中,所述N个数据节点的机房标识不同。[0050]根据本公开实施例的第四方面,提供一种数据存储装置,所述装置应用于分布式文件系统中部署有客户端的服务器中,所述分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,所述装置包括:[0051]请求发送模块,用于在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;[0052]信息接收模块,用于接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;[0053]确定模块,用于将所述数据块确定为所述数据块列表中的可用数据块,[0054]其中,M、N为大于1的自然数,且MSN。[0055]对于以上装置,在一种可能的实现方式中,所述装置还包括:[0056]信息获取模块,用于当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性信息;[0057]节点选择模块,用于当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;[0058]写入模块,用于向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。[0059]根据本公开实施例的第五方面,提供一种数据存储装置,包括:[0060]处理器;[0061]用于存储处理器可执行指令的存储器;[0062]其中,所述处理器被配置为执行上述方法。[0063]根据本公开实施例的第六方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得处理器能够执行上述数据存储方法。^[0064]根据本公开实施例的第七方面,提供一种数据存储装置,包括:[0065]处理器;[0066]用于存储处理器可执行指令的存储器;[0067]其中,所述处理器被配置为执行上述方法。[0068]根据本公开实施例的第八方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得处理器能够执行上述数据存储方法。7[0069]本公开的实施例提供的技术方案可以包括以下有益效果:在接收到客户端的数据块创建请求时,根据数据节点的状态信息及机房标识,确定可承载数据块副本的多个数据节点,创建数据块副本并向客户端发送数据块的属性信息,以使客户端将文件写入到多个数据节点中,从而实现多机房的数据存储,提高了分布式文件系统的可用性。[0070]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。附图说明[0071]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。[0072]图1是根据一示例性实施例^出的一种分布式文件系统的架构的示意图。[0073]图2是根据一示例性实施例^出的一种数据存储方法的流程图。[0074]图3是根据一示例性实施例示出的一种数据存储方法的步骤S22的流程图。[0075]图4a和图4b分别是根据一示例性实施例示出的一种数据存储方法的数据节点选择的不意图。[0076]图5是根据一示例性实施例示出的一种数据存储方法的流程图。[0077]图6是根据一示例性实施例示出的一种数据存储方法的数据块副本迁移的示意图。_[0078]图7是根据一示例性实施例^出的一种数据存储方法的流程图。[0079]图8是根据一示例性实施例f出的一种数据存储方法的流程图。[0080]图9是根据一示例性实施例示出的一种数据存储装置的框图。[0081]图10是根据一示例性实施例^出的一种数据存储装置的框图。[0082]图11是根据一示例性实施例^出的一种数据存储装置的框图。[0083]图12是根据一示例性实施例^出的一种数据存储装置的框图。[0084]图13是根据一示例性实施例示出的一种数据存储装置的框图。具体实施方式___[0085]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。[0086]图1是根据一示例性实施例示出的一种分布式文件系统的架构的示意图。分布式文件系统的构架中可以包括分别部署在服务器中的客户端Client、命名节点NameNode以及多个数据节点DataNode。[0087]其中,客户端可提供文件的读写接口。命名节点可存储分布式文件系统的元数据信息,接收并响应客户端和数据节点的数据请求等。数据节点可以按照数据块的方式存储文件以及相关的元数据信息。数据块按照多副本的方式存放在多个数据节点上,每个文件占用数据块的一部分。本公开对客户端、命名节点及数据节点数量,以及每个数据块的数据块副本个数等均不作具体限制。[0088]图2是根据一示例性实施例示出的一种数据存储方法的流程图。如图2所示,该方法用于应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点。根据本公开实施例的数据存储方法包括:[0089]在步骤S21中,接收客户端的数据块创建请求;[0090]在步骤S22中,根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;[0091]在步骤S23中,在所述N个数据节点中创建所述数据块的N个数据块副本;[0092]在步骤S24中,向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,[0093]其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,[0094]其中,M、N为大于1的自然数,且M彡N。[0095]根据本公开的实施例,通过在接收到客户端针对数据块的文件写入请求且该数据块可用时,向客户端发送包括有数据节点机房标识的数据块属性信息,以使客户端将文件写入到多机房的不同数据节点中,从而实现多机房的数据存储,提高了分布式文件系统的可用性。[0096]举例来说,分布式文件系统中的客户端以及多个数据节点可位于不同的机房中。可以为客户端以及每个数据节点增加机房标识(Idc-ID,用于表示客户端以及每个数据节点属于哪个机房。例如,可以在数据节点的信息结构体中手动配置机房标识Idc-ID项。这样,处于相同机房中的客户端以及数据节点具有相同的机房标识。[0097]在一种可能的实现方式中,客户端可在初始化时从命名节点中获取所有文件系统相关的元数据信息。当客户端需要向文件系统中写入文件时,可以从客户端本地的空闲数据块链表freeblocklist中选择可用的数据块。如果没有可用的数据块,则客户端$以向命名节点发出数据块创建请求。该数据块创建请求中包括客户端的机房标识,以表示该客户端所在的机房。[0098]在一种可能的实现方式中,命名节点在接收到客户端的数据块创建请求时,可以根据系统中的M个数据节点的机房标识和状态信息,确定M个数据节点中可承载数据块副本的N个数据节点。其中,M表示分布式文件系统中的数据节点的总数量,N表示每个数据块可创建的数据块副本数量,M、N为大于1的自然数,且MN。应当理解,数据块副本数量N可以根据实际需要进行设定,本公开对此不作限制。[0099]图3是根据一示例性实施例示出的一种数据存储方法的步骤S22的流程图。如图2所示,步骤S22可包括:[0100]在步骤S221中,根据所述M个数据节点的状态信息,确定当前可用的数据节点列表;[0101]在步骤S222中,根据所述M个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;[0102]在步骤S222中,将选中的N个数据节点确定为承载数据块副本的N个数据节点。[0103]举例来说,数据节点可以向命名节点发送自身的状态信息例如包括心跳信息、存储状态信息等)。命名节点可以根据数据节点的状态信息(心跳信息)判断数据节点的存活状态。例如,数据节点与命名节点的机房之间存在网络故障时,命名节点可能无法接收到数据节点的状态信息,则命名节点可认为该机房的数据节点均不可用。命名节点可以根据数据节点的状态信息存储状态信息判断数据节点是否能够创建数据块,如果数据节点的存储状态为剩余存储空间小于数据块所占用的存储空间,则该数据节点无法创建新的数据块,可以认为该数据节点不可用。[0104]在一种可能的实现方式中,命名节点可根据所有数据节点的状态信息,确定当前可用的数据节点列表。该列表可例如表示为一"二维数组idc_datanodes,数据节点可按照机房标识分组放在该二维数组中。并且,可将客户端的机房标识假设为1对应的一组数据节点放在最前面,在选择数据节点时设置从idcjndex索引)=1开始选择。下面对N个数据节点的选择过程进行说明。t〇1〇5]图4a和图4b分别是根据一示例性实施例示出的一种数据存储方法的数据节点选择的示意图。如图4a所示,当前可用的数据节点列表为两个机房机房标识为1和2中的7个数据节点数据节点41-47,数据块的数据块副本数量N=3。命名节点可以从7个数据节点中选择3个数据节点来承载数据块副本。[0106]在一种可能的实现方式中,N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。[0107]举例来说,在客户端所在的机房中存在一个或多个可用的数据节点数据节点与客户端的机房标识相同)时,可以选择客户端所在的机房中的至少一个可用数据节点来承载数据块副本。通过这种方式,客户端在写入文件时可以从该数据节点开始写文件,从而能够减少机房间的文件传输。[0108]如图4b所示,如果客户端的机房标识为1,则命名节点可以从idc_index索引)=1开始选择,先从机房1中随机选择一个数据节点例如数据节点41,将选中的数据节点加入到数据块的存储节点列表中,并从可用数据节点列表中移除。这样,己选中的数据节点不会再次被选择。[0109]在一种可能的实现方式中,命名节点可修改索引到下一组数据节点(idcjndex索引)=2,可从机房2中随机选择一个数据节点(例如数据节点47,将选中的数据节点加入到数据块的存储节点列表中,并从可用数据节点列表中移除。以此类推,直到选出N个数据节点例如图4b中,选出数据节点41、47、43,从而完成可承载数据块副本的N个数据节点的确定过程。[0110]在一种可能的实现方式中,当一组数据节点中已经没有可用数据节点时,可以将该组数据节点从二维数组(idc_datanodes中整个移除。如果选出的数据节点数量小于N且二维数组(idC_datan〇deS中己经没有可用的数据节点,则数据块创建失败,向客户端发送数据块创建失败信息。[0111]在一种可能的实现方式中,N个数据节点的机房标识不同。举例来说,命名节点依次从各个机房中选取数据节点,因此,如果具有可用数据节点的机房的数量小于数据块副本的数量N,(例如在图4a和图4b的两个机房中选择3个数据节点),则部分机房中可能选出多个数据节点存储数据块副本例如机房1中的数据节点41和43,也即,N个数据节点中部分数据节点的机房标识相同,且部分数据节点的机房标识不同。而如果具有可用数据节点的机房的数量大于或等于数据块副本的数量N,则选中的N个数据节点分别处于不同的机房中,也即N个数据节点的机房标识均不相同。通过这种方式,可以分别在不同的机房中存储数据块副本,保证在部分机房发生故障时数据可用,从而提高了分布式文件系统的可用性。[0112]在一种可能的实现方式中,可以将选中的N个数据节点确定为承载数据块副本的N个数据节点。在步骤S23中,命名节点可以在该N个数据节点中分别创建所述数据块的N个数据块副本。应当理解,可以采用本领域公知的方式创建N个数据块副本,并且数据块的大小可以根据实际需要进行设定例如512M,本公开对此不作限制。[0113]在一种可能的实现方式中,命名节点可以生成一个uuid作为数据块标识blockid,为键key,将数据块的位置信息(属性信息)(BlockAttribute作为值value,存储到数据块属性数据表BlockAttributeTable中。在步骤S24中,命名节点可以将数据块的属性信息BlockAttribute发送给客户端。该属性信息可包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识。[0114]在一种可能的实现方式中,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。[0115]如前所述,命名节点在选择数据节点时,可从与客户端机房标识相同的数据节点组中开始选择例如,从idcjndex索引)=1开始选择)。从而,数据块的属性信息中可以包括N个数据节点的列表,并且可使得机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置例如放置在列表的最上方)。在该情况下,客户端在写入数据时,可以直接从该预设位置选取待写入的数据节点(同机房的数据节点)。通过这种方式,能够在减少机房间的数据传输的同时,降低客户端写入数据过程的实现复杂度。[0116]在一种可能的实现方式中,根据该属性信息,客户端可以向N个数据节点中第一个数据节点发送数据写入请求WriteDataRequest,将本地文件以追加的方式写入到该数据节点的数据块副本中。其中,如果N个数据节点中至少一个数据节点的机房标识与客户端的机房标识相同,则可将该至少一个数据节点中的任一个作为第一个数据节点;如果N个数据节点中所有数据节点的机房标识均与客户端的机房标识不同,则可选择N个数据节点中的任一个作为第一个数据节点。[0117]该数据节点可以将数据写入请求WriteDataRequest链式地传输给其他数据节点也即,第一个数据节点向弟一个数据节点(例如,除第一个数据节点之外的N-i个数据节点中的任一个数据节点)发送数据写入请求,并将数据写入第二个数据节点;第二个数据节点向第三个数据节点发送数据写入请求,并将数据写入第三个数据节点…’•以此类推),从而完成N个数据节点的数据块副本的文件写入。[0118]在一种可能的实现方式中,在完成文件写入时,客户端可以根据策略判断数据块是否还可用。如果数据块可用,则将该数据块放入的空闲数据块链表freeblocklist中,以供再一次文件写入。并且,客户端可以根据数据块标识(blockid和数据块地址blockoffse组合生成文件标识fileid,并将该文件标识发送给命名节点并存储。[0119]在一种可能的实现方式中,当客户端需要向文件系统中写入文件时,可以从客户端本地的空闲数据块链表freeblocklist中选择可用的数据块。如果有可用的数据块,则客户端可以向存储有该数据块的副本的N个数据节点中的第一个数据节点发送数据写入请求,将本地文件以追加的方式写入到该数据节点的数据块副本中。该数据节点可以将数据写入请求WriteDataRequest链式地传输给其他数据节点,从而完成N个数据节点的数据块副本的文件写入。[0120]通过上述的方式,可以在多机房的多个数据节点创建数据块的多个数据块副本,从而实现多机房的数据存储,提高了分布式文件系统的可用性。当客户端需要进行针对数据块的文件读取时,可以选择存储有该数据块的副本的N个数据节点的中的一个进行读取,进一步提高了分布式文件系统的可用性。[0121]图5是根据一示例性实施例示出的一种数据存储方法的流程图。如图5所示,该方法还可包括:[0122]在步骤S25中,当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迁移数据节点的机房标识与所述N个数据节点的机房标识不同;[0123]在步骤S26中,当存在所述可迀移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迁移数据节点中。[0124]如前所述,如果具有可用数据节点的机房的数量小于数据块副本的数量N,(例如在图4a和图4b的两个机房中选择3个数据节点),则部分机房中可能选出多个数据节点存储数据块副本例如机房1中的数据节点41和43。在该情况下,命名节点可以检测是否存在可迁移数据节点。该可迁移数据节点的机房标识与所述N个数据节点的机房标识不同。[0125]举例来说,在一部分机房与命名节点所在的机房之间存在网络故障,或者一部分机房是在数据块创建后才接入分布式文件系统等情况下,命名节点在步骤S2^中确定当前可用的数据节点列表时,该部分的机房不在当前可用的数据节点列表中。当部分机房与命名节点之间的网络恢复,或部分机房接入分布式文件系统时,命名节点可检测到该部分机房中的数据节点的接入。_、[0126]在该情况下,命名节点可以将机房标识与所述N个数据节点的机房标识不同的数据节点确定为可迁移数据节点,并且可以将所述至少两个数据节点中的至少一个数据块副本迁移到可迁移数据节点中。例如,在图4的机房1中,数据节点41和43各存储有一个数据块副本。[0127]图6是根据一示例性实施例示出的一种数据存储方法的数据块副本迁移的示思图。如图6所示,当存在机房标识不同的数据节点接入例如机房3中的数据节点48-49时,可以将数据节点41或43中的数据块副本迁移到机房3的任一个数据节点例如数据节点48中。[0128]通过这种方式,可以将数据块的多个数据块副本分别存储在不同的机房中,保证在部分机房发生故障时数据可用,从而提高分布式文件系统的可用性。[0129]图7是根据一示例性实施例示出的一种数据存储方法的流程图。如图7所示,该方法应用于分布式文件系统中部署有客户端的服务器中,该分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,根据本公开实施例的数据存储方法包括:[0130]在步骤S71中,在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;[0131]在步骤S72中,接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;[0132]在步骤S73中,将所述数据块确定为所述数据块列表中的可用数据块,[0133]其中,M、N为大于1的自然数,且M彡N。[0134]根据本公开的实施例,通过在客户端本地列表中没有可用数据块时,向命名节点发送数据块创建请求,接收命名节点所创建数据块的属性信息(该属性信息包括承载数据块的N个数据节点的机房标识),并将该数据块确定为列表中的可用数据块,使得客户端能够根据机房标识进行文件写入,从而提高了分布式文件系统的可用性。[0135]在一种可能的实现方式中,当客户端需要向文件系统中写入文件时,可以从客户端本地的数据块列表例如空闲数据块链表中选择可用的数据块。如果数据块列表没有可用的数据块,则客户端可以向命名节点发送数据块创建请求。该数据块创建请求中包括客户端的机房标识,以表示该客户端所在的机房。命名节点在接收到客户端的数据块创建请求时,可以根据系统中的M个数据节点的机房标识和状态信息,确定M个数据节点中可承载数据块副本的N个数据节点,生成数据块的属性信息并向客户端发送该数据块的属性信息。该属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识。当客户端接收到该数据块的属性信息时,可将该数据块添加到数据块列表中,作为数据块列表中的可用数据块。[0136]图8是根据一示例性实施例示出的一种数据存储方法的流程图。如图8所示,在一种可能的实现方式中,所述方法还包括:[0137]在步骤S74中,当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性信息;[0138]在步骤S75中,当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;[0139]在步骤S76中,向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。[0140]在一种可能的实现方式中,如果客户端本地的数据块列表中有可用数据块,则客户端可以从本地读取该可用数据块的属性信息。如果承载该可用数据块的多个数据节点中存在与客户端的机房标识相同的一个或多个数据节点,则可以从该一个或多个数据节点中选择一个数据节点作为第一个数据节点。反之,如果承载该可用数据块的多个数据节点中不存在与客户端的机房标识相同的数据节点,则客户端可以从多个数据节点随机选择一个作为第一个数据节点。[0141]在该情况下,客户端可以向选中的数据节点发送数据写入请求,以便将文件写入到选中的数据节点的数据块副本中。[0142]应用示例[0143]以下结合“命名节点在3个数据节点中创建数据块副本”作为一个示例性应用场景,给出根据本公开实施例的应用示例,以便于理解数据存储方法的流程。本领域技术人员应理解,以下应用示例仅仅是出于便于理解本发明实施例的目的,不应视为对本发明实施例的限制。[0144]如图4a所示,在该应用示例中,当前可用的数据节点列表为两个机房机房标识为1和2中的7个数据节点数据节点41-47,数据块的数据块副本数量N=3。命名节点可以从7个数据节点中选择3个数据节点来承载数据块副本。[0145]在该应用示例中,客户端在机房1中,则命名节点可以从idcjndex索引)=1开始选择,先从机房1中随机选择一个数据节点例如数据节点41,将选中的数据节点加入到数据块的存储节点列表中,并从可用数据节点列表中移除。这样,已选中的数据节点不会再次被选择。[0146]在该应用示例中,命名节点可修改索引到下一组数据节点(idcjndex索引)=2,可从机房2中随机选择一个数据节点例如数据节点47,将选中的数据节点加入到数据块的存储节点列表中,并从可用数据节点列表中移除。以此类推,直到选出N个数据节点例如图4b中,选出数据节点41、47、43,从而完成可承载数据块副本的N个数据节点的确定过程。[0147]在该应用示例中,可以将选中的3个数据节点确定为承载数据块副本的3个数据节点。命名节点可以在该3个数据节点中分别创建所述数据块的3个数据块副本。命名节点可以生成一个uuid作为数据块标识blockid,为键key,将数据块的位置信息属性信息)BlockAttribute作为值value,存储到数据块属性数据表BlockAttributeTable中。命名节点可以将数据块的属性信息BlockAttribute发送给客户端。该属性信息可包括分别承载所述数据块的3个数据块副本的3个数据节点的机房标识。[0148]在该应用示例中,根据该属性信息,客户端可以向3个数据节点中第一个数据节点例如数据节点41发送数据写入请求将本地文件以追加的方式写入到该数据节点的数据块副本中。该数据节点41可以将数据写入请求WriteDataRequest链式地传输给其他数据节点47和4:3,从而完成3个数据节点的数据块副本的文件写入。当客户端需要进行文件读取时,可以随机选择数据节点41、47及43中的一个进行读取,进一步提高分布式文件系统的可用性。[0149]在该应用示例中,如图6所示,如果存在机房标识不同的数据节点接入例如机房3中的数据节点4S-49,则命名节点可以将数据节点43中的数据块副本迁移到机房3的任一个数据节点例如数据节点4¾中。这样,可以将数据块的多个数据块副本分别存储在不同的机房中,保证在部分机房发生故障时数据可用,提高分布式文件系统的可用性。[0150]根据本公开的实施例,在接收到客户端的数据块创建请求时,根据数据节点的状态信息及机房标识,确定可承载数据块副本的多个数据节点,创建数据块副本并向客户端发送数据块的属性信息,以使客户端将文件写入到多个数据节点中,从而实现多机房的数据存储,提高了分布式文件系统的可用性。[0151]图9是根据一示例性实施例示出的一种数据存储装置的框图。参照图9,该装置应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,该装置包括请求接收模块71、节点确定模块72、副本创建模块73以及发送模块74。[0152]请求接收模块71,被配置为接收客户端的数据块创建请求;[0153]节点确定模块72,被配置为根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;[0154]副本创建模块73,被配置为在所述N个数据节点中创建所述数据块的N个数据块副本;[0155]发送模块74,被配置为向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,[0156]其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,[0157]其中,M、N为大于1的自然数,且MSN。[0158]图10是根据一示例性实施例示出的一种数据存储装置的框图。参照图1〇,在一种可能的实现方式中,该装置还包括:[0159]检测模块75,用于当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迁移数据节点的机房标识与所述N个数据节点的机房标识不同;[0160]迁移模块76,用于当存在所述可迁移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迀移数据节点中。[0161]参照图10,在一种可能的实现方式中,所述节点确定模块72包括:[0162]列表确定子模块721,用于根据所述M个数据节点的状态信息,确定当前可用的数据节点列表;[0163]节点选择子模块722,用于根据所述M个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;[0164]节点确定子模块723,用于将选中的N个数据节点确定为承载数据块副本的N个数据节点。[0165]在一种可能的实现方式中,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。_[0166]在一种可能的实现方式中,所述N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。[0167]在一种可能的实现方式中,所述N个数据节点的机房标识不同。[0168]关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。[0169]图11是根据一示例性实施例示出的一种数据存储装置的框图。参照图11,该装置应用于分布式文件系统中部署有客户端的服务器中,所述分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,所述装置包括:[0170]请求发送模块91,用于在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;[0171]信息接收模块92,用于接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;[0172]确定模块93,用于将所述数据块确定为所述数据块列表中的可用数据块,[0173]其中,M、N为大于1的自然数,且M彡N。[0174]图12是根据一示例性实施例示出的一种数据存储装置的框图。参照图12,在一种可能的实现方式中,所述装置还包括:[0175]信息获取模块94,用于当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性信息;[0176]节点选择模块95,用于当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;[0177]写入模块96,用于向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。[0178]关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。[0179]图13是根据一示例性实施例示出的一种数据存储装置1900的框图。例如,装置1900可以被提供为一服务器。参照图13,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。[0180]装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(IO接口I%8。装置1900可以操作基于存储在存储器1932的操作系统,例如WindowsSerVerTM,MaC[0181]在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1932,上述指令可由装置1900的处理组件1922执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器RAM、CD-R0M、磁带、软盘和光数据存储设备等。[0182]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。[0183]应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

权利要求:1.一种数据存储方法,其特征在于,所述方法应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,所述方法包括:接收客户端的数据块创建请求;根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;在所述N个数据节点中创建所述数据块的N个数据块副本;向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,其中,M、N为大于1的自然数,且MSN。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迁移数据节点的机房标识与所述N个数据节点的机房标识不同l当存在所述可迁移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迁移数据节点中。3.根据权利要求1所述的方法,其特征在于,根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点,包括:根据所述M个数据节点的状态信息,确定当前可用的数据节点列表;根据所述M个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;将选中的N个数据节点确定为承载数据块副本的N个数据节点。4.根据权利要求1所述的方法,其特征在于,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。5.根据权利要求1所述的方法,其特征在于,所述N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。6.根据权利要求1所述的方法,其特征在于,所述N个数据节点的机房标识不同。7.—种数据存储方法,其特征在于,所述方法应用于分布式文件系统中部署有客户端的服务器中,所述分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,所述方法包括:在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;将所述数据块确定为所述数据块列表中的可用数据块,其中,M、N为大于1的自然数,且M彡N。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性息;_当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。9.一种数据存储装置,其特征在于,所述装置应用于分布式文件系统中部署有命名节点的服务器中,所述分布式文件系统还包括客户端以及处于不同机房中的M个数据节点,所述装置包括:请求接收模块,用于接收客户端的数据块创建请求;节点确定模块,用于根据M个数据节点的机房标识、M个数据节点的状态信息以及所述数据块创建请求中的客户端机房标识,确定M个数据节点中可承载数据块副本的N个数据节点;副本创建模块,用于在所述N个数据节点中创建所述数据块的N个数据块副本;发送模块,用于向所述客户端发送所述数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识,其中,所述属性信息用于使得所述客户端根据所述属性信息将文件写入到N个数据块副本中,其中,M、N为大于1的自然数,且M多N。10.根据权利要求9所述的装置,其特征在于,所述装置还包括:检测模块,用于当所述N个数据节点中至少两个数据节点的机房标识相同时,检测是否存在可迁移数据节点,其中,所述可迀移数据节点的机房标识与所述N个数据节点的机房标识不同;迀移模块,用于当存在所述可迁移数据节点时,将所述至少两个数据节点中的至少一个数据块副本迁移到所述可迁移数据节点中。11.根据权利要求9所述的装置,其特征在于,所述节点确定模块包括:列表确定子模块,用于根据所述1个数据节点的状态信息,确定当前可用的数据节点列节点选择子模块,用于根据所述^^个数据节点的机房标识,从所述数据节点列表中选择N个数据节点;节点确定子模块,用于将选中的N个数据节点确定为承载数据块副本的N个数据节点。12.根据权利要求9所述的装置,其特征在于,所述属性信息中包括N个数据节点的列表,其中,机房标识与所述客户端机房标识相同的数据节点中的一个数据节点处于所述列表中的预设位置。13.根据权利要求9所述的装置,其特征在于,所述N个数据节点中的至少一个数据节点的机房标识与所述客户端机房标识相同。—14.根据权利要求9所述的装置,其特征在于,所述N个数据节点的机房标识不同。15.—种数据存储装置,其特征在于,所述装置应用于分布式文件系统中部署有客户端的服务器中,所述分布式文件系统还包括命名节点以及处于不同机房中的M个数据节点,所述15*;?送模块,用于在所述客户端本地的数据块列表中没有可用数据块时,向所述命名节点发送数据块创建请求,所述数据块创建请求中包括所述客户端的机房标识;信息接收模块,用于接收所述命名节点所创建数据块的属性信息,所述属性信息包括分别承载所述数据块的N个数据块副本的N个数据节点的机房标识;确定模块,用于将所述数据块确定为所述数据块列表中的可用数据块,其中,M、N为大于1的自然数,且M彡N。16.根据权利要求15所述的装置,其特征在于,所述装置还包括:信息获取模块,用于当所述客户端本地的数据块列表中有可用数据块时,获取所述可用数据块的属性信息;节点选择模块,用于当所述属性信息中N个数据节点的一个或多个数据节点的机房标识与客户端的机房标识相同时,从所述一个或多个数据节点中选择一个数据节点;写入模块,用于向选中的数据节点发送数据写入请求,以将文件写入到所述选中的数据节点的数据块副本中。17.—种数据存储装置,其特征在于,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行根据权利要求1-6中任意一项所述的方法。18.—种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得处理器能够执行根据权利要求1-6中任意一项所述的方法。19.一种数据存储装置,其特征在于,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行根据权利要求7或8所述的方法。20.—种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得处理器能够执行根据权利要求7或8所述的方法。

百度查询: 北京小米移动软件有限公司 数据存储方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。