C/C++教程

MapReduce切片机制

本文主要是介绍MapReduce切片机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

切片机制

FileInputFormat中默认的切片机制

 

切片的大小=块的大小=128M(如果程序运行在本地则是32M)

切片的标准是看文件大的小是达到块大小的1.1倍(140.8M),如果达到则按128M进行切片,如果没达到,则其本身就是一个切片。切完第一片剩下的数据在进行比较,如果达到块大小的1.1被,依然按照128M切片,不够则本身为一个切片,以此类推。

CombineTextInputFormat切片机制

关于大量小文件的优化策略:

默认情况下FileInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个maptask,这样如果有大量小文件,就会产生大量的maptask,处理效率极其低下。

CombineTextInputFormat切片机制

先设置一个文件切片的最大值

job.setInputFormatClass(CombineTextInputFormat.class);//设置 CombineTextInputFormat切片机制

CombineTextInputFormat.setMaxInputSplitSize(job, 4194304); //设置为4M

1虚拟存储过程:(不会切片)

将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较,如果不大于设置的最大值,逻辑上划分一个块。如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块。当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)

 

例如:设置的最大值为4,一个文件的大小如果小于4,则本身就为一块,如果大于4的2倍(8),则按照设置的最大值4M存储,如果文件大于4小于8,则存储为两个相等大小文件

 

文件大小 < 4 不动

8 > 文件大小 > 4 平分成两份

文件>8 按设置的最大值(4)存储

2切片过程:

(a)判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个

切片。

(b)如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片。

(c)测试举例:有4个小文件大小分别为1.7M、5.1M、3.4M以及6.8M这四个小文件,则虚拟存

储之后形成6个文件块,大小分别为:

1.7M,(2.55M、2.55M),3.4M以及(3.4M、3.4M)

最终会形成3个切片,大小分别为:

(1.7+2.55)M,(2.55+3.4)M,(3.4+3.4)M

这篇关于MapReduce切片机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!