具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据处理方法、装置和系统。以下分别进行详细说明。
实施例一、
本实施例将从客户端接口(Client)的角度进行描述。
一种数据处理方法,包括:获取文件名和数据片的编号,根据获取到的文件名和数据片的编号通过DHT算法计算出数据片的Key值,然后根据计算出的Key值确定数据节点(Datanodes),将数据片写入该数据节点,或从该数据节点中读取出数据片;其中,数据片由文件数据划分而成。
参见图1a,具体流程可以如下:
101、获取文件名和数据片的编号,其中,数据片由文件数据划分而成;
例如,获取方式具体可以如下:
(1)在需要写入数据片时,获取文件名以及数据片的编号的方式具体可以为:
创建文件,其中,该文件具有文件名;将需要写入该文件中的文件数据划分成数据片;对该数据片进行编号,得到数据片的编号。
此外,在创建文件时,还可以发送创建文件信息给命名节点(NameNode),以生成文件元数据,其中,该文件元数据包括文件名和文件大小,为了方便对文件的区分和管理,还可以为每个文件设置一个标识,称为文件标识,该文件标识可以保存在命名节点中,所以,该文件元数据还可以包括文件标识;当然,该文件元数据还可以包括文件创建时间、文件修改时间和/或该文件中各数据片的检验值,等等;命名节点可以返回生成的文件元数据给客户端接口,但是,为了节省信令流程,一般的,命名节点可以只返回文件标识给客户端接口,根据文件标识可以获取到该文件标识所对应的文件的其他文件元数据;也就是说,该数据处理方法还可以包括:
发送创建文件信息给命名节点,以生成文件元数据;接收命名节点返回的文件标识。
(2)在读取数据片时,获取文件的文件名以及数据片的编号的方式具体可以为:
发送打开文件信息给命名节点,该打开文件信息包括文件名;接收命名节点根据该打开文件信息返回的文件标识,根据该文件标识获取数据片的编号。
根据该文件标识还可以获取到该文件标识所对应的文件的其他文件元数。
需说明的是,本发明实施例所说的文件名指的是需要写入的文件或需要读取的文件的名称,文件数据则指的是需要写入文件的数据或需要从文件中读取的数据,即该文件的具体内容。该文件数据不同于文件元数据,文件元数据指的是文件的相关信息,比如文件标识、文件名和文件大小等等,当然,除此之外,文件元数据还可以包括文件创建时间、文件修改时间和/或该文件中各数据片的检验值,等等。
102、根据步骤101中获取到的文件名和数据片的编号通过DHT算法计算出数据片的Key值;
其中,Key值为[0,2m-1],m为32、64或128等等,m的具体取值可以依赖系统的规模而定。
例如,由于哈希(Hash)函数满足DHT算法的要求,所以具体可以根据步骤101中获取到的文件名和数据片的编号通过Hash函数来计算出数据片的Key值。
103、根据步骤102计算出的Key值确定数据节点;
需说明的是,每个数据节点自身也会生成一个Key值,以此来确定其存储范围,具体存储时,可以设置将所有位于数据节点之间的数据片保存在较小Key的数据节点上,也可以设置将所有位于数据节点之间的数据片保存在较大Key的数据节点上。
以设置将所有位于数据节点之间的数据片保存在较小Key的数据节点上为例,参见图1b,假设数据节点生成的Key值为实心圆点,即点A、点B和点C,数据片生成的为圆圈,即点1、点2、点3和点4。其中,点A为起始点,点C为终点,点A表示数据节点A,点B表示数据节点B,点C表示数据节点C。沿圆环顺时针,逐渐增大。由于点1处于[A,B],因此可以将点1保存在数据节点A上。同理,由于点2位于在[A,B],所以可以将点2保存在数据节点B上,而点3和点4则保存在数据节点C上。根据该算法,可以将所有的数据片能均匀分布在各个数据节点上。
104、将数据片写入步骤103确定的数据节点,或从步骤103确定的数据节点中读取出数据片。
如果在步骤101中接收到命名节点返回的文件标识;则步骤104具体可以为:
根据接收到的文件标识和数据片的编号写入数据片,或者,根据该文件标识和数据片的编号从数据节点中读取出数据片。
由上可知,本实施例采用根据文件名和数据片的编号,通过DHT算法计算出数据片的Key值,然后根据计算出的Key值来确定数据节点,以便进行数据的读取或写入,避免了现有技术中由命名节点来分配数据节点,所导致的命名节点的负担过重的问题,有利于提高系统的稳定性;而且,也避免了现有技术中分片文件系统对命名节点的依赖性过大所导致的分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例二、
本实施例将从数据节点的角度进行描述。
一种数据处理方法,包括:接收客户端接口写入的数据片;获取该数据片的冗余份数;根据冗余份数和预置的路由表,通过DHT算法将该数据片复制到其他数据节点上,其中,数据片由文件数据划分而成。
参见图2,具体流程可以如下:
201、接收客户端接口写入的数据片,其中,数据片由文件数据划分而成;
202、获取该写入的数据片的冗余份数;
203、根据冗余份数和预置的路由表,通过DHT算法将该写入的数据片复制到其他数据节点上。例如,具体可以如下:
根据预置的路由表,通过DHT算法确定本数据节点后X个其他数据节点为冗余数据节点;将该写入的数据片分别复制到确定的冗余数据节点中。
其中,X等于冗余份数与1的差值,冗余数据节点指的是用于保存冗余数据的数据节点,冗余数据指的是复制得到的数据片,比如,如果根据数据片的Key值确定需要将数据片1保存在数据节点A中,而数据片1的冗余份数为2,那么,可以将数据片1复制一遍,然后将复制的数据片1保存在数据节点A的后一个数据节点B中,则此时,复制的数据片1称为冗余数据,而数据节点B称为数据片1的冗余数据节点。
需说明的是,路由表具体可以保存在数据节点中,该路由表可以由维护人员按照预置策略直接进行设置和维护,也可以由分片文件系统通过获取网络拓扑结构而自行进行设置和维护,具体可参见现有技术中关于设置路由表的相关技术,在此不再赘述。
由上可知,本实施例在写入数据片以及对写入数据片进行冗余复制时,不需要将数据片的具体写入情况上报给命名节点,也不需要由命名节点来分配冗余数据节点,而是由数据节点自身根据冗余份数和预置的路由表,通过DHT算法来确定冗余数据节点,从而减轻了命名节点的负担,有利于提高系统的稳定性;而且,也减少了对命名节点的依赖性,避免了现有技术中分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例三、
在实施例二的基础上,进一步的,为了使得路由表能够实时且真实地反映当前系统状况,避免处理数据时出现错误,当分片文件系统中新增或删减数据节点时,还可以对保存的路由表进行更新和维护,即该数据处理方法还可以包括:
当分片文件系统中新增或删减数据节点时,在路由表中增加该新增数据节点的路由信息或删除该删减数据节点的路由信息,得到新路由表。
进一步的,当分片文件系统中的数据节点时,还需要对数据节点中的数据进行调整,例如,具体可以如下:
(1)新增数据节点
根据新路由表确定该新增数据节点的后一个数据节点;
通过DHT算法将该后一个数据节点中的部分非冗余数据转移到新增数据节点中,其中,非冗余数据指的是应保存在本数据节点上的数据片,即根据数据片的Key值所确定的数据节点来写入的数据片,比如,如果根据数据片的Key值确定需要将数据片1保存在数据节点A中,则数据片1称为数据节点A中的非冗余数据。
通过DHT算法将该后一个数据节点中的全部冗余数据转移到新增数据节点中,其中,冗余数据为其他数据节点复制到本数据节点上的数据片。
(2)删减数据节点
通过DHT算法将该删减数据节点复制到本数据节点上的数据片删除掉。比如,如果数据节点B将复制的数据片2(即数据片2的冗余数据)保存在数据节点A中,则当数据节点B被删除时,数据节点A也会相应地将该复制的数据片2删除。
根据冗余份数和新路由表,通过DHT算法重新将该数据片复制到其他数据节点上。由于数据节点被删除,导致该被删除数据节点上的数据均丢失,所以可能会导致各数据片的冗余份数发生变化,所以此时需要重新确认下当前数据片的存储位置是否合理,以及冗余份数是否正确。
由上可知,本实施例在数据节点发生变化时,不需要由命名节点来重新对数据节点上的数据进行调整,而是由数据节点自身进行调整,所以减轻了命名节点的负担,有利于提高系统的稳定性;而且,也减少了对命名节点的依赖性,避免了现有技术中分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例四、
根据前面实施例所描述的方法,以下将举例作进一步详细说明。
本发明实施例基于现有技术中分片文件系统的框架,做如下调整:
(1)命名节点
不再接收和保存数据节点上报的数据片信息,比如数据片的分布信息,等等。
不再为数据片分配数据节点。
(2)数据节点
不再需要定期向命名节点汇报数据片信息。
在冗余复制时,需要按照DHT算法来选择冗余数据节点,并将数据片复制到选择的冗余数据节点上。
增加路由表,用于找到其他的数据节点。
(3)客户端接口
不再依赖命名节点来定位数据片的存储位置,而是直接通过DHT算法如采用Hash函数来定位数据片的存储位置。
以下将分别从写入数据和读取数据两方面对该数据处理方法进行详细说明,参见图3和图4,其中,图3为写入数据的方法流程图,图4为读取数据的方法流程图,具体流程分别可以如下:
(一)写入数据
A401、客户端接口创建文件,该文件具有文件名,发送创建文件信息给命名节点。
A402、命名节点在接收到创建文件信息后,生成文件元数据,其中,该文件元数据包括文件标识、文件名和文件大小;当然,该文件元数据还可以包括文件创建时间、文件修改时间和/或该文件中各数据片的检验值,等等。
A403、命名节点发送文件标识给客户端接口,如果客户端接口可以根据该文件标识获取到该文件标识所对应的文件的其他文件元数据,比如文件大小、创建时间等等。
A404、客户端接口将需要写入该文件的文件数据切分成数据片,并对数据片进行编号,得到数据片的编号。
例如,将该文件数据切分为数据片1、数据片2、数据片3和数据片4,其中,数据片1的编号为001,数据片2的编号为002,数据片3的编号为003。
A405、客户端接口根据文件名和数据片的编号通过Hash函数计算出数据片的Key值。
其中,Key值为[0,2m-1],m为32、64或128等等,m的具体取值可以依赖系统的规模而定,具体可参见实施例一。
比如,参见图1b,客户端接口根据文件名和数据片1的编号001通过Hash函数,可以计算出数据片1的Key值为[A,B],数据片2的Key值为[B,C],等等。
A406、客户端接口根据步骤A405中计算得到的Key值确定数据节点。
比如,由于在步骤A405中计算数据片1的Key值为[A,B],所以确定数据片1所对应的数据节点为数据节点A,又比如,由于数据片2的Key值为[B,C],所以,所以确定数据片2所对应的数据节点为数据节点B,等等。
A407、客户端接口根据文件标识和数据片的编号将数据片写入数据节点,并校验客户端接口所写入的数据片,得到数据片的校验值。
例如,将数据片1写入数据节点A,将数据片2写入数据节点B,等等。
当然,在写入完毕后,数据节点也可以返回表示写入成功的响应给客户端接口。
A408、客户端接口通知命名节点数据片已写入成功,并将数据片的校验值发送给命名节点,命名节点保存该校验值。
A409、数据节点获取该写入的数据片的冗余份数X。
A410、数据节点根据冗余份数X和预置的路由表,通过Hash函数将该写入的数据片复制到其他数据节点上,具体为向本数据节点的下“X-1”个数据节点写入该写入的数据片,可选的,写入完毕后,这些数据节点可以返回写入成功的响应给本数据节点。
例如,以数据节点A为例,如果冗余份数为3的话,则数据节点A将数据片1复制到下两个数据节点中,即复制到数据节点B和数据节点C中,其它数据节点同此操作。
需说明的是,客户端接口可以逐一向数据节点写入数据片,也可以同时向数据节点写入多个数据片,如果是逐一向数据节点写入数据片的话,则可以循环执行步骤A405~A410,直至所有数据片写入完毕。
A411、客户端接口将需要写入的数据片全部写入到数据节点后,客户端接口请求命名节点关闭文件,命名节点可以返回关于关闭文件是否成功的响应给客户端,流程结束。
(二)读取数据
B401、客户端接口发送打开文件信息给命名节点,该打开文件信息包括文件名。
B402、命名节点根据该打开文件信息返回文件标识给客户端接口,客户端接口根据文件标识获取数据片的编号。
B403、客户端接口根据文件名和数据片的编号通过Hash函数计算出数据片的Key值。
其中,Key值为[0,2m-1],m为32、64或128等等,m的具体取值可以依赖系统的规模而定,具体可参见实施例一。
比如,参见图1b,客户端接口根据文件名和数据片1的编号001通过Hash函数,可以计算出数据片1的Key值为[A,B],数据片2的Key值为[B,C],等等。
B404、客户端接口根据步骤A403中计算得到的Key值确定数据节点。
比如,由于在步骤A403中计算数据片1的Key值为[A,B],所以确定数据片1所对应的数据节点为数据节点A,又比如,由于数据片2的Key值为[B,C],所以,所以确定数据片2所对应的数据节点为数据节点B,等等。
B405、客户端接口获取数据片的冗余份数X。
B406、客户端接口根据该确定的数据节点和冗余份数X,找到数据片相应的冗余数据节点,根据随机算法,在该确定的数据节点和冗余数据节点中挑选出一个数据节点,以读取数据片。
例如,以数据片1为例,根据步骤B404可以确定,数据片1所对应的数据节点为数据节点A,则如果在步骤B405中获取的冗余份数为2的话,在步骤B406中,客户端接口可以计算出冗余数据节点为数据节点A的下“2-1=1”个数据节点,即数据节点B。于是,客户端接口根据随机算法,在数据节点A和数据节点B中挑选出一个数据节点,假设该挑选出的数据节点为数据节点A的话,则客户端接口向数据节点A读取出数据片1。
B407、该挑选出的数据节点根据文件标识和数据片的编号查找数据片,并从命名节点中获取校验数值,与该查找到的数据片的校验数值进行比对,若一致,则确定该查找到的数据片正确,于是将该查找到的数据片发送给客户端接口;若不一致,则确定该查找到的数据片错误,于是重新根据文件标识和数据片的编号查找数据片,直至找到正确的数据片。
需说明的是,客户端接口可以从数据节点中逐一读取出数据片,也可以同时从数据节点中读取出多个数据片,如果是从数据节点逐一读取出数据片的话,则可以循环执行步骤B403~B407,直至所有数据片读取完毕。
B408、客户端接口读取完需要读取的数据片后,客户端接口请求命名节点关闭文件,命名节点可以返回关于关闭文件是否成功的响应给客户端,流程结束。
进一步的,当分片文件系统中的数据节点时,还需要对数据节点中的数据进行调整,例如,具体可以如下:
当分片文件系统中新增或删减数据节点时,数据节点需要在路由表中增加该新增数据节点的路由信息或删除该删减数据节点的路由信息,以得到新路由表。以下将对新增数据节点和删减数据节点分别进行说明。
(1)新增数据节点
首先,数据节点在路由表中增加该新增数据节点的路由信息,以得到新的路由表。
其次,数据节点根据新路由表确定该新增数据节点的后一个数据节点,然后,一方面通过DHT算法将该后一个数据节点中的部分非冗余数据转移到新增数据节点中;另一方面通过DHT算法将该后一个数据节点中的全部冗余数据转移到新增数据节点中。
(2)删减数据节点
首先,数据节点在路由表中删除该删减数据节点的路由信息,以得到新的路由表。
其次,如果该删减数据节点上所保存的数据片存在冗余数据的话,需要将存储在其他数据节点上的相应的冗余数据删除。比如,如果数据节点B将复制的数据片2(即数据片2的冗余数据)保存在数据节点A中,则当数据节点B被删除时,数据节点A也会相应地将该复制的数据片2删除。
由于数据节点被删除后,该被删除数据节点上的数据将会全部变成无效,所以可能会导致各数据片的冗余份数发生变化,因此,此时可以根据冗余份数和新路由表,通过DHT算法重新将该数据片复制到其他数据节点上,以保证分片文件系统中的冗余份数与实际的冗余分数能保持一致。
由上可知,本实施例采用根据文件名和数据片的编号,通过DHT算法计算出数据片的Key值,然后根据计算出的Key值来确定数据节点,以便进行数据的读取或写入,而且,在写入数据片以及对写入数据片进行冗余复制时,也可以通过DHT算法来确定冗余数据节点,而不需要由命名节点来分配冗余数据节点;进一步的,在数据节点发生变化时,也不需要由命名节点来重新对数据节点上的数据进行调整,而是由数据节点自身进行调整,避免了现有技术中由命名节点来分配数据节点、分配冗余数据节点以及调整数据节点等操作,所导致的命名节点的负担过重的问题,有利于提高系统的稳定性;而且,采用该方案也可以避免现有技术中分片文件系统对命名节点的依赖性过大所导致的分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例五、
为了更好地实施以上方法,本发明实施例还提供一种客户端接口,如图5a所示,客户端接口包括获取单元501、运算单元502、确定单元503和处理单元504;
获取单元501,用于获取文件名和数据片的编号,其中,数据片由文件数据划分而成;
运算单元502,用于根据获取单元501获取到的文件名和数据片的编号通过DHT算法计算出数据片的Key值;其中,Key值为[0,2m-1],m为32、64或128等等,m的具体取值可以依赖系统的规模而定;
确定单元503,用于根据运算单元502计算出的Key值确定数据节点;
需说明的是,每个数据节点自身也会生成一个Key值,以此来确定其存储范围,具体存储时,可以设置将所有位于数据节点之间的数据片保存在较小Key的数据节点上,也可以设置将所有位于数据节点之间的数据片保存在较大Key的数据节点上;
处理单元504,用于将数据片写入确定单元503所确定的数据节点,或从写入确定单元503所确定的数据节点中读取出数据片。
如图5b所示,在需要写入数据片时,获取单元501可以包括创建子单元A5011、划分子单元A5012和编号子单元A5013;
创建子单元A5011,用于发送创建文件信息给命名节点,以生成文件元数据;
划分子单元A5012,用于将需要写入创建子单元A5011所创建的文件中的文件数据划分成数据片;
编号子单元A5013,用于对划分子单元A5012划分得到的数据片进行编号,得到数据片的编号。
则,运算单元502,用于根据创建子单元A5011得到的文件名和编号子单元A5013得到的数据片的编号通过DHT算法计算出数据片的Key值。
如图5b所示,该客户端接口还可以包括发送单元505和接收单元506;
发送单元505,用于在创建子单元A5011创建文件时,发送创建文件信息给命名节点,以生成文件元数据,其中,文件元数据包括文件标识、文件名和文件大小;当然,该文件元数据还可以包括文件创建时间、文件修改时间和/或该文件中各数据片的检验值,等等;
接收单元506,用于接收命名节点返回的文件标识;
则处理单元504,具体用于根据接收单元506接收到的文件标识和编号子单元A5013得到的数据片的编号写入数据片。
如图5c所示,在读取数据片时,获取单元501可以包括打开子单元B5011、接收子单元B5012和编号获取子单元B5013;
打开子单元B5011,用于发送打开文件信息给命名节点;
接收子单元B5012,用于接收命名节点根据该打开文件信息返回的文件标识;
编号获取子单元B5013,用于根据接收子单元B5012接收到的文件标识获取数据片的编号;
则,运算单元502,用于根据文件名和编号获取子单元B5013得到的数据片的编号通过DHT算法计算出数据片的Key值;
处理单元504,具体用于根据接收子单元B5012接收到的文件标识和编号获取子单元B5013获取到的数据片的编号从数据节点中读取出数据片。
以上各个单元的具体实施可参见前面实施例,在此不再赘述。
由上可知,本实施例的客户端接口的运算单元502可以根据文件名和数据片的编号,通过DHT算法计算出数据片的Key值,然后由确定单元503根据计算出的Key值来确定数据节点,以便处理单元504进行数据的读取或写入,避免了现有技术中由命名节点来分配数据节点,所导致的命名节点的负担过重的问题,有利于提高系统的稳定性;而且,也避免了现有技术中分片文件系统对命名节点的依赖性过大所导致的分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例六、
相应地,本发明实施例还提供一种数据节点,如图6所示,该数据节点包括写入单元601、获取单元602和复制单元603;
写入单元601,用于接收客户端接口写入的数据片,其中,该数据片由文件数据划分而成;
获取单元602,用于获取写入单元601写入的数据片的冗余份数;
复制单元603,用于根据预置的路由表和获取单元602获取到的冗余份数,通过DHT算法将该数据片复制到其他数据节点上。
例如,具体可以根据预置的路由表,通过DHT算法确定本数据节点后X个其他数据节点为冗余数据节点;将该写入的数据片分别复制到确定的冗余数据节点中,其中,X等于冗余份数与1的差值。
路由表具体可以保存在数据节点中,该路由表可以由维护人员按照预置策略直接进行设置和维护,也可以由分片文件系统通过获取网络拓扑结构而自行进行设置和维护,具体可参见现有技术中关于设置路由表的相关技术,在此不再赘述。
该数据节点还可以包括路由表更新单元;
路由表更新单元,用于当分片文件系统中新增或删减数据节点时,在路由表中增加该新增数据节点的路由信息或删除该删减数据节点的路由信息,得到新路由表。
该数据节点还可以包括确定单元、第一调整单元和第二调整单元;
确定单元,用于根据路由表更新单元得到的新路由表确定该新增数据节点的后一个数据节点;
第一调整单元,用于通过DHT算法将确定单元确定的后一个数据节点中的部分非冗余数据转移到新增数据节点中,其中,非冗余数据为应保存在本数据节点上的数据片;
第二调整单元,用于通过DHT算法将确定单元确定的后一个数据节点中的全部冗余数据转移到新增数据节点中,其中,冗余数据为其他数据节点复制到本数据节点上的数据片。
该数据节点还可以包括删除单元;
删除单元,用于通过DHT算法删除该删减数据节点复制到本数据节点上的数据片。
由于数据节点被删除后,该被删除数据节点上的数据将会全部变成无效,所以可能会导致各数据片的冗余份数发生变化,因此,此时可以根据冗余份数和新路由表,通过DHT算法重新将该数据片复制到其他数据节点上,以保证分片文件系统中的冗余份数与实际的冗余分数能保持一致,即该数据节点还可以包括冗余更新单元;
冗余更新单元,用于通过冗余份数和路由表更新单元得到的新路由表,通过DHT算法重新将数据片复制到其他数据节点上。
以上各个单元的具体实施可参见前面实施例,在此不再赘述。
由上可知,本实施例的数据节点在写入数据片以及对写入数据片进行冗余复制时,不需要将数据片的具体写入情况上报给命名节点,也不需要由命名节点来分配冗余数据节点,而是由数据节点的复制单元603根据冗余份数和预置的路由表,通过DHT算法来确定冗余数据节点,从而减轻了命名节点的负担。另外,在数据节点发生变化时,也不需要由命名节点来重新对数据节点上的数据进行调整,而是由数据节点的第一调整单元、第二调整单元、删除单元或冗余更新单元来相应地进行调整,所以可以进一步减轻了命名节点的负担,有利于提高系统的稳定性;而且,由于采用本方案可以减少对命名节点的依赖性,所以可以避免现有技术中分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模。
实施例七、
相应的,本发明实施例还提供一种分片文件系统,该分片文件系统包括本发明实施例提供的任一种客户端接口和数据节点;
客户端接口,用于获取文件名以及数据片的编号,根据获取到的文件名和数据片的编号通过DHT算法计算出数据片的Key值,然后根据计算出的Key值确定数据节点,将数据片写入该数据节点,或从该数据节点中读取出数据片;其中,数据片由文件数据划分而成;Key值为[0,2m-1],m为32、64或128等等,m的具体取值可以依赖系统的规模而定;
数据节点,用于接收客户端接口写入的数据片;获取该数据片的冗余份数;根据冗余份数和预置的路由表,通过DHT算法将该数据片复制到其他数据节点上,其中,数据片由文件数据划分而成。该数据节点,还用于将保存的数据片发送给客户端接口。
其中,在需要写入数据片时,客户端接口,具体用于创建文件,该文件具有文件名,将需要写入该文件中的文件数据划分成数据片;对该数据片进行编号,得到数据片的编号。
进一步的,客户端接口,还用于发送创建文件信息给命名节点以生成文件元数据,其中,该文件元数据包括文件标识、文件名和文件大小;该文件元数据还可以包括文件创建时间、文件修改时间和/或该文件中各数据片的检验值,等等;接收命名节点返回的文件标识;根据数据片的编号和接收到的文件标识写入数据片。
在读取数据片时,客户端接口,具体用于发送打开文件信息给命名节点;接收命名节点根据该打开文件信息返回的文件标识,根据该文件标识获取数据片的编号,根据文件标识和数据片的编号从数据节点中读取出数据片。
该分片文件系统还可以包括命名节点;
在写入数据时,命名节点,用于接收客户端接口发送的创建文件信息,根据创建文件信息生成文件元数据;该命名节点,还用于返回文件标识给客户端接口。
在读取数据时,命名节点,用于接收客户端接口发送的打开文件信息,根据该打开文件信息返回的文件标识给客户端接口。
当分片文件系统中新增或删减数据节点时,数据节点还用于在路由表中增加该新增数据节点的路由信息或删除该删减数据节点的路由信息,以得到新路由表。
进一步的,当分片文件系统中的数据节点时,数据节点还用于对数据节点中的数据进行调整,具体可参见前面实施例,在此不再赘述。
以上各个设备具体可参见前面实施例,在此不再赘述。
由上可知,本实施例的分片文件系统的客户端接口可以根据文件名和数据片的编号,通过DHT算法计算出数据片的Key值,然后根据计算出的Key值来确定数据节点,以进行数据的读取或写入,而且,在写入数据片以及对写入数据片进行冗余复制时,也可以由数据节点通过DHT算法来确定冗余数据节点,而不需要由命名节点来分配冗余数据节点;进一步的,在数据节点发生变化时,也不需要由命名节点来重新对数据节点上的数据进行调整,而是由数据节点自身来进行调整,避免了现有技术中由命名节点来分配数据节点、分配冗余数据节点以及调整数据节点等操作,所导致的命名节点的负担过重、以及对系统影响较大等问题,有利于简化命名节点的功能,提高系统的稳定性;而且,采用该方案也可以避免现有技术中分片文件系统对命名节点的依赖性过大所导致的分片文件系统性能提高受到命名节点性能限制的问题,有利于提升分片文件系统的性能和规模的扩展。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
以上对本发明实施例所提供的数据处理方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。