基于ARC替换算法的HDFS小文件缓存管理方法与流程

文档序号:12963772阅读:489来源:国知局
本发明涉及计算机hdfs分布式文件系统
技术领域
:,特别涉及hdfs中一种小文件的缓存管理方法。
背景技术
::伴随着移动互联网技术的高速发展以及电子商务的蓬勃发展,以微博、微信为代表的自媒体应用、以及淘宝为代表的电商网站等,迅速成为web应用的排头兵。这些自媒体应用、社交分享平台的用户从原来的信息接收者转变成为了信息的提供者,他们随时随地都在向平台上传图片等各种文件信息。由此造成的一个情况便是:网络上产生了大量的小文件,并且这些小文件迅速充斥了整个互联网。在海量小文件产生的科学计算和互联网应用场景中,如何高效访问小文件成为hdfs面临的一个巨大挑战。hdfs是hadoop的主要存储框架,它采用主从结构,由名字节点(namenode)和数据节点(datanode)组成。名字节点管理文件系统的命名空间,数据节点负责实际数据块的存储。hdfs的数据节点在配置存储目录时通常将数据配置在硬盘中,客户端通过访问硬盘获取数据。然而,在海量的小文件中存在着大量的“热点数据”,这些数据会被各应用频繁地访问,因此,如果能够对这类“热点数据”进行缓存处理,将大大减少hdfs反复读取硬盘所带来的巨大时间消耗。针对缓存替换算法主要有两种:基于时间局部性的缓存管理算法和基于访问频率的缓存管理算法。基于时间局部性的lru类算法重点关注访问数据的近期特性,每次置换的都是最久未访问的数据块。而基于访问频率的lfu类算法则重点关注访问数据的频率特性,每次置换的都是频率最小的数据块,保存了很多高频数据项。但是,对于lru类算法,当顺序读取大量的数据时,这些数据会充满整个缓存空间,当缓存被存满后,若想放入新的缓存数据,则需要淘汰最近最少使用的数据,在这种情况下,缓存中存放的永远是新读入的数据,而不是真正需要缓存的数据。同时,在lfu类算法中,新的数据只要不被频繁读取就会被淘汰,在实际应用中也存在很大的不足。为了吸收两种算法中的有益想法,很多算法在时间局部性和访问频率两个特性之间寻求平衡点,arc(adjustablereplacementcache)替换算法是其中的佼佼者,它也可以用于hdfs的小文件管理。因此,本发明公布了一种基于arc替换算法的hdfs小文件管理方法,arc能够利用lru和lfu的优点,避免它们的缺点,具体的arc实现过程可以参见文献《arc:aself-tuning,lowoverheadreplacementcache》。技术实现要素:本发明解决hdfs分布式文件系统以流式的方式访问大文件时效率很高,但是当海量小文件的访问特别是频繁访问重复的小文件时效率比较低的问题。为了解决上述技术问题,本发明采用如下技术方案:基于arc替换算法的hdfs小文件缓存管理方法,首先在数据节点上使用tmpfs构建数据缓存区,其中,tmpfs是linux/unix系统上的一种基于内存的文件系统。在namenode端集成两个模块:判断模块和决策模块,在datanode集成一个执行模块。其次,将判断模块、决策模块和执行模块作为三个阶段对小文件进行缓存替换操作。最后,当需要缓存小文件数据块时,namenode将与数据块存储的datanode进行通信,并发出指令将数据块缓存在数据节点的高速缓存中。所述判断模块首先判断请求信息类型,如果是访问请求,再判断访问文件大小是否小于阈值tf,如果是,则将该文件视为小文件,并使用决策模块的arc缓存替换算法进行处理,否则不做缓存处理;如果是创建、删除信息,将直接交给执行模块处理。在文件的访问过程中,所请求小文件如果存储在缓存中,即为缓存命中,否则未能命中,然后根据访问情况及缓存空间使用情况按照arc算法进行文件的缓存替换操作。所述决策模块使用一个缓存列表来管理缓存区的文件,并根据缓存列表来选择要替换的缓存文件对象,再由执行模块按照决策模块的指令进行文件缓存替换操作。缓存管理方法可分为客户端、名字节点和数据节点三个部分,客户端通过rpc协议分别与名字节点和数据节点进行通信,完成对数据的访问操作。当客户端向集群提交i/o请求后,namenode可将请求分为三种类型:访问请求、创建请求和删除请求。当客户端向集群中的名字节点申请访问数据时,包括以下3个步骤:1)名字节点获得待访问的数据文件信息,判断该文件是否位于缓存中;2)若该文件已缓存,那么直接读取数据节点上缓存的文件数据,并使用arc算法更新缓存管理,此时为一次缓存命中,缓存中的数据将提供访问请求服务;3)若该文件不在缓存列表中,此时缓存未能命中,读取数据节点磁盘上的文件数据;然后判断是否可以缓存该文件,其中缓存条件为访问文件大小小于阈值tf;当缓存存储空间不足时使用arc缓存替换算法将访问频率低的文件数据块从缓存中移除,确保新访问的文件数据块存储在缓存中。当客户端向集群中的名字节点申请创建文件时,判断创建的文件是否已经存在hdfs中,是继续判断该文件是否存在于数据节点的缓存中,是则将新创建的文件数据块替换位于缓存和磁盘中旧的文件数据块,否则替换磁盘上的文件数据块;如果创建的文件不存在hdfs中,则将文件数据块放置在磁盘上。当客户端向集群中的名字节点申请删除文件时,判断删除的文件是否存在数据节点的缓存中时,是则删除缓存和磁盘中的文件数据块;否则,删除位于磁盘上的文件数据块。客户端与名字节点进行hadoop默认的rpc(remoteprocedurecallprotocol)通信,通过将客户端维护的缓存列表与名字节点记录的缓存数据项进行比较,如果不一致,则删除多余的缓存数据项。本发明的目标是在数据节点上缓存一部分高热度小文件数据块在内存中,避免频繁访问小文件时与磁盘交互而造成巨额开销,提高hdfs系统访问小文件的性能。本发明提出的缓存管理方法能针对hdfs中小文件的访问、创建、删除任务进行不同的处理操作。为了提高客户端在文件访问时的性能,本发明将可能被频繁访问的小文件数据块存储在数据节点的缓存中,因此,缓存对象会根据实际的访问情况动态替换。本发明使用arc缓存替换算法,该算法结合了lru和lfu的优点,能尽可能准确的缓存高热度小文件数据块。本发明提出的缓存替换管理方法解决了hdfs中小文件被各应用频繁访问时效率低下的问题,应用前景广阔,适合当hdfs系统中小文件较多且小文件经常被频繁访问的场景,本发明能大大减少hdfs反复读取硬盘所带来的时间消耗,提高任务的运行效率。附图说明图1是本发明的整个系统所包含的模块及模块间的关系图2是本发明对文件i/o请求处理过程图3验证了arc算法相对其他缓存替换算法在缓存命中率上的优越性具体实施方式为了更好的阐述本发明方案设计,下面结合附图和具体实施方式对本发明做进一步的详细说明。首先在数据节点上将tmpfs挂载到linux系统上,并将tmpfs挂载的目录设置为小文件缓存存储目录。当需要缓存小文件数据块时,namenode将与数据块存储的datanode进行通信,并发出指令将数据块缓存在数据节点的高速缓存中。如图1所示,在namenode端集成两个模块,分别是:判断模块和决策模块。在datanode集成一个执行模块。判断模块首先判断请求信息类型,如果是访问请求,然后判断访问文件大小是否小于阈值tf,如果是,则将该文件视为小文件,并使用决策模块的arc缓存替换算法进行处理,否则不做缓存处理;如果是创建、删除请求,将直接交给执行模块处理。决策模块实现了arc缓存替换算法,在文件的访问过程中,所请求小文件如果存储在缓存中,即为缓存命中,否则未能命中。然后根据访问情况及缓存空间使用情况按照arc算法进行文件的缓存替换操作。当文件需要进行缓存替换时通知执行模块,决策模块不直接添加或移除缓存文件对象。执行模块管理缓存对象的添加与删除。它负责根据判断模块和决策模块的指令,向缓存空间中添加和移除缓存对象。在决策模块中,使用一个缓存列表来管理缓存区的文件,根据缓存列表来选择要替换的缓存文件对象,然后执行模块按照决策模块的指令进行文件缓存替换操作。决策模块只保存存储在缓存中的文件信息,并没有保存文件数据。因此,决策模块每次从缓存列表中添加或移除缓存对象,数据并没有真正的在缓存区添加或删除,当执行模块触发时才进行文件替换操作。对于缓存数据的请求方案可分为客户端、名字节点、数据节点三个部分。在缓存优化方法中,数据节点负责缓存文件数据块,名字节点负责向数据节点发送缓存文件数据块指令,同时,名字节点和数据节点对客户端用户来说是透明的,且为客户端用户提供一系列的数据服务。客户端通过rpc协议分别与名字节点和数据节点进行通信,完成对文件的i/o请求操作。图2是本发明对文件i/o请求处理过程,当客户端向集群提交i/o请求后,namenode可将请求分为三种类型:访问请求、创建请求和删除请求。当客户端向集群中的名字节点申请访问数据时,总体可以概括为以下三个步骤:1.客户端获得待访问的数据文件信息,判断该文件是否位于缓存中。2.若该文件已缓存,那么直接读取数据节点上缓存的文件数据,并使用arc算法更新缓存管理,此时为一次缓存命中。3.若该文件不在缓存列表中,此时缓存未能命中,读取数据节点磁盘上的文件数据。然后判断是否可以缓存该文件,其中缓存条件为访问文件大小小于阈值tf。当缓存存储空间不足时使用arc缓存替换算法将访问频率低的文件数据块从缓存中移除,确保新访问的文件数据块存储在缓存中。当客户端向集群中的名字节点申请创建文件时,判断创建的文件是否已经存在hdfs中,是继续判断该文件是否存在于数据节点的缓存中,是则将新创建的文件数据块替换位于缓存和磁盘中旧的文件数据块,否则替换磁盘上的文件数据块。如果创建的文件不存在hdfs中,则将文件数据块放置在磁盘上。当客户端向集群中的名字节点申请删除文件时,判断创建的文件是否已经存在于数据节点的缓存中时,是则删除缓存和磁盘中的文件数据块。否则删除位于磁盘上的文件数据块。缓存中的数据可能会因为用户的操作而出现与低速实体数据不一致的情况,因hdfs系统本身具有数据一致性和数据持久化的特性,所以在本发明所提出的方案中,数据一致性只需要考虑客户端用户维护的缓存列表与名字节点中记录的缓存数据项是否一致即可。本文提出的策略是客户端与名字节点进行rpc通信,并将客户端维护的缓存列表与名字节点记录的缓存数据项进行比较,如果不一致,则删除多余的缓存数据项。arc算法能够很好地结合lru和lfu算法。即使是在访问模型经常发生变化的文件系统中,arc也能够同时捕获访问序列的时间局部性和访问频率两个特性,因此,arc算法能够拥有较高的缓存命中率。在小文件访问过程中,能尽可能使得访问的文件数据块位于数据节点的缓存中。图3验证了arc算法相对于其他缓存替换算法在缓存命中率的优越性,实验使用500个1mb大小规模的文件进行测试,测试从这500个文件中随机读取5000次。相关研究表明互联网上的文件访问符合zipf分布,因此实验随机读取文件采用的随机函数是zipf函数。从图3可以看出,arc缓存替换有着更高的访问命中率。而缓存命中率是提高小文件访问效率一个重要指标,缓存命中率越高,说明访问更多的发生在缓存区,访问效率也就越高。同时,缓存命中率越高,那么在缓存系统中文件变化也就小,从而在替换时所进行的写操作也就越少,读取时间也就越少。总体来说,缓存命中率越高hdfs的访问效率也就越高。因此,arc算法将很好的适应hdfs中小文件缓存替换操作。本发明解决hdfs分布式文件系统以流式的方式访问大文件时效率很高,但是当海量小文件的访问特别是频繁访问重复的小文件时效率比较低的问题。本发明的技术方法为:一种基于arc替换算法的hdfs小文件缓存管理方法,包括一个集群,集群包括一个namenode(名字节点)和多个datanode(数据节点),namenode能被多个客户端访问。本发明通过判断文件大小和访问热度将高热度小文件数据块缓存数据节点上,缓存区使用tmpfs构建。在文件访问过程中,根据arc缓存替换算法不断调整文件数据块存储的位置,使得缓存区能处理绝大多数小文件的访问请求,提高hdfs任务的运行效率。首先,缓存管理需要在数据节点上构建缓存区,本发明基于tmpfs作为数据缓存区,tmpfs是linux/unix系统上的一种基于内存的文件系统。tmpfs刚开始挂载到linux系统并不占内存存储空间,随着小文件在缓存区的缓存或移除,内存占用将会相应的增加或减少,因此,tmpfs的内存占用存储空间是动态变化的。其次,当需要缓存小文件数据块时,namenode将与数据块存储的datanode进行通信,并发出指令将数据块缓存在数据节点的高速缓存中。在namenode端集成两个模块,分别是:判断模块和决策模块。在datanode集成一个执行模块。判断模块首先判断请求信息类型,如果是访问请求,再判断访问文件大小是否小于阈值tf,如果是,则将该文件视为小文件,并使用决策模块的arc缓存替换算法进行处理,否则不做缓存处理;如果是创建、删除信息,将直接交给执行模块处理。决策模块实现了arc缓存替换算法,在文件的访问过程中,所请求小文件如果存储在缓存中,即为缓存命中,否则未能命中。然后根据访问情况及缓存空间使用情况按照arc算法进行文件的缓存替换操作。当文件需要进行缓存替换时通知执行模块,决策模块不直接添加或移除缓存文件对象。执行模块管理缓存对象的添加与删除,它负责根据判断模块和决策模块的指令,向缓存空间中添加和移除缓存对象。在决策模块中,使用一个缓存列表来管理缓存区的文件,并根据缓存列表来选择要替换的缓存文件对象,再由执行模块按照决策模块的指令进行文件缓存替换操作。决策模块只保存存储在缓存中的文件信息,并没有保存文件数据。因此,决策模块每次从缓存列表中添加或移除缓存对象,数据并没有真正的在缓存区添加或删除,当执行模块触发时才进行文件替换操作。再次,缓存管理方法可分为客户端、名字节点和数据节点三个部分,在缓存优化方法中,名字节点和数据节点对客户端用户来说是透明的,且为客户端用户提供一系列的数据服务。客户端通过rpc(remoteprocedurecallprotocol)协议分别与名字节点和数据节点进行通信,完成对数据的访问操作。当客户端向集群提交i/o请求后,namenode可将请求分为三种类型:访问请求、创建请求和删除请求。①.当客户端向集群中的名字节点申请访问数据时,总体可以概括为以下3个步骤:1.名字节点获得待访问的数据文件信息,判断该文件是否位于缓存中。2.若该文件已缓存,那么直接读取数据节点上缓存的文件数据,并使用arc算法更新缓存管理,此时为一次缓存命中,缓存中的数据将提供访问请求服务。3.若该文件不在缓存列表中,此时缓存未能命中,读取数据节点磁盘上的文件数据。然后判断是否可以缓存该文件,其中缓存条件为访问文件大小小于阈值tf。当缓存存储空间不足时使用arc缓存替换算法将访问频率低的文件数据块从缓存中移除,确保新访问的文件数据块存储在缓存中。②.当客户端向集群中的名字节点申请创建文件时,判断创建的文件是否已经存在hdfs中,是继续判断该文件是否存在于数据节点的缓存中,是则将新创建的文件数据块替换位于缓存和磁盘中旧的文件数据块,否则替换磁盘上的文件数据块。如果创建的文件不存在hdfs中,则将文件数据块放置在磁盘上。③.当客户端向集群中的名字节点申请删除文件时,判断删除的文件是否存在数据节点的缓存中时,是则删除缓存和磁盘中的文件数据块。否则,删除位于磁盘上的文件数据块。最后,缓存中的数据可能会因为用户的操作而出现与低速实体数据不一致的情况,因hdfs系统本身具有数据一致性和数据持久化的特性,所以在本发明所提出的方案中,数据一致性只需要考虑客户端用户维护的缓存列表与名字节点中记录的缓存数据项是否一致即可。本文提出的策略是客户端与名字节点进行rpc通信,并将客户端维护的缓存列表与名字节点记录的缓存数据项进行比较,如果不一致,则删除多余的缓存数据项。通常认为文件大小在5mb以内的文件称为小文件,因此本文将缓存文件的阈值tf设置为5mb。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1