小文件: 是那些size比HDFS的block size(默认128M)小的多的文件
因为: 任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,每一个object占用150 bytes的内存空间。
如果有10million个文件,每一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息。文件在大的话,对内存要求会更多。
1 合并小文件方式:
a) 应用程序自己控制, 缺点是: 各类数据都混合在一起,以后无法区分
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CopyOfApp1 {
public static void main(String[] args) throws Exception {
// 0 初始化filesystem客户端
final Configuration conf = new Configuration();
final FileSystem fileSystem = FileSystem.get(new URI("