《一种数据获取方法和分布式文件系统.pdf》由会员分享,可在线阅读,更多相关《一种数据获取方法和分布式文件系统.pdf(13页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102955808 A(43)申请公布日 2013.03.06CN102955808A*CN102955808A*(21)申请号 201110248594.4(22)申请日 2011.08.26G06F 17/30(2006.01)(71)申请人腾讯科技(深圳)有限公司地址 518057 广东省深圳市福田区振兴路赛格科技园2栋东403室(72)发明人史晓峰 蔡斌 张文郁 宫振飞崔小丰 韩欣 肖桂菊 邱翔虎崔晓春(74)专利代理机构广州三环专利代理有限公司 44202代理人郝传鑫 熊永强(54) 发明名称一种数据获取方法和分布式文件系统(57) 摘要本发明实施例公开了一。
2、种数据获取方法和分布式文件系统,所述方法包括:获取待访问文件的文件目录,并获取预定义的根节点的节点值;根据所述根节点的节点值的散列值获取所述根节点的区块信息;当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。采用本发明,可解决HDFS中的单点问题,提高HDFS集群任务的并发处理能力。(51)Int.Cl.权利要求书2页 。
3、说明书7页 附图3页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书 2 页 说明书 7 页 附图 3 页1/2页21.一种分布式文件系统中的数据获取方法,其特征在于,所述方法包括:获取待访问文件的文件目录,并获取预定义的根节点的节点值;根据所述根节点的节点值的散列值获取所述根节点的区块信息,所述区块中存储有文件,或/和文件夹中的文件列表及所述文件列表中的文件对应的节点值;当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的。
4、文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。2.如权利要求1所述的方法,其特征在于,所述根据所述根节点的节点值的散列值获取所述根节点的区块信息包括:根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器;根据所述根节点的节点值在所述服务器中获取所述节点值对应的节点信息;根据所述节点值对应的节点信息获取所述根节点的区块信息。3.如权利要求2所述的方法,其特征在于,所述根节点或其他节点的区块信息中包括多个区块的信息。4.如权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:在所述分布式系统中划分。
5、多个数据区域,节点值通过散列算法与所述数据区域对应;所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器相应为,所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。5.如权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:缓存所述数据文件的各级节点值。6.一种分布式文件系统,其特征在于,所述系统包括:目录获取单元,用于获取待访问文件的文件目录,并获取预定义的根节点的节点值;区块获取单元,用于根据所述根节点的节点值的散列值获取所述根节点的区块信息,所述区块中存储有文件,或/和文件夹中的文件列表及所述文件列表中的文件对应的节点值。
6、;文件获取单元,用于当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。7.如权利要求6所述的系统,其特征在于,所述区块获取单元包括:服务器定位子单元,用于根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器;节点信息获取子单元,用于根据所述根节点的节点值在所述服务器中获取所述节点值对应的节点信息;权 利。
7、 要 求 书CN 102955808 A2/2页3区块信息获取子单元,用于根据所述节点值对应的节点信息获取所述根节点的区块信息。8.如权利要求7所述的系统,其特征在于,所述区块获取单元获取的根节点或其他节点的区块信息中包括多个区块的信息。9.如权利要求7至8中任一项所述的系统,其特征在于,所述系统还包括划分单元,用于在所述分布式系统中划分多个数据区域,节点值通过散列算法与所述数据区域对应;所述服务器定位子单元还用于所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。10.如权利要求6至8中任一项所述的方法,其特征在于,所述系统还包括缓存单元,用于缓存所述数。
8、据文件的各级节点值。权 利 要 求 书CN 102955808 A1/7页4一种数据获取方法和分布式文件系统技术领域0001 本发明涉及一种分布式数据处理领域,尤其涉及一种数据获取方法和分布式文件系统。背景技术0002 Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是一种适合运行在通用硬件(commodity hardware)上的分布式文件系统。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。HDFS的架构是基于一组特定的节点构。
9、建的,这些节点包括NameNode(仅一个),其在HDFS 内部提供元数据服务;DataNode,其为 HDFS 提供存储块。0003 其中,NameNode 是一个通常在HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。 NameNode在一个文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件将存储在 NameNode 的本地文件系统上。0004。
10、 由于仅存在一个 NameNode,在基于C/S(客户/服务器)架构的设计中只有一台Namenode机器就造成了Namenode的单点问题,这成为了HDFS 的一个缺点。发明内容0005 本发明实施例所要解决的技术问题在于,提供一种数据获取方法和分布式文件系统。可解决HDFS中的单点问题,提高HDFS集群任务的并发处理能力。0006 为了解决上述技术问题,本发明实施例提供了一种分布式文件系统中的数据获取方法,所述方法包括:获取待访问文件的文件目录,并获取预定义的根节点的节点值;根据所述根节点的节点值的散列值获取所述根节点的区块信息,所述区块中存储有文件,或/和文件夹中的文件列表及所述文件列表中。
11、的文件对应的节点值;当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。0007 其中,所述根据所述根节点的节点值的散列值获取所述根节点的区块信息包括:根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器;根据所述根节点的节点值在所述服务器中获取所述节点值对应的节点信息;说 明 书CN 102955808。
12、 A2/7页5根据所述节点值对应的节点信息获取所述根节点的区块信息。0008 所述根节点或其他节点的区块信息中包括多个区块的信息。0009 所述方法还包括:在所述分布式系统中划分多个数据区域,节点值通过散列算法与所述数据区域对应;所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器相应为,所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。0010 所述方法还包括:缓存所述数据文件的各级节点值。0011 相应的,本发明实施例还提供了一种分布式文件系统,包括:目录获取单元,用于获取待访问文件的文件目录,并获取预定义的根节点的节点值;区块。
13、获取单元,用于根据所述根节点的节点值的散列值获取所述根节点的区块信息,所述区块中存储有文件,或/和文件夹中的文件列表及所述文件列表中的文件对应的节点值;文件获取单元,用于当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。0012 其中,所述区块获取单元包括:服务器定位子单元,用于根据所述根节点的节点值的散列值确定存储所述。
14、节点值对应的节点信息的服务器;节点信息获取子单元,用于根据所述根节点的节点值在所述服务器中获取所述节点值对应的节点信息;区块信息获取子单元,用于根据所述节点值对应的节点信息获取所述根节点的区块信息。0013 所述区块获取单元获取的根节点或其他节点的区块信息中包括多个区块的信息。0014 所述系统还包括划分单元,用于在所述分布式系统中划分多个数据区域,节点值通过散列算法与所述数据区域对应;所述服务器定位子单元还用于所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。0015 所述系统还包括缓存单元,用于缓存所述数据文件的各级节点值。0016 实施本发明实施例。
15、,具有如下有益效果:由于将整个目录树分布式的存储在不同的区块,并利用节点值来指向这些区块,实现了目录树结构的分散存储,利用散列算法有效的解决了namenode单点故障和瓶颈问题。附图说明0017 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可说 明 书CN 102955808 A3/7页6以根据这些附图获得其他的附图。0018 图1是本发明实施例中的目录树的一个组成示意图;图2是本发明实施例中的分布式文件系统中的数。
16、据获取方法的一个具体流程示意图;图3是本发明实施例中的分布式文件系统中的数据获取方法的另一个具体流程示意图;图4是本发明实施例中的分布式文件系统的一个具体组成示意图;图5是图4中的区块获取单元的一个具体组成示意图。具体实施方式0019 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。0020 在本发明中定义两个概念,节点值(inodenum)和区块(block),只要知道inodenu。
17、m就可以迅速定位节点(inode)信息(即inode数据信息),继而通过inode定位到block以读取文件或文件夹内容。block的文件中存储数据块信息,文件夹做为特殊文件,在其中存储了其子目录的所有文件列表和文件列表中的文件的inodenum,这样就可以通过文件目录逐级找到需要访问的数据文件,也可以迅速在内存中还原构建出个目录树,如图1所示。0021 一般,根目录是需要做特殊处理的,其inodenum可以在全局配置信息中进行指定,或者预定义inodenum=0的文件存储的就是根目录数据。即,在本发明的解决方案中定义,1)inodenum,作为定位文件的索引;2)block(为文件或文件夹)。
18、,存储有目录列表、数据块信息(在每台机器内存中存储block);3)数据块(datablock)为存储文件数据的载体。对于block,当inodenum指向的为文件夹时,block存储的数据格式如下:文件名,文件类型,inodenum;当inodenum指向的数据为文件时,block存储的数据格式如下:数据DataBlock的blockID列表和位置信息。以下从数据获取的角度进一步说明本发明的上述架构。0022 如图2所示,为本发明实施例中的分布式文件系统中的数据获取方法的一个具体流程示意图,所述方法包括如下步骤。0023 201、获取待访问文件的文件目录,并获取预定义的根节点的节点值。所述存。
19、储文件目录至少包括根目录,当然除了根目录还可进一步包括一级目录、二级目录等等。0024 202、根据所述根节点的节点值的散列值获取所述根节点的区块(block)信息,所述区块中存储有文件,或/和文件夹中的文件列表及所述文件列表中的文件对应的节点值。其中,可以先根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器;再根据所述根节点的节点值在所述服务器中获取所述节点值对应的节点信息;最后根据所述节点值对应的节点信息获取所述根节点的区块信息。0025 同时,所述根节点(或还包括其他各级节点)的区块信息中可包括多个区块的信息。即如图1所示,一个节点处可以有多个区块。0026 在分布式。
20、文件系统中可以预先在所述分布式系统中划分多个数据区域,节点值通过散列算法与所述数据区域对应,相应的上述的根据所述根节点的节点值的散列值确定存说 明 书CN 102955808 A4/7页7储所述节点值对应的节点信息的服务器则为,所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。0027 203、当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级。
21、节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。0028 如前所述,根节点或其他各级节点的节点值指向区块,若区块中包括的是文件,则表明文件目录中所指定的文件就在区块的文件中指明的数据块中。此时只要从区块的文件中对应去获取数据文件就可以了;若区块中包括的是文件夹,则表明此时还未查找到文件目录的最后一级,还需要根据文件夹及文件目录当前的目录级获取节点值,再到下一区块去查找文件。该过程可以反复的执行,直到最终查找到文件。通常来说,根节点一般对应的是文件夹,因而在本发明实施例中,在查找到根节点后还需要获得对应文件的节点值来去下一个block获取文件或文件夹,后续会有具体的实施例进行描述。
22、。0029 如图3所示,表明了上述的循环查找并获取的过程。该过程包括如下步骤。0030 301、获取待访问文件的文件目录和该文件目录中的根节点的预定义inodenum值。0031 302、根据此inodenum值的散列值确定inode信息位于所述分布式文件系统中的服务器。0032 303、找到存储该inode信息所在的服务器后,在该服务器通过此inodenum定位到inode信息,读取这个inode节点对应的block信息,该inode节点对应的block可能有多个。0033 304、如果该inodenum对应的是普通文件,那这些block中存储的就是文件内容,转步骤305;如果该inoden。
23、um对应的是目录(即文件夹),那这些block中存储该文件夹下的文件列表以及各文件列表中的文件对应的inodenum,转步骤306305、如果该inodenum对应的是文件而且是用户需要访问的文件,则根据所述block的文件中的存储块列表和存储块存储的位置信息获取所述数据文件。0034 306、如果该inodenum对应的是文件夹,通过读取block内容得到该inodenum对应文件夹下的所有文件的文件名以及每个文件的inodenum。0035 307、从文件夹中找到文件目录中的下一级目录(即下一级节点)的inodenum值。重复302307过程,直到找到需要访问的文件为止。0036 若在上述。
24、方法中还可以进一步包括预先的数据区域划分和其与节点值之间的索引对应,则可按下述方式进行分区:首先将数据分区,采用的是一致性hash的办法,即将inodenum通过散列算法,散列到0232的空间中,假如有A,B,C,D,E共5台机器作为master。则定义A机存储0232/5范围的数据;B机存储232/5 232/5 *2 的数据;C机存储232/5 *2 232/5 *3的数据;D机存储232/5 *3 232/5 *4的数据;E机存储232/5 *4 232的数据。0037 同时,可在获取所述数据文件时,缓存所述数据文件的存储文件目录中的各级目录对应的节点值。这样对于一些比较深的文件夹,可以。
25、大大提高效率。说 明 书CN 102955808 A5/7页80038 实施本发明实施例,由于将整个目录树分布式的存储在不同的存储位置,并利用节点值来指向这些存储位置,实现了目录树结构的分散存储,利用散列算法有效的解决了namenode单点故障和瓶颈问题。0039 以下以两个具体的存储文件目录还说明如何进行数据文件的获取。如,目录分别为/testdata2,/test1/data1,/test1/data2。其中,目录/testdata2中的第一个“/”代表根目录,“/testdata2”代表下一级目录,由于/testdata2即为文件的整个目录,可知目录/testdata2对应为文件,目录/。
26、test1/data1中的第一个“/”代表根目录,/test1/代表下一目录,/test1/data1则是下下级目录,由于/test1/data1为文件的整个目录,可知目录/test1/data1对应为文件。0040 1、对于读取/testdata2文件数据的情况描述如下。0041 a)获取inodenum=0(即根目录可以直接规定inodenum=0),假设0经过hash后找到根目录所在机器为B。0042 b)将查询inodenum=0的请求发送到B机,B机通过该inodenum迅速定位到根文件夹的block,对应图2的流程即找到了根目录的区块。0043 c)由于inodenum=0指向根目。
27、录“/”,本例中根目录的block存储有根目录文件列表(此时列表中有test1、testdata2,其中,test1为目录,testdata2为文件),则说明本例中inodenum=0指向的为文件夹,因此,需要获得下一级目录/testdata2的inodenum,假设本例中根目录的block中存储了下一级目录/testdata2对应的inodenum=4。0044 d)通过inodenum=4进行hash得到/testdata2的存储位置为E机。0045 e)将查询inodenum=4的请求发送到E机,E机通过该inodenum迅速定位到block,该block中存储有文件/testdata2。
28、,由于/testdata2对应的是文件,因而此时可从其对应的文件中获得存储的datablockID列表和位置(location)信息。0046 f)通过datablockID列表和location信息,依次到相应的机器读取datablock数据。0047 2、对于较深目录文件/test1/data1文件的读取。 0048 a)获取inodenum=0(即根目录可以直接规定inodenum=0),假设0经过hash后找到根目录所在机器为B。0049 b)将查询inodenum=0的请求发送到B机,B机通过inodenum迅速定位到根文件夹的block。0050 c)从block中可以读取根目录文。
29、件列表,其中存储有文件夹/test1/及其对应的inodenum,假设/test1/这个文件夹的inodenum=8。0051 d)根据inodenum=8进行hash得到存储位置为C机,将inodenum=8的请求发送到C机,从C机通过inodenum=8迅速定位到/test1/的文件夹的block。0052 e)从该block中可以读取/test1/的目录文件列表(此时列表中有两个文件,即data1和data2),此时,找到data1对应的inodenum=10。0053 f)根据inodenum=10进行hash得到存储位置为D机,将inodenum=10的请求发送到D机,从D机通过in。
30、odenum=10迅速定位到/test1/data1的block,该block中存储有文件data1,由于data1对应的是文件,因而此时可从其对应的文件中获得存储的datablockID列表和位置location信息。说 明 书CN 102955808 A6/7页90054 g)通过datablockID列表和location信息,依次到相应的机器读取datablock数据。0055 同理可以根据目录/test1/data2获得文件data2的数据。0056 至于在HDFS文件上传流程中一个datablock上传完成后,datanode需要将这个datablock的ID上报给某台nameno。
31、de机器,用以通知namenode在不同的datanode上分别存储哪些datablock,这样我们就需要在datablock中加入inodenum信息,一方面表示这个datablock数据块属于哪个文件,另一方面可以通过这个inodenum,经过hash和路由选择就知道这个datablockid该上报给哪台namenode机器。0057 相应的,本发明实施例中还提供了一种分布式文件系统,如图4所示,所述系统包括:目录获取单元40,用于获取待访问文件的文件目录,并获取预定义的根节点的节点值;区块获取单元42,用于根据所述根节点的节点值的散列值获取所述根节点的区块信息,所述区块中存储有文件,或/。
32、和文件夹中的文件列表及所述文件列表中的文件对应的节点值;文件获取单元44,用于当所述根节点的节点值对应所述区块中的文件时,根据所述区块中存储的块列表和块列表位置信息获取数据文件;当所述根节点的节点值对应所述区块中的文件夹时,根据所述文件目录从所述区块中存储的文件列表和所述文件列表中的文件对应的节点值中获取下一级节点的节点值,再根据所述下一级节点的节点值获取所述下一级节点的区块信息,直至最终获取数据文件。0058 其中,如图5所示,区块获取单元42可包括:服务器定位子单元420,用于根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的服务器;节点信息获取子单元422,用于根据所述根节。
33、点的节点值在所述服务器中获取所述节点值对应的节点信息;区块信息获取子单元424,用于根据所述节点值对应的节点信息获取所述根节点的区块信息。0059 其中,在一些具体实施例中,区块获取单元42获取的根节点或其他节点的区块信息中包括多个区块的信息。0060 同时,类似前述方法中记载的方案,若将整个分布式系统进行划分,则所述系统还包括划分单元(图中未示),用于在所述分布式系统中划分多个数据区域,节点值通过散列算法与所述数据区域对应;相应的,所述服务器定位子单元420还用于所述根据所述根节点的节点值的散列值确定存储所述节点值对应的节点信息的数据区域所在的服务器。同时,为了提高系统的处理消息,所述系统还。
34、包括缓存单元(图中未示),用于缓存所述数据文件的各级节点值。0061 在本系统实施例中的相关术语和具体功能与前述方法实施例中的一致,其具体细节不做一一赘述。0062 实施本发明实施例,由于将整个目录树分布式的存储在不同的存储位置,并利用节点值来指向这些存储位置,实现了目录树结构的分散存储,利用散列算法有效的解决了namenode单点故障和瓶颈问题。0063 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access 说 明 书CN 102955808 A7/7页10Memory,RAM)等。0064 以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。说 明 书CN 102955808 A10。