问题:hadoop中目录,文件和块都会以对象的形式保存在NameNode的内存中,大概每个对象会占150bytes。小文件数量多会大量占用namenode的内存; 使namenode读取元数据速度变慢, 启动时间延长; 还因为占用内存过大, 导致 gc时间增加等。
解决方案:
两个角度, 一是从根源解决小文件的产生, 二是解决不了就选择合并.
从数据来源入手, 如每小时抽取一次改为每天抽取一次等方法来积累数据量.
如果小文件无可避免, 一般就采用合并的方式解决. 可以写一个MR任务读取某个目录下的所有小文件, 并重写为一个大文件