西安网站建设制作,色盲悖论,芜湖弋江区最新消息,宁波网站排名优化费用我们先简要了解下InputFormat输入数据
1.数据块与数据切片
数据块#xff1a; Block在HDFS物理上数据分块#xff0c;默认128M。数据块是HDFS存储数据单位 数据切片#xff1a; 数据切片只是在逻辑上对输入进行分片#xff0c;并不会物理上切片存储。数据切片是MapReduce…我们先简要了解下InputFormat输入数据
1.数据块与数据切片
数据块 Block在HDFS物理上数据分块默认128M。数据块是HDFS存储数据单位 数据切片 数据切片只是在逻辑上对输入进行分片并不会物理上切片存储。数据切片是MapReduce计算输入数据的单位一个切片对应启动一个MapTask
2.数据切片与MapTask并行度决定机制
一个Job的Map阶段并行度由客户端在提交Job时的切片数决定每一个Split切片分配一个MapTask并行实例处理默认情况下切片大小数据块大小切片时不考虑数据集整体而是针对每一个文件单独切片
3.TextInputFormat
TextInputFormat是默认的FileInputFormat实现类按行读取每条记录。键是文件中的位置LongWritable类型值是文本行Text类型
4.CombineTextInputFormat
4.1 应用场景
TextInputFormat按文件切片不管文件多小都会是一个单独的切片都会交给一个MapTask,这样如果大量小文件就会产生大量MapTask,影响性能 CombineTextInputFormat用于小文件过多场景它可以将多个小文件逻辑上规划到一个切片中这样多个小文件就可以交给一个MapTask处理
4.2 Driver中代码配置
job.setInputFormatClass(CombineFileInputFormat.class);
// 虚拟存储切片最大值设置为4M可根据小文件情况调整
CombineFileInputFormat.setMaxInputSplitSize(job, 4 * 1024 * 1024);4.3 切片机制
生成切片过程包括虚拟存储过程和切片过程
1假设有4个小文件abcd[读取时按字典顺序]大小分别为1.7M、5.1M、3.4M以及6.8M这四个小文件 2虚拟存储之后形成6个文件块大小分别为1.7M 2.55M、2.55M3.4M3.4M、3.4M因为ac文件小于4M分为一块;bd文件大于4M且小于2 * 4M且为了均匀考虑故均分为两块(如果有E文件大小为8.2M即8.22 * 4,则先逻辑划分出4M剩余4.2在按之前逻辑均匀划分) 3切片过程判断虚拟存储文件是否大于等于4M,是则单独形成一个切片否则跟下一个虚拟存储文件合并共同形成一个切片故abcd最终会形成3个切片大小分别为1.72.55M2.553.4M3.43.4M
欢迎关注公众号算法小生与我沟通交流