Hadoop - Hadoop中CombineFileInputFormat 理解

CombineFileInputFormat作用:将多个小文件打包成一个InputSplit提供给一个Map处理,避免因为大量小文件问题,启动大量任务。CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置
 

CombineFileInputFormat 原理

第一次:将同DN上的所有block生成Split

1.循环nodeToBlocks,获得每个DN上有哪些block

2.循环这些block列表

3.将block从blockToNodes中移除,避免同一个block被包含在多个split中

4.将该block添加到一个有效block的列表中,这个列表主要是保留哪些block已经从blockToNodes中被移除了,方便后面恢复到blockToNodes中

5.向临时变量curSplitSize增加block的大小

6.判断curSplitSize是否已经超过了设置的maxSize

a) 如果超过,执行并添加split信息,并重置curSplitSize和validBlocks

b) 没有超过,继续循环block列表,跳到第2步

7.当前DN上的block列表循环完成,判断剩余的block是否允许被split(剩下的block大小之和是否大于每个DN的最小split大小)

a) 如果允许,执行并添加split信息

b) 如果不被允许,将这些剩余的block归还blockToNodes

8.重置

9.跳到步骤1

第二次:对不再同一个DN上但是在同一个Rack上的block进行合并(只是之前还剩下的block)

最后,对于既不在同DN也不在同rack的block进行合并(经过前两步还剩下的block)

总结:

合并,经过了3个步骤。同DN --> 同rack不同DN -->  不同rack

将可以合并的block写到同一个split中

consult:

https://blog.csdn.net/wawmg/article/details/17095125 

https://blog.csdn.net/u011750989/article/details/11890373 

猜你喜欢

转载自blog.csdn.net/tianyeshiye/article/details/88178443