https://blog.csdn.net/u010010664/article/details/83105174
1、 HDFS上的小文件问题
现象:在现在的集群上已经存在了大量的小文件和目录。
方案:文件是许多记录(Records)组成的,那么可以通过调用HDFS的sync()方法和append方法结合使用,每隔一定时间生成一个大文件。或者可以通过写一个程序来来合并这些小文件。
Hadoop archive -archiveName test.har -p /A/B/C/D/ E1/F1 E2/F2 /A/G/ 小文件归档命令
2、 MapReduce上的小文件问题
如果文件非常小,并且拥有大量的这种小文件,那么每一个map task都仅仅处理非常小的input数据,因此会产生大量的map tasks。
Hadoop内置提供了一个 CombineFileInputFormat 类来专门处理小文件,其核心思想是:根据一定的规则,
将HDFS上多个小文件合并到一个 InputSplit中,然后会启用一个Map来处理这里面的文件,以此减少MR
整体作业的运行时间。CombineFileInputFormat类继承自FileInputFormat,主要重写了List getSplits(JobContext job)方法;
这个方法会根据数据的分布,mapreduce.input.fileinputformat.s

本文详细探讨了Hadoop在HDFS、MapReduce和Hive上遇到的小文件问题及其解决方案。针对HDFS,建议通过归档或程序合并小文件。在MapReduce中,利用CombineFileInputFormat减少map任务数量。而在Hive中,通过设置参数如mapred.max.split.size和使用CombineHiveInputFormat来合并小文件,并调整reduce任务的数量以优化输出文件的大小。
最低0.47元/天 解锁文章
613

被折叠的 条评论
为什么被折叠?



