MapReduce小文件问题产生原因和解决方案,全网最全最精炼

1.产生原因:

1、 现在我们越来越多的将Hadoop用于(准)实时计算,在做数据抽取时处理的频率可能是每小时,每天,每周等,每次可能就只生成一个不到10MB的文件。
2、数据源有大量小文件,未做处理直接拷贝到Hadoop集群。
3、MapReduce作业的配置未设置合理的reducer或者未做限制,每个reduce都会生成一个独立的文件。另外如果数据倾斜,导致大量的数据都shuffle到一个reduce,然后其他的reduce都会处理较小的数据量并输出小文件。

2.解决方案:

2.1 HDFS的sync()方法

第一种情况,文件是许多记录(Records)组成的,那么可以通过调用HDFS的sync()方法(和append方法结合使用),每隔一定时间生成一个大文件。或者,可以通过写一个程序来来合并这些小文件

2.2 使用序列文件

(SequenceFile)。这种方法的思路是,使用文件名(filename)作为key,并且文件内容(file contents)作为value

2.3Hadoop Archive或者HAR

是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问

你可能感兴趣的:(MapReduce小文件问题产生原因和解决方案,全网最全最精炼)