写在前面

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系

解答

HDFS 存储大量小文件有什么问题?

小文件是指文件大小小于 HDFS 上 Block 大小的文件。 这样的文件会给 Hadoop 的扩展性和性能带来严重问题。

首先,在HDFS中,任何 Block、文件或者目录在内存中均以对象的形式存储,每个对象约占 150Byte。

如果有100000个小文件,每个小文件占用一个 Block,则 NameNode 大约需要2GB空间。

如果存储1亿个小文件,则 NameNode 需要约20GB空间。这样一来, NameNode 的内存容量严重制约了集群的扩展。

其次,访问大量小文件的速度远远小于访向几个大文件。

HDFS 最初是为流式访问大文件而开发的,如果访问大量小文件,则需要不断地从一个 DataNode跳到另个 DataNode,严重影响了性能,导致最后处理大量小文件的速度远远小于处理同等大小的大文件的速度。

每个小文件要占用一个 Slot,而 Task 启动将耗费大量时间,从而导致大部分时间都耗费在启动和释放 Task 上。

要想解决小文件的问题,就要想办法减少文件数量,降低 NameNode的压力。

通常有两种解决方法:一种是用户程序合并,另一种是从机制上支持小文件的合并。

用户程序合并

Hadoop自身提供了三种解决方案: HadoopArchive、 SequenceFile 和 CombineFileInputFormat

HadoopArchive

归档为*.har文件,该文件的内部结构如图所示。

创建存档文件的问题

  1. 存档文件的源文件目录及源文件都不会自动删除,需要手动删除。
  2. 存档的过程实际是一个 MapReduce 过程,所以需要 Hadoop 的 MapReduce 的支持
  3. 存档文件本身不支持压缩。
  4. 存档文件一旦创建便不可修改,要想从中删除或者増加文件,必须重新建立存档文件
  5. 创建存档文件会创建原始文件的副本,所以至少需要有与存档文件容量相同的磁盘空间

关于 Archive 的详情可以参考我的另一篇博客——一篇文章搞懂 HDFS 的 Archive 到底是什么

SequenceFile

详情请见我的另一篇博客——一篇文章搞懂 SequenceFile 到底是什么以及该怎么用

CombineFileInputFormat

CombineFileInputFormat是一种新的 InputFormat,用于将多个文件合并成一个单独的 Split。另外,它会考虑数据的存储位置。

通用合并方法

业界针对数据的不同特征,有一些合并优化的方法,可以降低文件数量、提高存储性能。

WebGIS 解决方案

在地理信息系统中,为了方便传输,通常将数据切分为KB大小的文件存储在分布式文件系统中。

论文结合 WebGIS 数据的相关特征,将相邻地理位置的小文件合并成个大的文件,并为这些文件构建索引。

论文中将小于 16MB 的文件当作小文件进行合并处理,将其合并成 64MB 的 Block 并构建索引。

BlueSky 解决方案

BlueSky 是中国电子教学共享系统,主要存放的是教学所用的 PPT 文件和视频文件,存放的载体为 HDFS 分布式存储系统。

在用户上传 PPT 文件的同时,系统还会存储些文件的快照。用户请求 PPT 时可以先看到这些快照,以决定是否继续浏览。

用户对文件的请求具有很强的关联性。当用户浏览 PPT 时,其他相关的 PPT 和文件也会在短时间内被访问,因而文件的访问具有相关性和本地性。

TFS解决方案

TFS(Taobao File System)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的 Linux机器集群上,可为外部提供高可靠和高并发的存储访问。

TFS为淘宝提供海量小文件存储,通常文件大小不超过1MB, 满足了淘宝对小文件存储的需求, 被广泛应用在淘宝的各项应用中。

它采用了HA架构和平滑扩容, 保证了整个文件系统的可用性和扩展性。

同时扁平化的数据组织结构可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为TFS提供了良好的读/写性能。

小文件社区改进HDFS-8998

社区在HDFS上进行了改进,HDFS-8998提供了在线合并的方案。

HDFS自动启动一个服务,将小文件合并成大文件。

其主要架构如图所示。

相比原生HDFS,新增一个 FGCServer 的后台服务,服务本身支持HA。元数据存储在 levelDB 中,文件和日志都存储在 HDFS 本身。

后台服务自动搜索小文件,合并符合规则的小文件到大文件。

小文件合并成大文件需要记录小文件在大文件里面的大小、偏移位置、对应关系等信息,这些元数据存储在 levelDB 中因为合并后原始文件的存储位置发生了变更,所以原HDFS的读写等接口的流程也发生了变更。

比如,要读取一个文件,需要先到 FGCServer 中获取小文件元数据、然后再到 HDFS 中获取对应的文件。

通过合并,减轻了 NameNode 的压力,增大了 HDFS 单个 NameNode 支持的文件个数。

