海量小文件处理方式——EXtended HDFS

举报
敏敏君主 发表于 2021/01/21 09:40:07 2021/01/21
【摘要】         上一篇我们说了Improve HAR机制在读方面还是存在性能问题,这篇我们就来聊聊这个问题的解决方案之一——EXtended HDFS。        Extended HDFS,即EHDFS。也是基于索引的,解决索引文件中小文件数量过大、引起更新索引困难的问题。为了改善HDFS读性能,EHDFS采用了预取方式。下面我们来看看“预取”方式是什么。        EHDFS有4...

        上一篇我们说了Improve HAR机制在读方面还是存在性能问题,这篇我们就来聊聊这个问题的解决方案之一——EXtended HDFS。

        Extended HDFS,即EHDFS。也是基于索引的,解决索引文件中小文件数量过大、引起更新索引困难的问题。为了改善HDFS读性能,EHDFS采用了预取方式。下面我们来看看“预取”方式是什么。

        EHDFS有4个技术点用于在HDFS处理小文件改善效率方面扮演重要角色。4个技术点分别是:

  1.         文件合并;
  2.         文件mapping;
  3.         文件预取;
  4.         文件提取;

        具体的四部分图如下:

       

        文件合并:在小文件合并时,NameNode只维护合并后的文件,而不是所有小文件。每一个存储块开头的地方存储了索引表,之后是文件数据。表中包含了每个小文件实体,表存储在存储块中。每一个表的实体由(偏移量offset,长度length)对组成。合并后的存储块结构如下图所示:

       

         扩展实体结构如下:

 由(offset,length)组合的key,value对,和文件数据组成。

          文件mapping:file mapping是这样一个程序,它将小文件mapping到一个大文件中,然后将大文件存入块中。一个包含小文件和合并文件名的请求被发送到

Namenode,用于获取所需小文件的位置。

          NameNode为每个合并后的文件维护了一个叫做COnstituentFileMap的数据结构。用于映射小文件和合并后逻辑块的关系。下图是ConstituentFileMap结构体的结构:

         

            预取:安装在NameNode中。文件合并并不能提升文件读性能。仅仅是减少了元数据占用NameNode节点的内存大小。NameNode依然制约着文件读的性能。所以我们采用预取方式来预取元数据来改善该性能瓶颈。

            当读操作执行时,先从预取数据中读取,如果没有再从NameNode中获取。

            文件提取:安装在DataNode中。即从块中提取文件的流程。当读一个文件时,客户端指定小文件名称和合并后文件名称,这两个信息用于获取下面的信息:

  •             存储文件的块;
  •             存储块的DataNode;
  •             NameNode中的索引实体数;

            ----------------------------------------------------------------------------------------------------------------------------------------------------------

            好了,至此几种常见的HDFS处理海量小文件的方式就介绍完了。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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