MapReduce切片机制
2021/6/16 10:51:01
本文主要是介绍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切片机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升