当前位置:网站首页>2020-08-24:什么是小文件?很多小文件会有什么问题?很多小文件怎么解决?(大数据)
2020-08-24:什么是小文件?很多小文件会有什么问题?很多小文件怎么解决?(大数据)
2020-11-06 21:50:00 【福大大架构师每日一题】
福哥答案2020-08-24:
知乎答案
1.小文件:
小文件是指文件大小明显小于 HDFS 上块(block)大小(默认64MB,在Hadoop2.x中默认为128MB)的文件。
2.小文件问题:
HDFS的小文件问题:
(1)HDFS 中任何一个文件,目录或者数据块在 NameNode 节点内存中均以一个对象形式表示(元数据),而这受到 NameNode 物理内存容量的限制。每个元数据对象约占 150 byte,所以如果有1千万个小文件,每个文件占用一个block,则 NameNode 大约需要2G空间。如果存储1亿个文件,则 NameNode 需要20G空间,这毫无疑问1亿个小文件是不可取的。
(2)处理小文件并非 Hadoop 的设计目标,HDFS 的设计目标是流式访问大数据集(TB级别)。因而,在 HDFS 中存储大量小文件是很低效的。访问大量小文件经常会导致大量的 seek,以及不断的在 DatanNde 间跳跃去检索小文件。这不是一个很有效的访问模式,严重影响性能。
(3)处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而任务启动将耗费大量时间甚至大部分时间都耗费在启动任务和释放任务上。
MapReduce上的小文件问题:
Map任务一般一次只处理一个块的输入(input。如果文件非常小,并且有很多,那么每一个 Map 任务都仅仅处理非常小的输入数据,并会产生大量的 Map 任务,每一个 Map 任务都会额外增加bookkeeping 开销。
-
为什么会产生大量的小文件
至少在两种场景下会产生大量的小文件:
(1)这些小文件都是一个大逻辑文件的一部分。由于 HDFS 在2.x版本才开始支持对文件进行追加,所以在此之前保存无边界文件(例如日志文件)一种常用的方式就是将这些数据以块的形式写入HDFS中。
(2)文件本身就是很小。比如对于一个很大的图片语料库,每一个图片都是一个单独的文件,并且没有一种很好的方法来将这些文件合并为一个大的文件。 -
解决方案
这两种情况需要有不同的解决方式:
(1)对于第一种情况,文件是许多记录组成的,那么可以通过调用 HDFS 的 sync() 方法(和 append 方法结合使用),每隔一定时间生成一个大文件。或者,可以通过写一个 MapReduce 程序来来合并这些小文件。
(2)对于第二种情况,就需要容器通过某种方式来对这些文件进行分组。Hadoop提供了一些选择:
①使用HAR File。Hadoop Archives (HAR files)是在 0.18.0 版本中引入到 HDFS 中的,它的出现就是为了缓解大量小文件消耗 NameNode 内存的问题。HAR 文件是通过在 HDFS 上构建一个分层文件系统来工作。HAR 文件通过 hadoop archive 命令来创建,而这个命令实际上是运行 MapReduce 作业来将小文件打包成少量的 HDFS 文件。对于客户端来说,使用 HAR 文件系统没有任何的变化:所有原始文件都可见以及可以访问(只是使用 har://URL,而不是 hdfs://URL),但是在 HDFS 中中文件个数却减少了。
②使用SequenceFile存储。文件名作为 key,文件内容作为 value。在实践中这种方式非常有效。比如对于10,000个100KB大小的小文件问题,可以编写一个程序将合并为一个 SequenceFile,然后你可以以流式方式处理(直接处理或使用 MapReduce) SequenceFile。
③使用HBase。如果你产生很多小文件,根据访问模式的不同,应该进行不同类型的存储。HBase 将数据存储在 Map Files(带索引的 SequenceFile)中,如果你需要随机访问来执行 MapReduce 流式分析,这是一个不错的选择。
版权声明
本文为[福大大架构师每日一题]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4553401/blog/4536619
边栏推荐
- An article will introduce you to HTML tables and their main attributes
- 事务的隔离级别与所带来的问题
- EOS founder BM: what's the difference between UE, UBI and URI?
- 使用 Iceberg on Kubernetes 打造新一代雲原生資料湖
- ES中删除索引的mapping字段时应该考虑的点
- 【自学unity2d传奇游戏开发】如何让角色动起来
- [efficiency optimization] Nani? Memory overflow again?! It's time to sum up the wave!!
- Ronglian completed US $125 million f round financing
- 一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
- 2020年第四届中国 BIM (数字建造)经理高峰论坛即将在杭举办
猜你喜欢
检测证书过期脚本
Look! Internet, e-commerce offline big data analysis best practice! (Internet disk link attached)
Share with Lianyun: is IPFs / filecoin worth investing in?
Metersphere developer's Manual
Summary of front-end interview questions (C, s, s) that front-end engineers need to understand (2)
ORA-02292: 违反完整约束条件 (MIDBJDEV2.SYS_C0020757) - 已找到子记录
How to turn data into assets? Attracting data scientists
Swagger 3.0 brushes the screen every day. Does it really smell good?
From overseas to China, rancher wants to do research on container cloud market
EOS founder BM: what's the difference between UE, UBI and URI?
随机推荐
Can you do it with only six characters?
image operating system windows cannot be used on this platform
Tron smart wallet PHP development kit [zero TRX collection]
Python basic data type -- tuple analysis
【自学unity2d传奇游戏开发】如何让角色动起来
【應用程式見解 Application Insights】Application Insights 使用 Application Maps 構建請求鏈路檢視
es创建新的索引库并拷贝旧的索引库 实践亲测有效!
mongo 用户权限 登录指令
统计项目代码行数
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
git远程库回退指定版本
【字节跳动 秋招岗位开放啦】Ohayoo!放学别走,我想约你做游戏!!!
Use modelarts quickly, zero base white can also play AI!
What knowledge do Python automated testing learn?
C語言I部落格作業03
Elasticsearch Part 6: aggregate statistical query
Summary of front-end performance optimization that every front-end engineer should understand:
Junit测试出现 empty test suite
Basic usage of GDB debugging
ORA-02292: 违反完整约束条件 (MIDBJDEV2.SYS_C0020757) - 已找到子记录