https://blog.csdn.net/weixin_36815898/article/details/90764410
小文件:指文件size小于HDFS上block(dfs block size)大小的文件
小文件如何产生:
- 动态分区插入数据,产生大量的小文件,从而导致map数量剧增
- reduce数量越多,小文件也越多,reduce的个数和输出文件个数一致
- 数据源本身就是大量的小文件
- 实时流处理:比如我们使用 Spark Streaming 从外部数据源接收数据,然后经过 ETL 处理之后存储到 HDFS 中。这种情况下在每个 Job 中会产生大量的小文件。
大量小文件的弊端
- 增加map开销,每个切片split都要执行一次map任务,一个小文件就会对应一个split,一个map任务
- 增加namenode内存压力,每个小文件都要有与之对应的元数据。影响namenode性能
- 小文件过多将增加寻址次数,时间都花销的寻址上面。读取过多小文件数据的任务执行时,消耗过多的集群资源。mapreduce处理数据的最佳速度就是和集群中的传输速度相同
hdfs自带的小文件解决方案
- hadoop Archive(HAR):减少对namenode的负载
- 意思是将文件再次进行整理和保存,使之更易管理和保存。而Hadoop中的归档是在HDFS之上又构建了一个新的抽象层,叫HAR(Hadoop Archives