HDFS存储大量小文件居然有这样的问题!看我怎么搞定它!相关推荐

  1. python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...

    原标题:用Python这个小工具,一次性把论文作图与数据处理全部搞定! 一入科研深似海-- 随着大学纷纷开学,"防脱发用生姜还是黑芝麻?", 研究僧们又开始为自己所剩无几的头发发愁 ...

  2. qlv格式的视频转换MP4格式文件,不需要任何软件,一个插件搞定

    qlv格式的视频转换MP4格式文件,不需要任何软件,一个插件搞定 插件法,此法对于网页视频有奇效 亲测:QQ浏览器,应用中心,搜索 猫抓,安装此应用插件,就可以直接下载腾讯视频,而且下载是MP4格式

  3. 阿里云HBase发布冷存储特性,助你不改代码,1/3成本轻松搞定冷数据处理

    9月27日,阿里云HBase发布了冷存储特性.用户可以在购买云HBase实例时选择冷存储作为一个附加的存储空间,并通过建表语句指定将冷数据存放在冷存储介质上面,从而降低存储成本.冷存储的存储成本仅为高 ...

  4. 使用计算机自带字体怎么用_在家办公不会扫描文件怎么办?用 iPhone 自带软件就搞定啦...

    好的生活,不难也不贵 据学霸君所知,因为疫情原因,大部分人现在都不用到公司上班,开启了 7 x 24 的在家上班之旅.对于学霸君这种搞文字工作的人来说,去不去公司其实真没多大差别,眼前一天电脑一把键盘 ...

  5. 风变编程存爬虫测单词小工具_快收下这个小工具,一次性把论文作图和数据处理全部搞定!...

    最近在后台多次收到量化研究科研领域同学的留言: "面对浩如烟海的学习资料和科研文献,了解科学前沿背景,总是没日没夜的搜集整理,但效果甚微呀?" "怎么控制实验仪器的敏感度 ...

  6. python小应用之整理手机图片_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...

    整理完这些资料已经凌晨3点了,困得眼睛都睁不开,一想到明天就截稿了,他只好随便拼凑一篇应付. 结果可想而知,导师还没看完第一页就把论文给退回来了,说论文通篇缺乏具体数据分析,研究计划就很粗糙,实施起来 ...

  7. caj文件怎么转换成pdf格式?三步搞定

    当我们需要查阅一些文献资料时,往往会遇到CAJ文件格式的问题.这种格式需要使用专业的阅读工具才能打开,让我们的阅读体验变得十分不便.为了解决这个问题,我们可以将CAJ文件转换成PDF文件格式.这样,无 ...

  8. excel一列求和_Excel超实用小技巧:快速求和和对齐,一秒搞定

    相信各位老师在办公中,经常会运用到excel表格制作,常规的表格制作操作复杂,且浪费时间,掌握一些excel制作小技巧,可以提升效率且操作简单,老师们可以学一学; 如何快速求和? 老师们在制作表格过程 ...

  9. 只能选择分卷文件的第一部分_文件太大如何分块压缩?BetterZip简单搞定

    为什么大文件需要分块压缩?首先,因为网络传输是存在time-out参数的,部分网站不支持断点续传,当文件上传时间过长时,与网站的连接会断开,导致文件上传失败.其次,大部分网盘会有单文件上传大小限制,通 ...

最新文章

  1. SAE下修改models里面字段
  2. all any 或 此运算符后面必须跟_PHP程序员必须会的 45 个PHP 面试题(第一部分)...
  3. 每日一博 - Java序列化一二事儿
  4. ABAP小写金额转大写
  5. 大数据(11) - kafka的安装与使用
  6. 大话数据结构02 :线性表链式存储 C++
  7. 前端学习(2149):webpack之ES6到ES5的转换
  8. python数据分析的步骤排序_Python数据分析
  9. springcloud Feign工程熔断器Hystrix
  10. Oracle查询指定表里的触发器
  11. Apache2.4使用require指令进行访问控制--允许或限制IP访问/通过User-Agent禁止不友好网络爬虫...
  12. hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计
  13. 五步git操作搞定Github中fork的项目与原作者同步
  14. 《软件体系结构》 第四章 软件体系结构描述
  15. 数据库工程师的几个发展方向
  16. SCAU软件开发基础C++复习
  17. 课程设计------学生考勤管理系统
  18. 第一、二章大数据与Hadoop的概述
  19. PDF 预览和下载你是怎么实现的?
  20. HTML层叠样式表(CSS)

热门文章

  1. 物联网应用技术竞赛 ——数据库添加新用户映射
  2. Heckman两步法 | 样本选择模型 处理效应模型
  3. iOS 支付宝好友分享
  4. springboot的jsp应该放在哪_SpringBoot 在项目中使用JSP
  5. Matplotlib 画图如何取消图边框
  6. TCP握手和挥手详解
  7. win10无法连接到win7系统更新服务器,win10系统提示无法连接到windows服务的解决方法...
  8. 论文阅读——Deep 3D Portrait from a Single Image(CVPR2020)
  9. 数据库安全小白紧急求助论坛大神,困扰许久
  10. UVa11134 - Fabled Rooks(贪心)