hadoop 面试
HDFS 小文件影响
- 占用namenode的元数据内存
- mr中每个小文件会启动一个MapTask进行计算处理,而每个MapTask都会对应启动一个JVM进程,造成资源严重浪费
HDFS 解决方案
-
采用har归档,将多个小文件打包成一个har文件
-
读取小文件时,使用hadoop中提供的一种输入类ConbinFileInputFormat
-
有小文件场景开启JVM重用;如果没有小文件,不要开启JVM重用,因为会一直占用使用到的task卡槽,直到任务完成才释放
-
自定义Inputformat将小文件存储成SequenceFile文件
sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件