-
大量小文件会有什么影响
-
存储层面:
1个文件块占用NameNode150字节
一亿个小文件150字节体量就很大了。
128G能存储多少文件块? 128102410241024byte/150字节 = 9亿文件块 -
计算层面:
每个小文件都会启动一个MapTask,占用了大量计算资源
-
-
怎么解决
- 采用har归档方式,将小文件归档
- 采用CombineTextInputFormat
- 有小文件 场景开启JVM重用;如果没有小文件,就不开启,因为会一直占用使用到的task卡槽,直到任务完成才释放。
JVM 重用可以使得 JVM 实例在同一个 job 中重新使用 N 次,N 的值可以在 Hadoop 的 mapred-site.xml 文件中进行配置。通常在 10-20 之间
<property>
<name>mapreduce.job.jvm.numtasks</name>
<value>10</value>
<description>How many tasks to run per jvm,if set to -1 ,there is no limit</description>
</property>