海量小文件处理方式——新增组件完成小文件识别、合并与预取

举报
敏敏君主 发表于 2021/01/26 11:46:38 2021/01/26
【摘要】        上周我们一起了解了下合并算法,这篇我们开始聊聊组件架构。       整体架构如下图所示:由原来的HDFS的NameNode、DataNode,与新增的组件中各个模块组成——Building TaskQueue(小文件队列)、File Merging Strategy(小文件合并)、Index File(索引文件)、Prefetching(预取)。        除了HDFS原...

       上周我们一起了解了下合并算法,这篇我们开始聊聊组件架构。

       整体架构如下图所示:由原来的HDFS的NameNode、DataNode,与新增的组件中各个模块组成——Building TaskQueue(小文件队列)、File Merging Strategy(小文件合并)、Index File(索引文件)、Prefetching(预取)。

        除了HDFS原来的Namenode和DataNode组件之外,我们来聊聊其他新增的组件模块。

        Building TaskQueue(小文件队列)—— 用于判断客户端上传的文件是否为小文件,如果不是小文件则直接发给HDFS处理;如果是小文件则存入TaskQueue队列。主要用于合并小文件做准备。

        File Merging Strategy(小文件合并)—— 用于小文件的合并(合并算法上一篇已经讲了)。主要作用是减少文件存储对于NameNode内存的消耗。

        Index File(索引文件)—— 用于建立小文件和合并后文件之间的索引。主要用于提升小文件查询效率。

        Prefetching(预取)—— 用于将用户常用小文件缓存起来,提升小文件查询性能。


文件存储流程:

  1. 客户端上传文件后,先判断是否为小文件,小文件则存入TaskQueue队列;非小文件则转给HDFS处理;
  2. 启动针对TaskQueue的监控,一旦发现TaskQueue存入文件,则开始合并;
  3. 依据特点算法合并小文件,并建立索引文件;
  4. 将合并后的文件存入NameNode和DataNode。

文件读取流程:

  1. 客户端查询文件时,先从预取空间获取,如果预取空间有,则直接返回,如果没有则从DataNode获取;
  2. 从DataNode获取小文件后,将小文件返回给客户端,同时将小文件缓存如预取空间。

注:预取空间采用最久未被使用原则替换。比如预取空间只能存入10个文件,假设预取空间已经缓存了10个文件。当用户查询下一个文件时,该文件在预取空间没有获取到,则从DataNode获取,同时将最新一次查询到的小文件存入预取空间,替换到预取空间里面最长时间没有被使用到的文件。

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。