当前位置: 首页 > news >正文

源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat

1. InputFormat

InputFormat是MapReduce框架提供的用来处理job输入的基类
它主要定义了三个功能:
          1.验证job输入是否合法
          2.对输入文件进行逻辑切片(InputSplit),然后将每个切片分发给单独的MapTask
          3.提供切片读取器(RecordReader),用来读取切片中的数据

InputFormat作为抽象父类,只是定义了核心方法,根据具体的数据源类型和切片规则 MapReduce框架提供了很多功能子类

核心子类:
        DBInputFormat:将数据库中的数据作为MR程序的输入数据
        FileInputFormat:将hdfs或本地文件作为MR程序的输入数据

源码阅读:

package org.apache.hadoop.mapred;// InputFormat对象
public abstract class InputFormat<K, V> {TODO:1.将Mr程序输入的文件进行逻辑切分,并返回切片对象集合注意:1.这里的分割是逻辑分割,不是物理分割哦!!!public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;TODO:1.为指定的切片对象,创建记录阅读器
public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException, InterruptedException;
}// 切片对象
public class FileSplit extends InputSplit implements Writable {// 该切片 所属文件的路径private Path file;// 切片起始位置(文件偏移量)private long start;// 切片长度private long length;// 存储切片的hostsprivate String[] hosts;private SplitLocationInfo[] hostInfos;
}

2. FileInputFormat

FileInputFormat是当MR程序为hdfs或本地文件时,处理数据源的基类
它实现了很多具体方法,比如切片方法(getSplits)和isSplitable判断文件是否可切片

2.1 getSplits-切片规则

1.对job输入路径中的每个文件单独切片
2.判断每个文件是否支持切片
         true : 按照指定切片大小对文件切片
         false: 文件整体作为一个切片

2.2 怎样设置切片大小

// 切片大小计算规则
splitSize = Math.max(minSize, Math.min(maxSize, blockSize))// 切片大小设置参数
set mapreduce.input.fileinputformat.split.minsize=256000000 或 
set mapred.min.split.size=256000000set mapreduce.input.fileinputformat.split.maxsize=256000000 或 
set mapred.min.split.size=256000000//场景1: 没有设置minsize、maxsize参数
maxSize=Long.MAX_VALUE
minSize=1L
blockSize=本地目录32M|HDFS目录128M或256M(看hdfs文件块具体配置)splitSize=blockSize(32M|128M|256M)//场景2: 设置minsize、maxsize参数
maxSize=mapreduce.input.fileinputformat.split.maxSize
minSize=mapreduce.input.fileinputformat.split.minsize
blockSize=本地目录32M|HDFS目录128M或256M(看hdfs文件块具体配置)需求1: splitSize > blockSize
set mapreduce.input.fileinputformat.split.minSize=大于blockSize值需求2: splitSize < blockSize
set mapreduce.input.fileinputformat.split.maxSize=小于blockSize值

2.3 源码阅读

可以看之前写的例子 🌰


3. CombineFileInputFormat

转载1:  https://blog.csdn.net/hummingbird0/article/details/115084843

转载2:  https://blog.csdn.net/qq_35241080/article/details/106065442
 

http://www.lryc.cn/news/31808.html

相关文章:

  • 二值图像骨架线提取
  • 规划数据指标体系方法(上)——OSM 模型
  • 做程序界中的死神,继续提升灵力上限
  • [数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)
  • Java实验报告经验总结
  • ESP32使用TCP HTTP访问API接口JSON解析获取数据
  • spring security 实现自定义认证和登录(4):使用token进行验证
  • 戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)
  • 信息收集之Google Hacking
  • 【面试题】如何避免使用过多的 if else?
  • oneblog_justauth_三方登录配置【Gitee】
  • 33- PyTorch实现分类和线性回归 (PyTorch系列) (深度学习)
  • C++基础——Ubuntu下编写C++环境配置总结(C++基本简介、Ubuntu环境配置、编写简单C++例程)
  • 项目管理中,导致进度失控的五种错误
  • C# 中的abstract和virtual
  • 第六十周总结——React数据管理
  • Springboot之@Async异步指定自定义线程池使用
  • 视频知识点(23)- TS格式详解指南
  • linux篇【16】:传输层协议<后序>
  • 【C语言】动态内存管理
  • 【Pytorch】AutoGrad个人理解
  • 华硕z790让独显和集显同时工作
  • 提高编程思维的python代码
  • CSS背景background属性整理
  • AQS底层源码深度剖析-Lock锁
  • 网络编程(二)
  • 访问学者进入美国哪些东西不能带?
  • 灵巧手抓持<分类><仿真>
  • CENTO OS上的网络安全工具(十九)ClickHouse集群部署
  • tesseract -图像识别