一种HDFS文件自动清理方法、装置及存储介质与流程

文档序号:25045784发布日期:2021-05-14 12:08阅读:87来源:国知局
一种hdfs文件自动清理方法、装置及存储介质
技术领域
:1.本公开涉及分布式存储及大数据
技术领域
:,尤其涉及一种hdfs文件自动清理方法、装置及存储介质。
背景技术
::2.hdfs(hadoopdistributedfilesystem,hadoop分布式文件系统)是一个高度容错性的分布式存储系统,适合部署在廉价的机器上。hdfs能提供高吞吐量的数据访问,适合那些有着超大数据集(largedataset)的应用程序。3.hdfs采用分而治之的设计思想,将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。在大数据生态系统中为各类分布式运算框架(如:mapreduce,spark,tez等)提供数据存储服务。4.hdfs架构中,名称节点namenode负责文件和目录的创建、删除和重命名等,同时管理数据节点与文件块的映射关系。数据节点datanode负责数据的存储和读取。5.客户端读取数据会先访问名称节点,获取数据块对应数据节点的位置,进而读取数据,写入数据也会由名称节点分配存储位置,再向对应数据节点写入数据。6.由于hdfs分布式文件系统广泛的使用场景,里面往往存放着各式各样的文件如:文本文件、二进制文件、序列化文件、面向行列存储格式的数据文件以及视频、图片、资料文档等多媒体文件,其中不乏有一些消费性的、无价值的、历史归档的冷数据,一直在占用着宝贵的存储资源。虽然可以通过实施使用规范来达到一定的目的,但是人工处理冷数据的成本非常高,而且效率非常低下。7.hdfs提供了类似windows文件系统的回收站,删除的文件或目录会临时移动到当前操作用户的回收站目录中如:/user/hdfs/.trash/current中,namenode服务中有专门的垃圾清理守护线程trashemptier服务定期对回收站中的current目录以重命名为时间戳(格式为yymmddhhmmss)的方式创建检查点checkpoint,并删除之前创建的历史检查点,来达到定期清理删除垃圾回收站中文件或目录的目的。8.目前该垃圾清理守护线程trashemptier服务在社区发布版本中是不启动的,可以通过配置fs.trash.interval的值大于0进行启用如:fs.trash.interval=30(单位:分钟),即每30分钟会把hdfs文件系统中所有用户的垃圾回收站中当前的文件目录current重命名来创建检查点,并把之前创建的历史检查点给清理删除掉。9.hdfs也提供了手动执行shell命令:hadoopfs‑expunge的方式来清理回收站中历史检查点数据的方法,但是此方法仅适用当前操作用户的垃圾回收站。10.然而,hdfs垃圾回收站仅对已经删除(逻辑删除)的文件或目录进行定期清理,需要对文件或目录进行事先逻辑删除,才能够使用到hdfs垃圾回收站。此外,垃圾回收站无法实现根据数据的冷热或生存时间进行自动清理的功能。技术实现要素:11.有鉴于此,本公开提供一种hdfs文件自动清理方法、装置及存储介质,用于解决hdfs中无法基于生存时间对文件进行自动清理的技术问题。12.图1为本公开提供的hdfs文件自动清理方法的步骤流程图,该方法应用于hdfs中的名称节点namenode,该方法包括:13.步骤101.当接收到为hdfs文件新增用于存储文件存活时间的扩展属性的请求时,从元数据中获取文件的文件标识,并根据所述扩展属性中的文件存活时间计算文件删除截止时间戳,将所述文件的文件标识及文件删除截止时间戳记录到文件存活时间记录表中;14.步骤102.按预设扫描周期扫描所述文件存活时间记录表,当发现超过文件删除截止时间戳的记录时,基于该记录中的文件标识,通过元数据命名空间树获取对应的文件名,根据文件名删除对应的文件。15.进一步地,所述方法还包括:当所述namenode中的元数据管理服务启动时,根据元数据命名空间树完成对hdfs上所有文件的遍历,从中获取所有文件的所述扩展属性,完成所述文件存活时间记录表的初始化。16.进一步地,所述文件存活时间记录表为位于内存中的哈希表。17.进一步地,当接收到删除hdfs文件的请求时,判断请求删除的文件是否有用于存储文件存活时间的扩展属性,若有所述扩展属性则删除所述文件存活时间记录表中对应的记录。18.进一步地,当接收到查询hdfs文件的存储时间的请求时,通过hdfs文件系统提供的应用编程接口api获取所述扩展属性及从所述文件存活时间记录表获取文件删除截止时间戳返回给查询端。19.图2为本公开一实施例提供的一种hdfs文件自动清理装置结构示意图,该装置200中的各功能模块可以采用软件、硬件或软硬件相结合的方式实现。各模块可部署在一个硬件设备上实施上述方法的所有步骤,也可分散部署在不同硬件设备上由多个硬件设备分别实施上述方法中的一个或若干步骤从而共同实施以实现本公开的发明目的。当由多个硬件设备共同实施时,由于各硬件设备之间相互协作的目的是共同实现本发明目的,一方的动作和处理结果确定了另一方的动作执行的时机及可能获得的结果,因此,在逻辑上可视为各模块彼此之间具有相互指挥和控制关系。本公开一实施例以应用在一个节点为例,将该装置200应用于hdfs中的名称节点namenode,该装置包括:20.属性添加模块201,用于在接收到为hdfs文件新增用于存储文件存活时间的扩展属性的请求时,从元数据中获取文件的文件标识,并根据所述扩展属性中的文件存活时间计算文件删除截止时间戳,将所述文件的文件标识及文件删除截止时间戳记录到文件存活时间记录表中;21.自动清理模块202,用于按预设扫描周期扫描所述文件存活时间记录表,当发现超过文件删除截止时间戳的记录时,基于该记录中的文件标识,通过元数据命名空间树获取对应的文件名,根据文件名删除对应的文件。22.进一步地,所述装置200还包括:23.初始化模块203,用于在所述namenode中的元数据管理服务启动时,根据元数据命名空间树完成对hdfs上所有文件的遍历,从中获取所有文件的所述扩展属性,完成所述文件存活时间记录表的初始化。24.进一步地,所述装置200还包括:25.删除模块204,用于在接收到删除hdfs文件的请求时,判断请求删除的文件是否有用于存储文件存活时间的扩展属性,若有所述扩展属性则删除所述文件存活时间记录表中对应的记录。26.进一步地,所述装置200还包括:27.属性获取模块205,用于在接收到查询hdfs文件的存储时间的请求时,通过hdfs文件系统提供的应用编程接口api获取所述扩展属性及从所述文件存活时间记录表获取文件删除截止时间戳返回给查询端。28.图3为本公开一实施例提供的一种电子设备结构示意图,该设备300包括:诸如中央处理单元(cpu)的处理器310、通信总线320、通信接口340以及存储介质330。其中,处理器310与存储介质330可以通过通信总线320相互通信。存储介质330内存储有计算机程序,当该计算机程序被处理器310执行时即可实现本公开提供的hdfs文件自动清理方法的各步骤。29.其中,存储介质可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non‑volatilememory,nvm),例如至少一个磁盘存储器。另外,存储介质还可以是至少一个位于远离前述处理器的存储装置。处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field‑programmablegatearray,fpga)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。30.本公开实施例为hdfs文件增加存储文件存活时间的扩展属性,根据文件存活时间计算文件删除截止时间戳,通过文件存活时间记录表记录所有文件的文件标识和文件删除截止时间戳,通过周期性的清理操作自动清理超过存活时间的文件。本公开解决了hdfs中对文件没有生命周期管理的缺陷,避免了一些消费性、无价值、历史归档等冷数据一直占用宝贵的存储资源,节省了人工处理删除数据的成本,提高了数据处理删除的效率和存储空间的价值。附图说明31.为了更加清楚地说明本公开实施例或者现有技术中的技术方案,下面将对本公开实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本公开实施例的这些附图获得其他的附图。32.图1为本公开一实施例提供的hdfs文件自动清理方法的步骤流程图;33.图2为本公开一实施例提供的一种hdfs文件自动清理装置结构示意图;34.图3为本公开一实施例提供的一种电子设备结构示意图;35.图4为本公开一实施例中文件自动清理装置执行文件清理的过程示意图。具体实施方式36.在本公开实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本公开实施例。本公开实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。本公开中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。37.应当理解,尽管在本公开实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。38.hdfs的扩展属性是依照linux的扩展属性来建模的。一个扩展属性就是一个名值对name‑valuepair,包含一个字符串名字和一个二进制值。扩展属性名必须依照一个特定的命名空间前缀命名,要新增一个ttl属性,需要创建在一个命名空间之中,例如ttl的属性名声明为user.ttl,这说明ttl属性在user的命名空间中。多个扩展属性可以关联同一个inode。hdfs包含5个合理的命名空间:user,trusted,system,security,和raw。每个命名空间拥有不同的访问限制。39.用户命名空间即user命名空间是被客户端应用程序使用的命名空间。在user命名空间访问扩展属性需对应的文件权限来控制访问。40.本公开一实施使用原生的hdfs扩展属性,采用user命名空间,扩展属性名称name为user.ttl,值value为长整数long类型的值(单位:秒)的扩展属性来维护管理hdfs文件的生命周期,客户端发起对hdfs上文件的扩展属性user.ttl新增、更新或删除操作请求后,在namenode服务接收端完成相应的操作响应后,获取当前操作的hdfs文件的文件标识inodeid和user.ttl属性值,然后根据系统当前时间加上设置的存活时间计算出该文件的删除截止时间戳(例如用unix时间戳表示),并把inodeid和删除截止时间戳更新至文件清理服务模块timetolivefilecleaner(namenode中新增的负责维护管理hdfs文件的生命周期的服务)的内存中的文件存活时间记录表中,该表可使用哈希表hashtable的方式组织,timetolivefilecleaner中自动清理线程autoemptierthread会自动遍历内存记录表中濒临删除截止时间或已经到达删除截止时间的文件inodeid,通过namenode命名空间树fsdirectory提供的方法publicinodegetinode(longinodeid)获取inode对象,进而再通过inode对象的getfullpathname()转化为完整的文件路径名,最后完成对文件的删除操作。41.timetolivefilecleaner服务在namenode服务启动时完成hdfs中所有文件的遍历并完成扩展属性user.ttl的加载以及内存hashtable中inodeid与删除截止时间戳的初始化。另外值的说明的一点:采用inodeid作为缓存文件索引可以避免完整文件名占用较多的内存空间以及hdfs文件重命名导致的文件索引更新操作。42.图4为本公开一实施例中文件自动清理装置执行文件清理的过程示意图,详细的hdfs定期文件自动清理过程包括:43.步骤401.hdfs中namenode中的元数据管理服务启动时,自动清理装置即timetolivefilecleaner根据元数据命名空间树完成对hdfs上所有文件的遍历,获取所有文件的扩展属性user.ttl,进而完成对内存中的文件存活时间记录表的初始化。44.步骤402.客户端client发起对hdfs上文件的扩展属性user.ttl的新增、更新或删除操作的请求后,在namenode元数据管理服务完成针对扩展属性的相应的新增、更新或删除操作的处理后,从元数据中获取该文件的唯一性标识inodeid作为timetolivefilecleaner中文件存活时间记录表的文件索引key,并将元数据中该文件的扩展属性user.ttl的生存时间值加上当前的系统时间,得到文件删除截止时间戳,将文件删除截止时间戳作为值value,将key和value新增到timetolivefilecleaner内存中的文件存活时间记录表中,或修改文件存活时间记录表中key对应的记录。45.步骤403.客户端client对hdfs上的文件进行删除时,需要对删除请求进行拦截,判断待删除的文件是否有user.ttl扩展属性,若有扩展属性则需要删除timetolivefilecleaner内存中的文件存活时间记录表中对应的记录,避免autoemptierthread线程在文件清理时无效。46.步骤404.timetolivefilecleaner中autoemptierthread每秒到内存hashtable中扫描即将过期(10s内)和已经过期的文件标识inodeid,对于已经过期的inodeid,通过namenode元数据命名空间树提供的相关方法来获取对应的文件名,最后根据文件名删除文件。对于即将过期的文件索引则缓存起来计算好删除时间点并与下一秒内存hashtable的扫描结果进行合并,对到达删除时间点的文件进行及时删除。47.步骤405.客户端client获取hdfs文件的user.ttl扩展属性存活时间设置以及删除截止时间的过程中,在向客户端返回user.ttl扩展属性的同时,还反馈timetolivefilecleaner服务计算出来的该文件的删除截止时间戳,以供客户端查看文件在什么时间点将会被删除掉。48.本公开支持以脚本方式为hdfs文件增加、修改、删除、获取文件存活时间user.ttl扩展属性,以下是通过hdfsshell的方式实现的示例:49.(1)为hdfs上/tmp/dir1/data.txt文件增加user.ttl扩展属性设置文件存活时间为600秒的方法为:50.hadoopfs‑setfattr‑n"user.ttl"‑v600/tmp/dir1/data.txt51.(2)修改hdfs上/tmp/dir1/data.txt文件的user.ttl扩展属性中文件存活时间为1200秒的方法为:52.hadoopfs‑setfattr‑n"user.ttl"‑v1200/tmp/dir1/data.txt53.(3)删除hdfs上/tmp/dir1/data.txt文件的user.ttl扩展属性中文件存活时间设置的方法为:54.hadoopfs‑setfattr‑x"user.ttl"/tmp/dir1/data.txt55.(4)获取hdfs上/tmp/dir1/data.txt文件的user.ttl扩展属性值及删除截止时间戳的方法为:56.hadoopfs‑getfattr‑n"user.ttl"/tmp/dir1/data.txt57.返回内容:58.#file:/tmp/dir1/data.txt59.user.ttl="1200","1603234541"60.通过hdfsjavaapi的方式61.可以采用hdfs的filesystem的实现类distributedfilesystem的设置扩展属性方法setxattr和获取扩展属性值的方法来管理hdfs文件的存活时间。62.publicvoidsetxattr(pathpath,finalstringname,finalbyte[]value,finalenumset<xattrsetflag>flag)[0063]publicbyte[]getxattr(pathpath,finalstringname)[0064]关于上述api的使用方法本公开不再赘述。[0065]应当认识到,本公开的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术,包括配置有计算机程序的非暂时性存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本公开描述的过程的操作,除非本公开另外指示或以其他方式明显地与上下文矛盾。本公开描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。[0066]进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本公开的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、ram、rom等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本公开所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本公开所述的方法和技术编程时,本公开还包括计算机本身。[0067]以上所述仅为本公开的实施例而已,并不用于限制本公开。对于本领域技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1