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切片机制相关推荐

  1. MapTask并行度决定机制、FileInputFormat切片机制、map并行度的经验之谈、ReduceTask并行度的决定、MAPREDUCE程序运行演示(来自学笔记)

    1.3 MapTask并行度决定机制 maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1.3 ...

  2. FileInputFormat切片机制和实现类

    Hadoop学习 FileInputFormat切片机制和实现类 FileInputFormat切片机制 CombineTextInputFormat切片机制 CombineTextInputForm ...

  3. Mapreduce源码分析(一):FileInputFormat切片机制,源码详解

    FileInputFormat切片机制,源码详解 1.InputFormat:抽象类 只有两个抽象方法 public abstract List<InputSplit> getSplits ...

  4. Hadoop中的FileInputFormat切片机制、FileInputFormat切片大小的参数配置、TextInputFormat、CombineTextInputFormat切片机制

    文章目录 13.MapReduce框架原理 13.1InputFormat数据输入 13.1.4FileInputFormat切片机制 13.1.4.1切片机制 13.1.4.2案例分析 13.1.4 ...

  5. FileInputFormat切片机制和配置参数

    1. FileInputFormat中默认的切片机制 (1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于block大小(本地模式块大小32M,yarn模式128M,老的版本64M) (3 ...

  6. MapReduce之FileInputFormat切片机制

    1.切片机制 切片大小,默认等于Block(128M)大小 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 简单地按照文件的内容长度进行切片 2.源码中计算公式可以调整切片大小(默认等于Blo ...

  7. Hadoop FileInputFormat 默认切片机制

    默认的切片机制 简单地按照文件的内容长度进行切片 切片大小,默认等于 block 大小**(Local模式默认32M,集群模式默认128M)** 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 ...

  8. MapReduce-TextInputFormat 切片机制

    MapReduce 默认使用 TextInputFormat 进行切片,其机制如下 (1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于Block大小,可单独设置 (3)切片时不考虑数据集 ...

  9. 【hadoop】20.MapReduce-InputFormat数据切片机制

    2019独角兽企业重金招聘Python工程师标准>>> 简介 通过本章节,您可以学习到: Job的提交流程 InputFormat数据切片的机制 1.Job提交流程源码分析 1)jo ...

最新文章

  1. 【WPF】一个简单的ColorPicker控件
  2. stripfxg php,代码审计| 适合练手的ZZCMS8.2漏洞
  3. 下述有关计算机网络的描述错误的是6,下述有关计算机总线的描述错误的是( ) 。...
  4. 移动开发:给安卓软件开发初学者简单的教程
  5. 经济学家Alex Kruger:DeFi是比特币的自然演变
  6. 哈尔滨工程大学ACM预热赛(A,C,H,I)
  7. 谜题35:一分钟又一分钟
  8. Saiku2.6 配置数据源
  9. SSM集成activiti6.0错误集锦(二)
  10. MySQL集群安装与配置
  11. 冰点文库下载器绿色版V3.2.15(0914)
  12. java把u转换成21_java u 转换成汉字
  13. Excel加载宏.xla文件的使用方法
  14. 实践致知第6享:QQ截图的文字识别功能
  15. 关于zabbix中vm.memery.size监控项后的参数
  16. Python爬虫进阶教程(五):数据存储
  17. C语言五子棋的项目背景,五子棋项目源码!
  18. ios9系统无法下载应用问题分析与解决
  19. vue+axios以流的形式下载文件
  20. 照片别放在手机相册了!跟我学,放这4处地方安全又不占手机内存

热门文章

  1. 主成分分析结果成分不显著_spss、R做出来的主成分分析因子载荷和得分结果不同...
  2. 计算eer python
  3. 文字识别,语音输入全场景应用解析,让你的职场办公效率狂飙
  4. React.lazy()
  5. Android 游戏闯关
  6. 硬盘分区表的修复(Ubuntu安装盘的另类用法)
  7. 人生感悟2 低调做人,高调做事
  8. 服务器部署Nginx和Vue项目
  9. 学习笔记 之 聊聊 HTML 那些标签(一)
  10. 阿里云yum源报错Peer’s Certificate has expired原因及解决