小文件定义:
小文件是远小于hdfs块大小的文件,在hdfs上任何一个文件都有对应的元数据信息
小文件的坏处:
1、小文件太多,响应的元数据就会多,占用空间太多且namenode维护起来不方便
2、小文件太多,启动的MapTask就会过,增加开销
处理小文件的方式:
一、Har归档
HDFS存档文件对内还是一个独立文件,对NameNode而言却是一个整体,减少NameNode的内存
1、归档:
hadoop archive -archiveName <归档文件名.har> -p <源文件路径> <目标地址>
2、查看归档文件
hadoop fs -ls -R har://<har文件>
3、解归档
hadoop fs -cp har://<要解归档的小文件> <目标路径>
二、CombineTextInputFormat
1、将默认的TextInputFormat替换为CombineTextInputFormat类
2、自定义虚拟存储切片最大值
三、Sequence File(自定义InputFormat实现类)
1、Swquence File由一系列的二进制k/v组成,如果key文件名,value为文件内容,则可以将小文件合并成一个大文件
2、因为设置了不可切片,最终所有文件都封装到了value中
四、开启JVM重用
1、一个Map运行在一个JVM上,开启重用的话,该Map在JVM上运行完毕后,JVM会继续运行其他Map
2、对于大量小文件Job,可以开启JVM重用会减少45%运行时间
3、mapreduce.job.jvm.numtasks的值在10-20之间。