文件管理方法及相关装置与流程

文档序号:30521218发布日期:2022-06-25 04:59阅读:67来源:国知局
1.本技术涉及电子
技术领域
:,具体涉及一种文件管理方法及相关装置。
背景技术
::2.现有的文件管理的方案中,一般需要借助定时执行工具或者系统,配置周期性的定时任务进行合并任务,实现对数据文件的管理。3.但是上述方式需要借助额外的工具或系统,并且需要结合人为操作,这种方式下系统的稳定性和执行效率较低。同时,文件合并删除过程与用户进行文件调用的状态是相互隔离的,会存在数据不同步的问题,影响用户的体验感。因此,亟需一种文件管理方法来改进上述问题。技术实现要素:4.本技术实施例提供了一种文件管理方法及相关装置,通过对数据文件集合的筛选确定需要进行合并的小数据文件,并对其按照分区信息进行分组合并,如此能够保证小数据文件在存储系统中占据连续的存储空间,进而实现自适应地减少存储系统中的文件数量,便于数据生命周期管理;同时合并后的数据文件能提高驱动端内存空间的利用率,减少驱动端出现oom的概率,提升spark任务稳定性和执行效率。5.第一方面,本技术实施例提供一种文件管理方法,应用于文件管理系统的驱动端,所述方法包括:6.启动主线程遍历job临时文件夹,获取任务目录,其中,所述任务目录由所述执行端执行任务提交操作产生;7.启动第一子job并发遍历所述任务目录,得到第一文件集合,所述第一文件集合包括待写入数据文件;8.对所述第一文件集合执行过滤操作,得到第二文件集合,所述第二文件集合包括目标待合并文件;9.启动第二子job对所述第二文件集合并发执行合并操作,得到第三文件集合;10.将所述第三文件集合依次移动到目标目录后,删除所述第二文件集合。11.第二方面,本技术实施例提供一种文件管理方法,应用于文件管理系统的执行端,所述方法包括:12.对临时文件夹执行任务提交操作,生成任务目录。13.第三方面,本技术实施例提供一种文件管理方法,应用于文件管理系统的驱动端,所述方法包括:14.启动主线程遍历用户目录下小文件合并工作目录,获取克隆目录,其中,所述克隆目录由执行端通过拷贝任务目录产生,所述任务目录由所述执行端执行任务提交操作产生;15.启动第三子job并发遍历所述克隆目录,得到第四文件集合,所述第四文件集合包括待写入数据文件的克隆文件;16.解析所述第四文件集合,得到第五文件集合,所述第五文件集合包括目标待合并数据文件的真实文件;17.启动第四子job对所述第五文件集合并发执行合并操作,得到第六文件集合;18.将所述第六文件集合依次移动到目标目录后,删除所述第五文件集合。19.第四方面,本技术实施例提供一种文件管理方法,应用于文件管理系统的执行端,所述方法包括:20.执行数据文件的写入操作,产生临时文件夹;21.对所述临时文件夹执行任务提交操作,产生任务目录;22.通过拷贝所述任务目录,得到克隆目录。23.第五方面,本技术实施例提供一种文件管理装置,应用于文件管理系统的驱动端,所述装置包括:24.获取单元,用于所述驱动端启动主线程遍历job临时目录,获取执行端执行任务提交操作产生的任务目录;25.所述获取单元,还用于所述主线程启动第一子job遍历所述任务目录,获取第一文件集合;26.遍历单元,用于遍历所述第一文件集合,得到第二文件集合,所述第二文件集合包括一个或多个待合并文件;27.合并单元,用于所述主线程启动第二子job对所述一个或多个待合并文件执行合并操作,得到第三文件集合;28.处理单元,用于将所述第三文件集合移动到目标目录后,删除所述第二文件集合。29.第六方面,本技术实施例提供一种文件管理装置,应用于文件管理系统的执行端,所述装置包括:30.提交单元,用于对临时文件夹执行任务提交操作,生成任务目录。31.第七方面,本技术实施例提供一种文件管理装置,应用于文件管理系统的驱动端,所述装置包括:32.启动单元,用于启动主线程遍历用户目录下小文件合并工作,获取克隆目录,其中,所述克隆目录由执行端通过拷贝任务目录产生,所述任务目录由所述执行端执行任务提交操作产生;33.所述启动单元,还用于启动第三子job并发遍历所述克隆目录,得到第四文件集合,所述第四文件集合包括待写入数据文件的克隆文件;34.所述启动单元,还用于启动第四子job对所述第五文件集合并发执行合并操作,得到第六文件集合;35.解析单元,用于解析所述第四文件集合,得到第五文件集合,所述第五文件集合包括目标待合并数据文件的真实文件;36.处理单元,用于将所述第六文件集合依次移动到目标目录后,删除所述第五文件集合。37.第八方面,本技术实施例提供一种文件管理装置,应用于文件管理系统的执行端,所述装置包括:38.写入单元,用于执行数据文件的写入操作,产生临时文件夹;39.提交单元,用于对所述临时文件夹执行任务提交操作,产生任务目录;40.复制单元,通过拷贝任务目录,得到克隆目录。41.第九方面,本技术实施例提供一种电子设备,包括处理器、存储器、通信接口以及一个或多个可执行程序代码,其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述可执行程序代码包括用于执行本技术实施例第一方面或第二方面中任一步骤的指令。42.第十方面,本技术实施例提供一种电子设备,包括处理器、存储器、通信接口以及一个或多个可执行程序代码,其中,上述一个或多个可执行程序代码被存储在上述存储器中,并且被配置由上述处理器执行,上述程序包括用于执行本技术实施例第三方面或第四方面中任一步骤的指令。43.第十一方面,本技术实施例提供了一种计算机可读存储介质,其中,上述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如本申请实施例第一方面或第二方面中所描述的部分或全部步骤。44.第十二方面,本技术实施例提供了一种计算机可读存储介质,其中,上述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如本申请实施例第三方面或第四方面中所描述的部分或全部步骤。45.第十三方面,本技术实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本技术实施例第一方面或第二方面任一方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。46.第十四方面,本技术实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本技术实施例第三方面或第四方面任一方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。47.可以看出,本技术实施例公开了一种文件管理方法及相关装置,可通过驱动端启动主线程遍历由执行端产生的临时文件夹,并获取任务目录;启动第一子job并发遍历任务目录,得到第一文件集合;对第一文件集合执行过滤操作,得到第二文件集合;启动第二子job对第二文件集合并发执行合并操作,得到第三文件集合后,删除第二文件集合,并对移动完成的文件创建标记文件。如此,通过本技术实施例的方案,可以实现自适应地减少存储系统中的文件数量,便于数据生命周期管理;同时还能降低驱动端出现oom的概率,提升spark任务稳定性和执行效率。附图说明48.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。49.图1a是本技术实施例提供了一种常用的文件合并的流程示意图;50.图1b是本技术实施例提供了一种hadoop的文件合并方法的流程示意图;51.图2是本技术实施例提供的一种文件管理方法的流程示意图;52.图3是本技术实施例提供的一种文件管理方法的交互流程示意图;53.图4是本技术实施例提供的另一种文件处理方法的流程示意图;54.图5是本技术实施例提供的一种文件管理装置的功能单元组成框图;55.图6是本技术实施例提供的另一种文件管理装置的功能单元组成框图;56.图7是本技术实施例提供的一种电子设备的结构示意图。具体实施方式57.为了使本
技术领域
:的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。58.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。59.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。60.1)电子设备可以是还包含其它功能诸如个人数字助理和/或音乐播放器功能的便携式电子设备,诸如手机、平板电脑、具备无线通讯功能的可穿戴电子设备(如智能手表)等。便携式电子设备的示例性实施例包括但不限于搭载ios系统、android系统、microsoft系统或者其它操作系统的便携式电子设备。上述便携式电子设备也可以是其它便携式电子设备,诸如膝上型计算机(laptop)等。还应当理解的是,在其他一些实施例中,上述电子设备也可以不是便携式电子设备,而是台式计算机。61.2)分布式文件系统(distributedfilesystem,dfs)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。dfs为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。单独的dfs共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点。62.3)内存溢出(outofmemory,oom)内存溢出(outofmemory,简称oom)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。63.4)apachespark是专为大规模数据处理而设计的快速通用的计算引擎。spark是ucberkeleyamplab(加州大学伯克利分校的amp实验室)所开源的类hadoopmapreduce的通用并行框架。spark是大数据领域一个非常流行的计算引擎,其文件数量主要取决于rdd中partition分区的数量和表分区的数量,需要注意的是,这里提到的两个分区是不一样的概念,rdd的partition分区与spark任务执行的并发度相关,而表分区则是hive中的概念。spark程序产生的文件数目一般是rdd分区数和hive表分区数的乘积,当spark任务并行度过高或表分区数目过大时,就容易导致出现小文件过多的问题,进而引发一系列其他问题。spark,拥有hadoopmapreduce所具有的优点;但不同于mapreduce的是——job中间输出结果可以保存在内存中,从而不再需要读写hdfs,因此spark能更好地适用于数据挖掘与机器学习等需要迭代的mapreduce的算法。64.其中,spark框架主要的构成包括以下几个部分:65.application:用户编写的spark应用程序。66.驱动端driver:spark中的driver即运行上述application的main函数并创建sparkcontext,创建sparkcontext的目的是为了准备spark应用程序的运行环境,在spark中有sparkcontext负责与clustermanager通信,进行资源申请、任务的分配和监控等,当executor部分运行完毕后,driver同时负责将sparkcontext关闭。67.执行端executor:是运行在工作节点(workernode)的一个进程,负责运行task。68.rdd:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。69.dag:有向无环图,反映rdd之间的依赖关系。70.task:运行在executor上的工作单元。71.job:一个job包含多个rdd及作用于相应rdd上的各种操作。72.stage:是job的基本调度单位,一个job会分为多组task,每组task被称为stage,或者也被称为taskset,代表一组关联的,相互之间没有shuffle依赖关系的任务组成的任务集。73.clutermanager:指的是在集群上获取资源的外部服务。目前有以下三种类型:74.1)standalon:spark原生的资源管理,由master负责资源的分配;75.2)apachemesos:与hadoopmr兼容性良好的一种资源调度框架;76.3)hadoopyarn:主要是指yarn中的resourcemanager。77.目前,常规的领域对于小文件合并的使用的方法是通过离线spark任务实现对指定目录下小数据文件的合并,其主要实现思路是请参照图1a所示的一种常用的文件合并的流程示意图,具体过程包括:78.使用定时执行工具或系统,配置周期性的定时任务,在原始数据文件完成写入并持久化落盘后,在指定时间起一个spark任务对指定目录进行遍历和过滤,得到待合并的小数据文件,然后进行合并操作,在中间目录生成大数据文件,如果小文件合并执行成功,再将合并生成的大数据文件转移到目标目录下并删除原来的小数据文件;如果在合并过程中出现异常导致spark任务执行失败,则需要人工清理掉合并过程中生成的临时数据目录和文件,然后再重新调度执行spark任务来进行小数据文件的合并。为更好地理解本技术的技术方案,下面结合具体实施例,对本技术进行详细说明。79.上述方案中,需要借助额外的工具或系统,同时文件合并删除过程与用户进行文件调用的状态是相互隔离的,会存在数据不同步的问题。因此,本技术方案在常规的文件合并方案的基础上,基于spark框架实现文件的合并操作。80.spark在进行计算处理的过程中,一般都是采用hadoop的fileoutputcommitterv1文件提交算法,简单来说就是,通过两次rename操作将数据写入到最终的目标目录,具体地请参照图1b所示,图1b是一种hadoop的文件合并方法的流程示意图,具体包括以下步骤。81.每个task任务将数据写入到如下路径:(数据并行写入临时目录)82.tabledir/_temporary/appattemptdir/_temporary/taskattemptdir/datafile。83.各个task任务完成数据的读取和写入后,会执行committask方法做第一次rename操作,将数据文件从task任务的临时目录转移到如下路径:(task目标目录)84.tabledir/_temporary/appattemptdir/taskdir/datafile。85.当所有task任务都执行完committask方法提交数据文件后,driver端会执行commitjob方法做第二次rename操作,按照顺序将数据文件从sparkjob的临时目录转移到如下目标路径,并生成_success标志文件:(最终目标目录)86.tabledir/datafile。87.tabledir/_success。88.基于hadoopfileoutputcommitterv1文件提交算法的spark作业执行原理,简单概括如下图2所对应的具体过程。为了更好地理解本技术方案的内容,下面将结合具体的示例进行方案的描述。89.请参阅图2,图2是本技术实施例提供了一种文件管理方法的流程示意图,应用于文件管理系统的驱动端,如图2所示,本技术中文件管理方法具体包括以下操作步骤。90.s201、启动主线程遍历作业临时文件夹,获取任务临时目录。91.其中,所述任务目录由所述执行端执行任务提交操作产生。92.具体地,本技术方案主要是利用spark架构去实现本方案的内容。通过本技术方案提出来的方法,可以适用于所有适配了hadoop的文件提交协议的分布式文件系统。93.具体地,在执行端executor将数据写入到文件系统时,会产生一个存储数据文件的临时文件夹,其中,临时文件夹下面存在着一个或多个子文件夹,有各自对应的目录路径。94.进一步地,executor在完成数据读取操作后,会执行数据提交操作,实现将数据存入执行端的临时目录中。在此过程中,执行端进行任务提交操作采用的是并行操作,可以同时提交若干个数据文件。在进行并行操作的时候,执行端会产生任务目录,所述任务目录里用于表征提交事件。95.s202、启动第一子job并发遍历所述任务目录,得到第一文件集合。96.具体地,所述第一文件集合包括待写入数据文件。97.具体地,目录是文件系统中另一个重要的概念。一个“目录”或“文件夹”就是一个虚拟容器,它里面保存着一组文件和其他一些目录。一个典型的文件系统可能会包含成千上万的目录,多个文件通过存储在一个目录中,可以达到有组织地存储文件的目的。同时,在一个目录中可以保持另外的目录(称为子目录),这些目录和文件构成了一个层次结构(即目录树)。98.具体地,驱动端通过启动一个主线程去遍历该任务目录,进而获得各个任务的数据提交目录。所述数据提交目录包括:数据文件信息和数据文件路径。其中,所述数据文件信息包括数据文件的大小、名称等等。99.具体地,第一文件集合中的待写入数据文件包括但不限于:可直接存入文件系统的大数据文件、需要执行合并操作的小数据文件等等。100.s203、对所述第一文件集合执行过滤操作,得到第二文件集合。101.具体地,所述第二文件集合包括目标待合并文件。102.具体地,本技术方案中,主要是针对小数据文件执行合并操作,以实现减少碎片文件造成磁盘空间的不连续存储带来的资源浪费等问题。因此,在将待写入数据文件执行落盘操作时,需要先对数据文件进行筛选过滤。进而,筛选出需要进行合并的目标待合并文件,构成第二文件集合。103.s204、启动第二子job对所述第二文件集合并发执行合并操作,得到第三文件集合。104.具体地,在步骤s203操作选出待合并的数据文件后,驱动端启动一个合并子job,对上述筛选结果执行合并操作。得到合并后的第三文件集合,其中,所述文件集合至少包括一个合并后的数据文件。105.s205、将所述第三文件集合依次移动到目标目录后,删除所述第二文件集合。106.具体地,在步骤s204操作结束后,将合并后的第三文件集合移动到目标目录中。107.进一步地,将第二文件集合执行删除操作,释放其占用的内存资源。同时,对移动后的第三文件集合创建标记文件,所述标记文件用于表征当前数据文件已经成功存入目标目录中。108.可以看出,本技术实施例公开了一种文件管理方法,可通过驱动端启动主线程遍历由执行端产生的job临时文件夹,获取任务目录;启动第一子job并发遍历任务目录,得到第一文件集合;对第一文件集合执行过滤操作,得到第二文件集合;启动第二子job对第二文件集合并发执行合并操作,得到第三文件集合后,删除第二文件集合,并对移动完成的文件创建标记文件。如此,通过本技术实施例的方案,通过获取执行端产生的任务目录确定需要写入存储系统的数据文件集合,通过对数据文件集合的筛选确定需要进行合并的小数据文件,并对其按照分区信息进行分组合并,如此能够保证小数据文件在存储系统中占据连续的存储空间,进而实现自适应地减少存储系统中的文件数量,便于数据生命周期管理;同时合并后的数据文件能够提高spark驱动端内存空间的利用率,减少驱动端出现oom的概率,提升spark任务稳定性和执行效率。109.在一个可能的示例中,所述任务目录包括至少一个子目录;所述启动第一子job并发遍历所述任务目录,得到第一文件集合,可以包括如下步骤:所述驱动端启动所述第一子job;所述第一子job根据数据文件的命名规则,对所述至少一个子目录下数据文件进行并发遍历,得到所述待写入数据文件;根据所述待写入数据文件,构建所述第一文件集合。110.具体地,使用目录树组织文件系统时,需要通过某种方法指明文件名。路径名描述了怎样在一个文件系统中确认一个文件的位置,它是一个分量名序列,各分量名之间用分隔符(通常分隔符是斜杠符)隔开。分量名是一个字符序列,它指明一个被唯一地包含在前缀(父目录)分处中的名字。一个完整的路径名由一个分隔符(为了方便讨论,后面采用斜杠符“/”ꢀ作为分隔符)开始,并且指明一个文件,这个文件可以从文件系统的根(没有祖先的目录)开始,沿着该路径名的后继分量名所在的那个分支游历文件树而找到。111.具体地,驱动端启动第一子job根据上述命名规则,对步骤s201中执行端进行任务提交操作时得到的任务目录进行遍历和过滤,即对任务目录中的父目录和子目录进行并发遍历,得到全部的待写入数据文件。通过遍历和过滤操作得到的待写入数据文件构建第一文件集合。112.可以看出,本技术实施例中,通过第一子job根据目录的命名规则对任务目录进行并发遍历,能够在较短时间内获取全部待写入数据文件,并进行下一步任务操作。113.在一个可能的示例中,所述得到所述待写入数据文件之后,还能包括如下步骤:根据表分区目录结构解析所述待写入数据文件的存储路径,得到映射信息表,所述映射信息表包括所述待写入数据文件名及其对应的表分区信息。114.具体地,数据文件在写入数据表中时,数据表会分配对应的存储空间,表分区是一种数据组织方案,在本技术方案中,表数据根据一个或多个表列中的值划分到多个称为数据分区的存储对象中。每个数据分区都是单独存储的。这些存储对象可以在不同的表空间中,也可以在相同表空间中。查询处理同样可以利用分离的数据来避免扫描不相关数据,从而使许多数据仓库样式查询具有更好地查询性能。115.示例性地,在获取到待写入数据文件后,根据表分区目录结构对上述数据文件的存储路径进行解析,得到每一个数据文件所对应的存储路径,即映射信息表。116.可以看出,本技术实施例中,可以通过待写入数据文件的解析,能够获取到每一个数据文件对应的分区信息,进而可以根据分区信息进行后续的文件合并操作。117.在一个可能的示例中,所述得到所述待写入数据文件之后,还能包括如下步骤:根据合并规则对所述待写入数据文件执行过滤操作,得到所述目标待合并文件,所述合并规则用于筛选不符合文件大小阈值的所述数据文件;根据所述目标待合并文件,构建所述第二文件集合。118.具体地,待写入数据文件中,较大数据文件占据的存储空间是连续且较大的,因此可以直接存入到目标目录中。对于较小的数据文件,通常是占据较小的空间,且都是碎片式分散占据存储空间,为了更好地保证存储系统的磁盘资源充分利用,可以针对这类文件执行合并操作,以使若干个小的数据文件合并为较大的数据文件进行存储。119.具体地,在获取到所有的待写入数据文件即第一文件集合后,对所有的待写入数据文件进行并发式遍历和过滤。120.实际应用中,可以通过设置合并规则进行上述操作。所述合并规则包括:数据文件的大小、数据文件的类型等等。需要说明的是,合并规则既可以根据系统原本的规则进行,也可以通过人为设置,在此不做具体限制。本技术方案中,以数据文件的大小作为合并规则为例进行描述。121.具体地,若将数据文件大小阈值设置为1024kb,则驱动端在进行并发遍历过滤时,当检测到数据文件大小小于1024kb时,将其作为目标待合并文件,添加到第二文件集合中。若当前数据文件大小大于1024kb,则可以直接进入下一步数据存入操作。122.另一种可能的方法还包括根据预设的文件类型进行数据文件遍历和过滤,得到第二文件集合。其中,具体可以根据文件类型设置优先级,根据优先级对数据文件进行过滤。123.可见,本技术实施例中,通过对待写入数据文件按照合并规则进行遍历和过滤,如此能够将所有待写入数据文件分为可以直接进行存储的数据文件和需要进行合并操作的目标合并文件。同时,提供简单的配置规则供用户使用,针对不同规模的业务,适应性强、应用范围广。124.在一个可能的示例中,所述方法还包括以下操作步骤:根据所述映射信息表对所述第二文件集合执行分组操作,得到分组结果,其中,所述分组结果包括至少一个分组,每一个所述分组包括相同表分区对应的所述目标待合并文件;启动所述第二子job,对所述分组结果执行合并操作,得到所述第三文件集合,所述合并操作用于对每一个所述分组中的所述目标待合并文件进行合并。125.具体地,根据上述步骤获取的映射信息表对第二文件集合中的目标待合并文件进行分组,得到分组结果。其中,分组结果中包括至少一个分组,分组依据是每一个目标待合并文件对应的表分区信息。故,每一个分组中包含的是同一分区中的目标待合并文件。126.可以看出,本技术实施例中,根据映射信息进行分组操作,得到每一个目标待合并文件对应的分组。进一步地,可以根据分组结果执行合并操作。根据分组结果进一步执行合并操作,能够保证同一分区下的数据文件合并为同一个数据文件,如此在进行移动到目标目录下面的作业执行效率。127.在一个可能的示例中,所述将所述第三文件集合依次移动到目标目录之后,所述方法还包括如下步骤:根据所述第三文件集合,生成标记信息文件,所述标记信息文件用于指示所述第三文件集合移动完成。128.具体地,驱动端在将合并后的数据文件移动到最终的目标目录后,将第二文件集合中的目标待合并文件进行删除。释放当前第二文件集合中的数据文件所占据的磁盘空间。129.实际应用中,如果有执行端并发提交大规模的待写入数据文件,即使所有提交任务都执行完成了,仍需等待较长一段时间spark作业才执行结束,这些时间主要耗费在sparkdriver端做第二次rename操作。130.本方案中,在spark作业执行过程中,如果部分任务提交操作已执行成功,而此时sparkjob执行失败,则可能会有一部分数据对外可见,此时需要数据消费者根据是否新生成了_success标记文件来判断数据的完整性。因此,在本技术方案中,在驱动端将合并后的数据文件移动到最终的目标目录中后,会对移动后的数据文件创建空标记文件_success。131.可见,本技术实施例中,在完成移动操作后,数据文件存入到目标目录中,重新生成_success标记文件以表示spark作业执行成功。132.在一个可能的示例中,所述方法还应用于文件管理系统的执行端;所述方法包括:对临时文件夹执行任务提交操作,生成任务目录。133.具体地,执行端在将待写入数据文件写入临时文件夹后,将待写入数据文件从临时文件夹提交到执行端的目标目录。134.可见,本技术实施例中,执行端通过将临时文件移动到执行端的目标目录中,从而提交过程产生的任务目录作为驱动端遍历的依据。135.在一个可能的示例中,所述对所述临时文件夹执行任务提交操作之前,所述方法还包括如下步骤:在用户目录下,对数据文件及所属分区目录执行克隆操作,生成临时目录和文件;在任务数据文件及所属目录全部完成克隆后,执行所述任务提交操作。136.可见,本技术实施例中,通过执行端将待写入数据文件写入到临时文件夹中,进一步将临时文件夹中数据文件移动到执行端的目标目录中,产生任务目录。如此,驱动端可根据任务目录来获取待存入的数据文件。137.下面将结合图3来具体描述文件处理方法实施例中记载的任何一种文件管理方法的部分或全部步骤。如图所示,图3是本技术实施例提供的一种文件管理方法的交互流程示意图。138.其中,步骤s301~步骤s302以及步骤s308~步骤s311执行图2所述步骤中的部分或全部内容。步骤s303~步骤s307执行上述执行端所述步骤中的部分或全部内容,在此不做过多赘述。139.可以看出,本技术实施例中,通过在executor端(执行端)各个任务执行完committask方法提交操作后,在driver端(驱动端)执行将待写入数据文件移至目标目录,即执行commitjob操作之前,插入文件合并动作,通过遍历待写入数据文件,自适应的进行数据文件的合并和合并后的删除操作,如此能够在保证数据文件正常写入目标目录的同时,减少存储系统中的文件数量,便于数据生命周期管理;同时,在driver端直接进行commitjob操作之前执行合并操作,能够降低driver端出现oom的概率,提升spark任务稳定性,并且提高用户spark作业的执行效率。140.请参阅图4,图4是本技术实施例提供了另一种文件处理方法的流程示意图,应用于文件管理系统的驱动端,如图4所示,本技术中文件管理方法包括以下操作步骤:141.s401、启动主线程遍历用户目录下小文件合并工作目录,获取克隆目录。142.其中,所述克隆目录由执行端通过拷贝任务目录产生,所述任务目录由所述执行端执行任务提交操作产生。143.具体地,executor端的所有任务每完成一个临时数据文件的写入,即采集对应的表分区目录结构、文件名等基本信息,待所有的任务执行结束并提交完待写入数据文件后,在当前用户目录下小文件合并工作目录中克隆本次提交任务的任务目录、表分区目录及对应的空数据文件。144.进一步地,驱动端并发遍历上述目录下的小文件合并工作目录的子目录,获取提交任务所产生的任务目录的克隆目录;145.s402、启动第三子job并发遍历所述克隆目录,得到第四文件集合。146.其中,所述第四文件集合包括待写入数据文件的克隆文件;147.s403、解析所述第四文件集合,得到第五文件集合。148.其中,所述第五文件集合包括目标待合并数据文件的真实文件。149.s404、启动第四子job对所述第五文件集合并发执行合并操作,得到第六文件集合。150.s405、将所述第六文件集合依次移动到目标目录后,删除所述第五文件集合。151.具体地,上述步骤s402-s405的执行步骤,与图2所描述的步骤s202-s205及其相关描述基本类似,在此不做赘述。152.通过上述全过程后,对于spark作业来说,如果数据源分布着大量小文件,则spark作业在从数据源获取数据时,也会产生大量的任务,在这种情况下,每个executor会依次执行多个任务。如果数据源是文件大小分布均衡的大数据文件,则spark作业在从数据源获取数据时,产生的任务数量相对会大幅减少,在这种情况下,每个executor可能只需要依次执行少量几个任务,避免在多个task任务之间进行切换,提高数据读取效率,进而提高spark作业的执行效率。153.如下表1所示,本技术方案在s3实际生产环境测试中,spark作业数据读取效率的提升情况。154.表1[0155][0156]如表1所示内容,将本技术提出来的文件合并方法和常规未引入文件合并方法的数据文件存储,在平均数据量和任务执行的并行度保持一致的情况下,即数量为1737216599行、并行度为80个的情况下,分别进行数据文件写入操作。文件平均数目那一栏表明:未引入本申请方案和使用本技术方案之后,文件平均数目减少99.2%;spark作业总内存平均消耗减少61.5%;spark作业数据读取平均耗时减少62.8%。[0157]从上述统计结果可以发现,通过引入基于spark的动态自适应小文件合并方法来减少小文件数量,能大幅减少spark作业产生的小文件数量和消耗的内存及cpu资源,同时有效提高spark作业的数据读取效率,进而提高整个spark作业的执行效率。[0158]可见,本技术实施例中,基于spark的动态自适应小文件合并方法,将小数据文件合并的过程,深度融合到spark作业的执行过程中,既保证了操作的原子性,还保证了数据的一致性。同时,该小文件合并方法在使用上简单方便,适应性强,适用范围广。通过扩展spark原生接口,以插件方式运用到spark作业中,使用起来简单方便。同时,能够提供简单的配置规则供用户使用,针对不同规模的业务,适应性强、应用范围广。创新性地使用分布式文件系统中执行端保存待写入数据文件的临时文件夹来暂存小文件合并临时数据,既能避免依赖第三方组件,也能保证良好的执行效率。[0159]在一个可能的示例中,所述克隆目录包括至少一个子目录;所述启动第三子job并发遍历所述克隆目录,得到第四文件集合,包括以下步骤:所述驱动端启动所述第三子job;所述第三子job并发遍历所述克隆目录,所述第三子job通过对数据文件的路径执行过滤操作,得到所述待写入数据文件的克隆文件;根据所述待写入数据文件的克隆文件,构建所述第四文件集合。[0160]具体地,driver端执行的小文件合并程序启动一个第三子job,用于并发遍历所有克隆目录,通过对文件路径的过滤匹配,获取所有待写入数据文件的克隆文件。其中,所述克隆文件包括但不限于:较大的数据文件、较小的需要执行合并操作的数据文件。[0161]可见,本技术实施例中,执行端driver对克隆目录进行并发遍历,能够在较短时间内获取全部待写入数据文件的克隆文件,并进行下一步任务操作。[0162]在一个可能的示例中,所述得到所述待写入数据文件的克隆文件之后,所述方法还包括以下步骤:根据表分区目录结构对所述第四文件集合执行解析操作,得到所述待写入数据文件的真实文件;获取所述待写入数据文件的真实文件的相关信息,其中,所述相关信息包括:文件大小、路径以及所述待写入数据文件的真实文件对应的表分区信息。[0163]具体地,对于得到的所有克隆文件,按照表分区目录结构对文件路径进行解析重构,获取所有真实数据文件对应的表分区,进而得到真实数据文件的路径、文件大小及对应所属表分区等基本信息。[0164]可见,本技术实施例中,可以通过根据克隆文件的相关信息对其进行解析,进而能够获取到每一个真实的数据文件对应的分区信息,进而可以根据分区信息进行后续的文件合并操作。[0165]在一个可能的示例中,所述得到所述待写入数据文件的真实文件之后,所述方法还包括以下步骤:根据所述相关信息,对所述待写入数据文件的真实文件执行过滤操作,得到所述目标待合并数据文件的真实文件;根据所述目标待合并数据文件的真实文件,构建所述第五文件集合;根据所述表分区信息对所述第五文件集合执行分组操作,得到分组结果,其中,所述分组结果包括至少一个分组,每一个所述分组包括相同表分区对应的所述目标待合并数据文件的真实文件。[0166]可见,本技术实施例中,根据映射信息进行分组操作,得到每一个目标待合并文件对应的分组。进一步地,可以根据分组结果执行合并操作。根据分组结果进一步执行合并操作,能够保证同一分区下的数据文件合并为同一个数据文件,提高将数据文件移动到目标目录的执行效率。[0167]在一个可能的示例中,所述方法还包括以下步骤:启动所述第四子job,对所述分组结果执行合并操作,得到所述第六文件集合,所述合并操作用于对每一个所述分组中的所述目标待合并文件进行合并。[0168]实际应用中,对于spark作业,数据源分布的小文件数量越多,在从数据源获取数据时,产生的任务数量也会更多,而数据分片信息以及对应产生的任务元信息都保存在driver端的内存中,这就会给driver带来很大的压力,甚至引发oom异常导致作业执行失败。[0169]具体地,驱动端对于得到的真实数据文件的基本信息,根据配置的小文件合并规则,过滤掉不符合文件大小阈值的数据文件,再根据表分区信息对过滤后的数据文件进行分组,将待写入同一个表分区的数据文件进行归类聚合。[0170]可见,本技术实施例中,根据分组结果进一步执行合并操作,能够保证同一分区下的数据文件合并为同一个数据文件,提高将数据文件移动到目标目录的执行效率。同时,还能降低driver出现oom的概率,提升spark任务稳定性。[0171]在一个可能的示例中,所述将所述第六文件集合依次移动到目标目录之后,所述方法还包括以下步骤:根据所述第六文件集合,生成标记文件,所述标记文件用于指示所述第六文件集合移动完成。[0172]可见,本技术实施例中,通过对移动完成的数据文件创建移动成功的标记文件,如此数据消费者可以根据是否新生成了_success标记文件来判断数据的完整性。[0173]在一个可能的示例中,所述方法还用于文件管理系统的执行端,所述方法包括以下步骤:执行数据文件的写入操作,产生临时文件夹;对所述临时文件夹执行任务提交操作,产生任务目录;通过拷贝所述任务目录,得到克隆目录。[0174]具体地,执行端executor的所有任务每完成一个临时数据文件的写入,就会采集对应的表分区目录结构、文件名等基本信息,待task任务执行结束并提交数据文件后,在当前用户目录下小文件合并工作目录中克隆task任务目录、表分区目录及对应的空数据文件。[0175]可见,本技术实施例中,通过执行端将待写入数据文件写入到临时文件夹中,进一步将临时文件夹中移动到执行端的目标目录中,产生任务目录并对任务目录进行拷贝得到克隆目录。如此,能够保证写入数据的一致性,以及驱动端可根据克隆目录来获取待存入的数据文件。[0176]上述主要从方法侧执行过程的角度对本技术实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。[0177]本技术实施例可以根据上述方法示例应用于文件管理系统,所述文件管理系统包括驱动端和执行端:[0178]所述驱动端用于启动主线程遍历job临时文件夹,获取任务目录,其中,所述任务目录由所述执行端执行任务提交操作产生;启动第一子job并发遍历所述任务目录,得到第一文件集合,所述第一文件集合包括待写入数据文件;对所述第一文件集合执行过滤操作,得到第二文件集合,所述第二文件集合包括目标待合并文件;启动第二子job对所述第二文件集合并发执行合并操作,得到第三文件集合;将所述第三文件集合依次移动到目标目录后,删除所述第二文件集合;[0179]所述执行端用于对临时文件夹执行任务提交操作,生成任务目录。[0180]本技术实施例可以根据上述方法示例应用于另一种文件管理系统,所述文件管理系统包括驱动端和执行端:[0181]所述驱动端用于启动主线程遍历用户目录下小文件合并文件夹,获取克隆目录,其中,所述克隆目录由执行端通过拷贝任务目录产生,所述任务目录由所述执行端执行任务提交操作产生;启动第三子job并发遍历所述克隆目录,得到第四文件集合,所述第四文件集合包括待写入数据文件的克隆文件;解析所述第四文件集合,得到第五文件集合,所述第五文件集合包括目标待合并数据文件的真实文件;启动第四子job对所述第五文件集合并发执行合并操作,得到第六文件集合;将所述第六文件集合依次移动到目标目录后,删除所述第五文件集合;[0182]所述执行端用于执行数据文件的写入操作,产生临时文件夹;对所述临时文件夹执行任务提交操作,产生任务目录;通过拷贝任务目录,得到克隆目录。[0183]本技术实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本技术实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。[0184]在采用对应各个功能划分各个功能模块的情况下,与图2的实施例一致,图5示出了本申请实施例提供的一种文件管理装置的功能单元组成框图,如图5所示,该文件管理装置500,文件管理装置500可以包括:驱动端510和执行端520,其中驱动端510包括:获取单元501、遍历单元502、合并单元503和处理单元504,执行端520包括提交单元505。其中,[0185]其中,获取单元501可以用于支持电子设备执行上述步骤s201和步骤s202,和/或用于本文所描述的技术的其他过程。[0186]遍历单元502可以用于支持电子设备执行上述步骤s203,和/或用于本文所描述的技术的其他过程。[0187]合并单元503可以用于支持电子设备执行上述步骤s204,和/或用于本文所描述的技术的其他过程。[0188]处理单元504可以用于支持电子设备执行上述步骤s205,和/或用于本文所描述的技术的其他过程。[0189]提交单元505可以用于支持电子设备执行对临时文件夹执行任务提交操作,生成任务目录。[0190]可见,在本技术实施例提供的文件管理装置,通过驱动端的获取单元启动主线程遍历由执行端的提交单元所产生的临时文件夹,并获取任务目录;通过遍历单元启动第一子job并发遍历任务目录,得到第一文件集合;通过对第一文件集合执行过滤操作,得到第二文件集合;通过合并单元对第二文件集合并发执行合并操作,得到第三文件集合后,通过处理单元删除第二文件集合,并对移动完成的文件创建标记文件。如此,通过本技术实施例的装置,可以实现自适应地减少存储系统中的小文件数量,便于数据生命周期管理;同时还能降低驱动端出现oom的概率,提升spark任务稳定性和执行效率。[0191]与图4的实施例一致,图6示出了本技术实施例提供的另一种文件管理装置的功能单元组成框图,如图6所示,该文件管理装置600,文件管理装置600可以包括:驱动端610和执行端620,其中驱动端610包括:启动单元601、解析单元602和处理单元603,执行端620包括写入单元604、提交单元605和复制单元606。其中,[0192]其中,启动单元601可以用于支持电子设备执行上述步骤s401~步骤s403,和/或用于本文所描述的技术的其他过程。[0193]解析单元602可以用于支持电子设备执行上述步骤s404,和/或用于本文所描述的技术的其他过程。[0194]处理单元603可以用于支持电子设备执行上述步骤s405,和/或用于本文所描述的技术的其他过程。[0195]写入单元604可以用于支持电子设备执行数据文件的写入操作,产生临时文件夹。[0196]提交单元605可以用于支持电子设备对所述临时文件夹执行任务提交操作,产生任务目录。[0197]复制单元606可以用于支持电子设备拷贝任务目录,得到克隆目录。[0198]可见,在本技术实施例提供的文件管理装置,通过驱动端的启动单元启动主线程遍历由执行端的提交单元产生的临时文件夹,并获取克隆目录;然后,启动第三子job并发遍历克隆目录,得到第四文件集合;启动第四子job对第五文件集合并发执行合并操作,得到第六文件集合;由解析单元解析第四文件集合,得到目标待合并数据文件的真实文件;由处理单元将第六文件集合依次移动到目标目录后,删除第五文件集合。如此,通过本技术实施例的装置,可以实现自适应地减少存储系统中的文件数量,便于数据生命周期管理;同时还能降低驱动端出现oom的概率,提升spark任务稳定性和执行效率。[0199]需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。[0200]本实施例提供的电子设备如图2或图5所示,用于执行上述文件管理方法,因此可以达到与上述实现方法相同的效果。[0201]在采用集成的单元的情况下,电子设备可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对电子设备的动作进行控制管理,例如,可以用于支持电子设备执行上述获取单元501、遍历单元502、合并单元503和处理单元504,以及提交单元505执行的步骤。存储模块可以用于支持电子设备执行存储程序代码和数据等。通信模块,可以用于支持电子设备与其他设备的通信。[0202]本实施例提供的电子设备如图4或图6所示,用于执行上述文件管理方法,因此可以达到与上述实现方法相同的效果。[0203]在采用集成单元的情况下,电子设备可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对电子设备的动作进行控制管理,例如,可以用于支持电子设备执行上述启动单元601、解析单元602和处理单元603,以及写入单元604、提交单元605和复制单元606执行的步骤。存储模块可以用于支持电子设备执行存储程序代码和数据等。通信模块,可以用于支持电子设备与其他设备的通信。[0204]其中,处理模块可以是处理器或控制器。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digitalsignalprocessing,dsp)和微处理器的组合等等。存储模块可以是存储器。通信模块具体可以为射频电路、蓝牙芯片、wi-fi芯片等与其他电子设备交互的设备。[0205]与上述图2所示的实施例一致的,请参阅图7,图7是本技术实施例提供的一种电子设备的结构示意图,如图7所示,如图所示,该电子设备包括处理器、存储器、通信接口以及一个或多个可执行程序代码,其中,上述一个或多个可执行程序代码被存储在上述存储器中,并且被配置由上述处理器执行。[0206]在一个可能的示例中,上述程序包括用于执行以下步骤的指令:[0207]启动主线程遍历job临时文件夹,获取任务目录,其中,所述任务目录由所述执行端执行任务提交操作产生;[0208]启动第一子job并发遍历所述任务目录,得到第一文件集合,所述第一文件集合包括待写入数据文件;[0209]对所述第一文件集合执行过滤操作,得到第二文件集合,所述第二文件集合包括目标待合并文件;[0210]启动第二子job对所述第二文件集合并发执行合并操作,得到第三文件集合;[0211]将所述第三文件集合依次移动到目标目录后,删除所述第二文件集合。[0212]可以看出,本技术实施例中所描述的电子设备,通过驱动端启动主线程遍历由执行端产生的临时文件夹,获取任务目录;启动第一子job并发遍历任务目录,得到第一文件集合;对第一文件集合执行过滤操作,得到第二文件集合;启动第二子job对第二文件集合并发执行合并操作,得到第三文件集合后,删除第二文件集合,并对移动完成的文件创建标记文件。如此,通过本技术实施例的方案,可以实现自适应地减少存储系统中的文件数量,便于数据生命周期管理;同时还能降低驱动端出现oom的概率,提升spark任务稳定性和执行效率。[0213]本技术实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有用于电子数据交换的计算机程序,计算机程序包括执行指令,执行指令用于执行如上述文件管理方法实施例中记载的任何一种文件管理方法的部分或全部步骤,上述计算机包括电子终端设备。[0214]本技术实施例提供了一种计算机程序产品,其中,计算机程序产品包括计算机程序,计算机程序可操作来使计算机如上述方法实施例中记载的任何一种文件管理方法的部分或全部步骤,该计算机程序产品可以是一个软件安装包。[0215]需要说明的是,对于前述的任一种文件管理方法的实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本技术所必须的。[0216]以上对本技术实施例进行了详细介绍,本文中应用了具体个例对本技术一种文件管理方法及相关装置的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术一种文件管理方法及相关装置的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。[0217]本技术是参照本技术实施例的方法、硬件产品和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0218]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。存储器可以包括:闪存盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取器(英文:randomaccessmemory,简称:ram)、磁盘或光盘等。[0219]尽管在此结合各实施例对本技术进行了描述,然而,在实施所要求保护的本技术过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现所公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”ꢀ或“一个”不排除多个的情况。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。[0220]本领域普通技术人员可以理解上述任一种文件管理方法实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储器中,存储器可以包括:闪存盘、只读存储器、随机存取器、磁盘或光盘等。[0221]可以理解的是,凡是被控制或者被配置以用于执行本技术一种文件管理方法实施例所描述的流程图的处理方法的产品,如上述流程图的装置以及计算机程序产品,均属于本技术所描述的相关产品的范畴。[0222]显然,本领域的技术人员可以对本技术提供的一种文件管理方法及装置进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1