针对上篇Hadoop关于处理大量小文件的问题和解决办法,本文补充讲解CombineFileInput类来处理大象小文件问题。
CombineFileInputFormat
与之前hadoop默认的FileInputFormat对原始数据划分输入片不同的是,默认的方式是将每一个文件划分成若干个splits,CombineFileInputFormat顾名思义是将多个文件合并成一个split,这种方式对于大量小文件来说,肯定会减小split数量,进而会减少mapper任务数。该类对划分数据块的主要步骤如下:
(1)每个节点的blocks。对该节点所有块遍历,累计其大小,如果大小超过设定maxSize,合并成一个split,如果都遍历完仍然有blocks没处理,判断该block