Hadoop学习之小文件及其处理方式

小文件定义:

小文件是远小于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之间。

原文地址:https://www.cnblogs.com/atBruce/p/12387583.html