FileInputFormat切片机制
FileInputFormat切片机制
FileInputFormat的切片方法getSplits
本示例以1G的一个文件来进行分析,块大小为128M,则1G数据有8个块
public List<InputSplit> getSplits(JobContext job) throws IOException {long minSize = Math.max(this.getFormatMinSplitSize(), getMinSplitSize(job));//若不进行配置默认是1Llong maxSize = getMaxSplitSize(job);//若进行配置默认是9223372036854775807LList<InputSplit> splits = new ArrayList();//最终返回的切片信息List<FileStatus> files = this.listStatus(job);//job任务的文件,本次示例只有一个1G的文件Iterator i$ = files.iterator();while(true) {while(true) {while(i$.hasNext()) {FileStatus file = (FileStatus)i$.next();//获取这1G文件Path path = file.getPath();//获取文件路径long length = file.getLen();//获取文件大小(1G)if (length != 0L) {BlockLocation[] blkLocations;if (file instanceof LocatedFileStatus) {blkLocations = ((LocatedFileStatus)file).getBlockLocations();} else {FileSystem fs = path.getFileSystem(job.getConfiguration());blkLocations = fs.getFileBlockLocations(file, 0L, length);//获取这1G文件的块所在位置,1G文件有8个块}/*** //计算切片大小(128M)Math.max(minSize, Math.min(maxSize, blockSize));* (Math.max(lL, Math.min(9223372036854775807L, 128M));)*/if (this.isSplitable(job, path)) {long blockSize = file.getBlockSize();//获取块大小(128M)long splitSize = this.computeSplitSize(blockSize, minSize, maxSize);long bytesRemaining;//文件切片后剩余大小int blkIndex;//文件块的索引/*** 进行切片,每循环一次切一次,若切完后剩余文件大小不大于1.1倍切片大小(128*1.1)时,停止切片* for循环一次切一次,1G切一次,剩余7/8G,再切一次剩余6/8G,这样可以切7次*/for(bytesRemaining = length; (double)bytesRemaining / (double)splitSize > 1.1D; bytesRemaining -= splitSize) {blkIndex = this.getBlockIndex(blkLocations, length - bytesRemaining);//获取文件块索引//把每次切好的切片信息保存到splits中splits.add(this.makeSplit(path, length - bytesRemaining, splitSize, blkLocations[blkIndex].getHosts()));}/*** 切片后剩下的,例:200M数据切了一次剩下200-128=72M,72<128*1.1,此时bytesRemaining=72* 把剩下的也保存到splits中去*/if (bytesRemaining != 0L) {blkIndex = this.getBlockIndex(blkLocations, length - bytesRemaining);splits.add(this.makeSplit(path, length - bytesRemaining, bytesRemaining, blkLocations[blkIndex].getHosts()));}} else {splits.add(this.makeSplit(path, 0L, length, blkLocations[0].getHosts()));}} else {splits.add(this.makeSplit(path, 0L, length, new String[0]));}}job.getConfiguration().setLong("mapreduce.input.fileinputformat.numinputfiles", (long)files.size());LOG.debug("Total # of splits: " + splits.size());return splits;}}
FileInputFormat切片机制相关推荐
- MapTask并行度决定机制、FileInputFormat切片机制、map并行度的经验之谈、ReduceTask并行度的决定、MAPREDUCE程序运行演示(来自学笔记)
1.3 MapTask并行度决定机制 maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1.3 ...
- FileInputFormat切片机制和实现类
Hadoop学习 FileInputFormat切片机制和实现类 FileInputFormat切片机制 CombineTextInputFormat切片机制 CombineTextInputForm ...
- Mapreduce源码分析(一):FileInputFormat切片机制,源码详解
FileInputFormat切片机制,源码详解 1.InputFormat:抽象类 只有两个抽象方法 public abstract List<InputSplit> getSplits ...
- Hadoop中的FileInputFormat切片机制、FileInputFormat切片大小的参数配置、TextInputFormat、CombineTextInputFormat切片机制
文章目录 13.MapReduce框架原理 13.1InputFormat数据输入 13.1.4FileInputFormat切片机制 13.1.4.1切片机制 13.1.4.2案例分析 13.1.4 ...
- FileInputFormat切片机制和配置参数
1. FileInputFormat中默认的切片机制 (1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于block大小(本地模式块大小32M,yarn模式128M,老的版本64M) (3 ...
- MapReduce之FileInputFormat切片机制
1.切片机制 切片大小,默认等于Block(128M)大小 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 简单地按照文件的内容长度进行切片 2.源码中计算公式可以调整切片大小(默认等于Blo ...
- Hadoop FileInputFormat 默认切片机制
默认的切片机制 简单地按照文件的内容长度进行切片 切片大小,默认等于 block 大小**(Local模式默认32M,集群模式默认128M)** 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 ...
- MapReduce-TextInputFormat 切片机制
MapReduce 默认使用 TextInputFormat 进行切片,其机制如下 (1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于Block大小,可单独设置 (3)切片时不考虑数据集 ...
- 【hadoop】20.MapReduce-InputFormat数据切片机制
2019独角兽企业重金招聘Python工程师标准>>> 简介 通过本章节,您可以学习到: Job的提交流程 InputFormat数据切片的机制 1.Job提交流程源码分析 1)jo ...
最新文章
- 【WPF】一个简单的ColorPicker控件
- stripfxg php,代码审计| 适合练手的ZZCMS8.2漏洞
- 下述有关计算机网络的描述错误的是6,下述有关计算机总线的描述错误的是( ) 。...
- 移动开发:给安卓软件开发初学者简单的教程
- 经济学家Alex Kruger:DeFi是比特币的自然演变
- 哈尔滨工程大学ACM预热赛(A,C,H,I)
- 谜题35:一分钟又一分钟
- Saiku2.6 配置数据源
- SSM集成activiti6.0错误集锦(二)
- MySQL集群安装与配置
- 冰点文库下载器绿色版V3.2.15(0914)
- java把u转换成21_java u 转换成汉字
- Excel加载宏.xla文件的使用方法
- 实践致知第6享:QQ截图的文字识别功能
- 关于zabbix中vm.memery.size监控项后的参数
- Python爬虫进阶教程(五):数据存储
- C语言五子棋的项目背景,五子棋项目源码!
- ios9系统无法下载应用问题分析与解决
- vue+axios以流的形式下载文件
- 照片别放在手机相册了!跟我学,放这4处地方安全又不占手机内存