切片机制
2022/7/26 23:29:40
本文主要是介绍切片机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
InputFormat抽象类中的方法
- getSplits:对文件进行切片
- createRecordReader:将文件数据转换成key-value的格式
InputFormat中的默认使用的子类是FileInputFormat
FileInputFormat中的核心实现子类有四个
TextInputFormat:默认实现子类
读取的文件数据机制(类型:LongWritable Text): 以文件每一行的偏移量为key,每一行的数据为value进行key-value转换的 切片机制: 1. 有三个参数,minSize,maxSize,blockSize Math.max(minSize, Math.min(maxSize, blockSize)); 2. 先求出maxSize和blockSize的最大值,然后将求出的最小值和minsize求最大值,最大值就是切片的大小 3. maxsize和minsize是可以调整大小的,大小一调整,切片的大小就调整了 4. 如果处理的数据是多个文件,一个文件最少一个块 5. 两个文件数据,a 100M b 300M blocksize 128M 4个切片 a 单独一个切片 b 三个切片 切片机制再理解: 1. 获取输入的所有文件状态FileStatus 2. 如果有多个文件,每一个文件单独切片 5 3. 每一个文件单独切片之前,都会先判断一下文件是否能被切割(压缩包一般不能被切割的) 4. 如果文件能被切割,那么就会按照公式进行切片 Math.max(minSize, Math.min(maxSize, blockSize)); 举例:三个文件 a.txt 10M b.txt 100M c.txt 200M minsize 1 maxsize:Long_MAX_VALUE blocksize 128M 一共分成4片
举例
- 10片
- 将minSize调为300M
CombinerTextInputFormat
作用: 专门用来进行大量的小文件的处理 读取的文件数据机制(类型:LongWritable Text): 以文件每一行的偏移量为key,每一行的数据为value进行key-value转换的,同TextInputFormat 切片机制: 1. 先指定一个小文件的最大值 2. 逻辑切片: 对每一个文件按照设定值进行切割,如果小文件不大于指定值,那么是一块, 如果大于指定值但是小于指定值的两倍,平均切割成两个块, 如果大于指定值并且大于指定值的两倍,先按照最大值切成一个块,剩余值看看多大 3. 物理切片: 将分割好的块,前一个和后一个块累加,如果大于指定值,物理上分为一个切片 import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat; # 设置实现切片的子类:CombineTextInputFormat, 在设置输入路径前设置 job.setInputFormatClass(CombineTextInputFormat.class); FileInputFormat.setInputPaths(job, new Path("")); # 设置指定切片值 CombineTextInputFormat.setMaxInputSplitSize(job, 70*1024*1024);
举例
举例:设置指定值是10M,求5个文件大小为如下5M,11M,21M,8M,15M,求最终的切片值。 解: 先逻辑切片:5M 5.5M 5.5M 10M 5.5M 5.5M 8M 7.5M 7.5M 再物理切片:10.5M 15.5M 11M 15.5M 7.5M
KeyValueInputFormat
读取的文件数据机制(类型:LongWritable Text): 以文件每一行的偏移量为key,每一行的数据为value进行key-value转换的,同TextInputFormat 切片机制: 不是按照文件切片,按照指定的行数进行切片
NLineInputFormat
这篇关于切片机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?