一种基于分布式文件系统的数据处理方法及装置
技术领域
本发明涉及数据处理技术领域,特别涉及一种基于分布式文件系统的数据处理方法及装置。
背景技术
以移动互联网技术、人工智能技术和虚拟现实技术等为代表的新兴信息技术极大地改变了人类认知和生活方式。越来越多围绕个人行为、活动的信息被数字化的同时也被持久化存储下来,引起了数据量的急剧增长。数据量的急剧增加给存储系统带来了巨大压力。首先,单服务器和磁盘阵列的传统存储方法己经不能满足许多存储场景的需求,分布式存储系统具有更大的存储空间和更灵活的扩展方式;其次,以归档存储为代表的冷数据存储需求增大,使用廉价、通用的存储设备可靠地保存数据成为冷、温数据存储的重要方式。
目前以云存储和归档存储为代表的分布式存储系统是较为常用的存储方式。但由于上述数据信息数据量较大,实时读写数据量大,处理端数据处理能力缺乏,导致分布式文件系统的数据读写时间较长、处理效率低下。因此,亟待提出一种针对上述数据进行数据处理的方法。
发明内容
本发明实施例提供了一种基于分布式文件系统的数据处理方法及装置,将数据读写进行优化处理,从而解决了现有技术中分布式文件系统的数据读写时间较长、处理效率低下等技术问题。
为了解决上述技术问题,本发明公开了如下技术方案:
第一方面,提供了一种基于分布式文件系统的数据处理方法,所述方法包括写数据,具体为:
客户端调用文件创建系统类的创建命令,所述文件创建系统类返回一个文件系统输出数据流给所述客户端;
所述客户端得到所述文件系统输出数据流之后,调用写命令进行写文件操作,得到文件;
所述文件系统输出数据流接收到客户端的所述文件,写入分布式文件系统之前,向主节点申请数据块,调用远程接口中的增加数据块命令,返回一个本地数据块对象;
所述文件系统输出数据流根据返回的所述本地数据块对象,与相应的数据节点进行通信,建立数据流,将所述客户端的文件内容切割成一个一个块,写入到所述数据流中;
所述文件系统输出数据流获得数据节点返回的写入成功信息后,就会向所述客户端返回写文件成功信息;
所述客户端就会调用关闭命令,关闭所述数据流连接,文件系统输出数据流收到客户端的关闭命令,通知主节点关闭文件,完成一次文件写入流程。
进一步的,所述方法包括读数据,具体为:所述客户端通过所述文件创建系统类的打开命令打开文件,相对应的所述文件创建系统类就会返回一个文件系统输出数据流给客户端。
所述客户端调用所述主节点的远程调用接口的取数据块地址命令,获得所述文件第一个数据块的保存地址;
调用所述文件系统输出数据流的读取命令读取文件数据;
所述文件系统输出数据流和数据节点建立连接,调用数据节点的读数据接口读取数据块;
当读取完该数据块后,如果文件尚未读取完,继续调用取数据块地址命令获得下一个数据块的地址;
所述文件系统输出数据流和存储所述数据块的数据节点进行通信,读取数据块内容。
重复上述读数据块过程,直到文件读取完毕,所述客户端调用关闭命令关闭数据流。
进一步的,其中在所述写数据之前:将分布式文件系统中的小文件根据分布式文件系统的归档方法得到归档大文件。
第二方面,提供了一种基于分布式文件系统的数据处理装置,包括写数据模块,其包括:
创建模块,客户端调用文件创建系统类的创建命令,所述文件创建系统类返回一个文件系统输出数据流给所述客户端;
客户端写操作模块,所述客户端得到所述文件系统输出数据流之后,调用写命令进行写文件操作,得到文件;
远程调用模块,所述文件系统输出数据流接收到客户端的所述文件,写入分布式文件系统之前,向主节点申请数据块,调用远程接口中的增加数据块命令,返回一个本地数据块对象;
数据流写入模块,所述文件系统输出数据流根据返回的所述本地数据块对象,与相应的数据节点进行通信,建立数据流,将所述客户端的文件内容切割成一个一个块,写入到所述数据流中;
反馈模块,所述文件系统输出数据流获得数据节点返回的写入成功信息后,就会向所述客户端返回写文件成功信息;
关闭模块,所述客户端就会调用关闭命令,关闭所述数据流连接,文件系统输出数据流收到客户端的关闭命令,通知主节点关闭文件,完成一次文件写入流程。
进一步的,还包括读数据模块,其包括:
读数据创建模块,所述客户端通过所述文件创建系统类的打开命令打开文件,相对应的所述文件创建系统类就会返回一个文件系统输出数据流给客户端。
读数据远程调用模块,所述客户端调用所述主节点的远程调用接口的取数据块地址命令,获得所述文件第一个数据块的保存地址;
读取模块,调用所述文件系统输出数据流的读取命令读取文件数据;所述文件系统输出数据流和数据节点建立连接,调用数据节点的读数据接口读取数据块;当读取完该数据块后,如果文件尚未读取完,继续调用取数据块地址命令获得下一个数据块的地址;所述文件系统输出数据流和存储所述数据块的数据节点进行通信,读取数据块内容;
读数据关闭模块,重复上述读数据块过程,直到文件读取完毕,所述客户端调用关闭命令关闭数据流。
进一步的,还包括:归档模块,将分布式文件系统中的小文件根据分布式文件系统的归档方法得到归档大文件。
本发明公开了一种基于分布式文件系统的数据处理方法及装置,通过对分布式文件系统的读写方法进行优化,在客户端调用文件创建系统类的创建命令,调用写命令进行写文件操作,得到文件;文件系统输出数据流向主节点申请数据块,返回一个本地数据块对象;根据返回的所述本地数据块对象,与相应的数据节点进行通信,建立数据流,将所述客户端的文件内容切割成一个一个块,写入到所述数据流中;获得数据节点返回的写入成功信息后,向所述客户端返回写文件成功信息,从而解决了现有技术中分布式文件系统的数据读写时间较长、处理效率低下等技术问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例中数据处理方法的流程示意图。
图2是本发明另一个实施例中数据处理装置的结构示意图。
图3是本发明另一个实施例中数据处理装置中写数据模块1的结构示意图。
图4是本发明另一个实施例中数据处理装置中读数据模块2的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,本发明一个实施例提出了一种基于分布式文件系统的数据处理方法的流程图。在本领域中,分布式文件系统常用来存储数据,其受到机架槽位和交换机的限制,通常集群都是跨越很多个机架的,客户端和集群同步集群节点信息的方式是在客户端刚启动进行初始化的时候,客户端需要先到集群上进行注册。集群负责维护所有客户端列表,并定期将集群中的节点状态信息推送给客户端。客户端接受到这些信息后,根据节点状态信息进行数据路由选择。
主节点是整个分布式文件存储系统的大脑,在它的内存中管理着所有元数据信息。同时,这也意味着当主节点的内存不能加载更多元数据时,分布式文件存储系统就不能再存储更多的文件。集群中有大量小文件存在会很大程度浪费主节点的内存空间。
将数据中的小文件根据分布式文件系统的归档方法得到归档大文件。在本领域中,经研究10M是文件是否为小文件的临界点。基于此,将小于10M的文件定义为小文件。当用户上传的文件小于10M时,需要将文件提交到文件合并队列进行合并。
每个数据处理线程进行读写任务,其中写数据步骤为:客户端调用文件创建系统类的创建命令,相对应的该文件创建系统类返回一个文件系统输出数据流给客户端;
与此同时,主节点会执行同名方法在命名空间中创建一个新的文件,并且进行一系列的检查确保创建成功,并将创建操作记录到创建日志中;
客户端获得了文件系统输出数据流之后,就可以调用它的写命令,进行写文件操作;
文件系统输出数据流接收到客户端的文件,写入分布式文件系统之前,需要向主节点申请数据块,调用远程接口中的增加数据块命令,成功后会返回一个本地数据块对象。该对象封装了数据块的所有信息;
文件系统输出数据流利用返回所得的本地数据块对象,和相应的数据节点进行通信,建立数据流,将客户端的文件切割成一个一个块,写入到数据流中。同时,数据节点会根据主节点返回的本地数据块对象中的信息,建立一条数据流管道,从头结点到尾节点依次保存文件系统输出数据流写入的数据;
当最后一个数据节点保存数据成功后,会沿着数据流管道逆流而上,添加写入成功信息到信息表中,最后将信息表返回给文件系统输出数据流;
同时,数据节点在保存数据成功后,会调用主节点的远程调用接口的数据块接收命令,向其汇报新增数据块信息,让主节点更新第二关系;
文件系统输出数据流获得数据节点返回的信息表后,就会向客户端返回真值表示写文件成功;客户端就会调用关闭命令,关闭数据流连接。文件系统输出数据流收到客户端的关闭命令,会调用主节点的远程调用接口的完成命令,通知主节点关闭文件,完成一次文件写入流程。
其中读数据流程为:客户端会通过文件创建系统类的打开命令打开文件,相对应的该类就会返回一个文件系统输出数据流给客户端;
然后,客户端利用该流调用主节点的远程调用接口的取数据块地址命令,获得文件第一块数据块的保存地址;
当得到地址后,就可以调用文件系统输出数据流的读取命令读取文件数据;
此时,文件系统输出数据流就会和数据节点建立连接,调用数据节点的读数据接口读取数据块;
当读取完该数据块后,如果文件尚未读取完,就会继续调用取数据块地址命令获得下一个数据块的地址,前提是没有缓存数据块的地址,如果缓存了,可以直接定位;
获得下一个数据块的地址后,文件系统输出数据流就会和存储该数据块的数据节点进行通信,读取数据块内容;
重复上述读数据块过程,直到文件读取完毕,客户端就会调用关闭命令关闭数据流。
上述方法通过对分布式文件系统的读写方法进行优化,在客户端调用文件创建系统类的创建命令,调用写命令进行写文件操作,得到文件;文件系统输出数据流向主节点申请数据块,返回一个本地数据块对象;根据返回的所述本地数据块对象,与相应的数据节点进行通信,建立数据流,将所述客户端的文件内容切割成一个一个块,写入到所述数据流中;获得数据节点返回的写入成功信息后,向所述客户端返回写文件成功信息,从而解决了现有技术中分布式文件系统的数据读写时间较长、处理效率低下等技术问题。
图2是本发明另一个实施例中基于分布式文件系统的数据处理装置的结构示意图,包括:写数据模块1、读数据模块2、归档模块3和多线程处理模块4,其中写数据模块1包括:创建模块101、客户端写操作模块102、远程调用模块103、数据流写入模块104、反馈模块105、关闭模块106,如图3所示;读数据模块2包括:读数据创建模块201、读数据远程调用模块202、读取模块203、读数据关闭模块204,如图4所示。
在本领域中,HDFS作为分布式文件系统,常用来存储上述数据,其是一个很庞大的集群,受到机架槽位和交换机的限制,通常集群都是跨越很多个机架的,客户端和集群同步集群节点信息的方式是在客户端刚启动进行初始化的时候,客户端需要先到集群上进行注册。集群负责维护所有客户端列表,并定期将集群中的节点状态信息推送给客户端。客户端接受到这些信息后,根据节点状态信息进行数据路由选择。
写数据模块1可包括:创建模块101客户端调用文件创建系统类的创建命令,相对应的该文件创建系统类返回一个文件系统输出数据流给客户端;
与此同时,主节点会执行同名方法在命名空间中创建一个新的文件,并且进行一系列的检查确保创建成功,并将创建操作记录到创建日志中;
客户端写操作模块102,客户端获得了文件系统输出数据流之后,就可以调用它的写命令,进行写文件操作;
远程调用模块103,文件系统输出数据流接收到客户端的文件,写入分布式文件系统之前,需要向主节点申请数据块,调用远程接口中的增加数据块命令,成功后会返回一个本地数据块对象。该对象封装了数据块的所有信息;
数据流写入模块104,文件系统输出数据流利用返回所得的本地数据块对象,和相应的数据节点进行通信,建立数据流,将客户端的文件切割成一个一个块,写入到数据流中。同时,数据节点会根据主节点返回的本地数据块对象中的信息,建立一条数据流管道,从头结点到尾节点依次保存文件系统输出数据流写入的数据;
当最后一个数据节点保存数据成功后,会沿着数据流管道逆流而上,添加写入成功信息到信息表中,最后将信息表返回给文件系统输出数据流;
同时,数据节点在保存数据成功后,会调用主节点的远程调用接口的数据块接收命令,向其汇报新增数据块信息,让主节点更新第二关系;
反馈模块105,文件系统输出数据流获得数据节点返回的信息表后,就会向客户端返回真值表示写文件成功;
关闭模块106,客户端就会调用关闭命令,关闭数据流连接;文件系统输出数据流收到客户端的关闭命令,会调用主节点的远程调用接口的完成命令,通知主节点关闭文件,完成一次文件写入流程。
读数据模块2可包括:读数据创建模块201,客户端会通过文件创建系统类的打开命令打开文件,相对应的该类就会返回一个文件系统输出数据流给客户端;
然后,读数据远程调用模块202,客户端利用该流调用主节点的远程调用接口的取数据块地址命令,获得文件第一块数据块的保存地址;
读取模块203,当得到地址后,就可以调用文件系统输出数据流的读取命令读取文件数据;
此时,文件系统输出数据流就会和数据节点建立连接,调用数据节点的读数据接口读取数据块;
当读取完该数据块后,如果文件尚未读取完,就会继续调用取数据块地址命令获得下一个数据块的地址,前提是没有缓存数据块的地址,如果缓存了,可以直接定位;
获得下一个数据块的地址后,文件系统输出数据流就会和存储该数据块的数据节点进行通信,读取数据块内容;
读数据关闭模块204,重复上述读数据块过程,直到文件读取完毕,客户端就会调用关闭命令关闭数据流。
在读写模块之前,可以对小文件进行归档,主节点是整个分布式文件存储系统的大脑,在它的内存中管理着所有元数据信息。同时,这也意味着当主节点的内存不能加载更多元数据时,分布式文件存储系统就不能再存储更多的文件。集群中有大量小文件存在会很大程度浪费主节点的内存空间。
设置有归档模块3,将数据中的小文件根据分布式文件系统的归档方法得到归档大文件。在本领域中,经研究10M是文件是否为小文件的临界点。基于此,将小于10M的文件定义为小文件。当用户上传的文件小于10M时,需要将文件提交到文件合并队列进行合并。
以及多线程处理模块4,用于数据较大,合起来同时处理时间消耗较长,为了减少处理时间,可以进行并行处理,建立和多个归档大文件相同的多条数据处理线程,每条数据处理线程对应一个数据处理任务。利用处理器GPU单元建立多个线程并行处理单元,多个线程并行处理单元中的一个线程并行处理单元对应于一个数据处理任务。
上述装置通过对分布式文件系统的读写方法进行优化,在客户端调用文件创建系统类的创建命令,调用写命令进行写文件操作,得到文件;文件系统输出数据流向主节点申请数据块,返回一个本地数据块对象;根据返回的所述本地数据块对象,与相应的数据节点进行通信,建立数据流,将所述客户端的文件内容切割成一个一个块,写入到所述数据流中;获得数据节点返回的写入成功信息后,向所述客户端返回写文件成功信息,从而解决了现有技术中分布式文件系统的数据读写时间较长、处理效率低下等技术问题。
为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分别描述。当然,在实施本发明时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。