海量小文件处理方式——Improve HAR
改进的HDFS结构包含两部分:
- 用于聚合小文件为大文件的客户端组件,client;
- 用于缓存资源管理的数据结点组件,data node;
具体架构图如下:
改进的HDFS模型是基于索引的。存在依赖关系的、同一目录下的小文件可以聚合为一个大文件,依次来减少每一个小文件元数据都单独存储在NameNode中对于NameNode结点内存的消耗。
缓存策略可以增加小文件读速率。缓存管理器部署在DataNode结点,这样当每一次读取小文件时,可以首先从缓存中获取,而非磁盘。想想看,如果读文件不在缓存中,那么不得不到DataNode结点的磁盘获取。磁盘和内存的速率非一个数量级!。
文件整合的设计:每一个合并后的大文件包含被合并小文件的文件大小、在大文件中的偏移量,这些信息被整合在大文件索引文件中。
文件整合程序的功能如下:
- 就特定目录下的小文件排序,之后将小文件一个个合并为大文件;
- 确定待合并小文件总体的数量;
- 确定合并后大文件大小,并且与HDFS默认块大小比较。
索引文件是依据每一个小文件的大小、偏移量的创建的。为了在HDFS块中存储大文件,需要确保大文件大小不能大于块大小(默认HDFS块大小为64M)。
如果合并后的文件大小大于HDFS块大小,则合并后的文件需要先分片,再存储到不同的HDFS块中。
基于上述描述,识别大文件中每个文件的偏移量和顺序,并据此构建索引文件,从而结束文件整合过程。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
其实看上面的流程,我们发现Improve HAR也存在一些问题,比如合并后的大文件查找,如果是随机查,也会性能很差。如果索引采用hash方式可以适度缓解该问题。
- 点赞
- 收藏
- 关注作者
评论(0)