源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat

news/2024/5/20 0:49:33 标签: hadoop, 大数据, hdfs

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;
  // 存储切片的hosts
  private 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=256000000

set 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.niftyadmin.cn/n/124608.html

相关文章

Elasticsearch:跟踪 ElasticSearch 日志摄取中的缓慢

我们想跟踪日志的摄取是否有超出我们 Elasticsearch 可接受延迟的额外延迟。 因此&#xff0c;我们已按照之前文章 “Elasticsearch&#xff1a;在 Elasticsearch 中计算摄取延迟并存储摄取时间以提高可观察性” 中提供的步骤进行操作。 1. 创建如下的一个 ingest pipeline PU…

.Net Core WebApi 在Linux系统Deepin上部署Nginx并使用(一)

前言&#xff1a; Deepin最初是基于Ubuntu的发行版 2015年脱离Ubuntu开发&#xff0c;开始基于Ubuntu上游Debian操作系统 2019年脱离Debian&#xff0c;直接基于Linux开发&#xff0c;真正属于自己的上游Linux系统发行版 2022年8月&#xff0c;新版《Deepin V23》我下载开始了我…

SQL语句大全(MySQL入门到精通——基础篇)(基础篇——进阶篇——运维篇)

文章目录前言MySQL——基础篇一、SQL分类二、图形化界面工具三、DDL&#xff08;Data Definition Language|数据定义语言&#xff09;1.SQL-DDL-数据库操作2.SQL-DDL-表操作&查询3.SQL-DDL-数据类型3.SQL-DDL-表操作-修改&删除四、DML&#xff08;Data Manipulation La…

Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目

一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…

ADCS攻击之NTLM Relay攻击 ESC8

CSDN文章迁移备份漏洞简介ADCS在默认安装的时候&#xff0c;其Web接口支持NTLM身份验证并且没有启用任何NTLM Relay保护措施。强制域控制器计算机帐户(DC$)向配置了NTLM中继的主机进行身份验证。身份验证被转发给证书颁发机构(CA)并提出对证书的请求。获取到了DC$的证书后就可以…

2023/3/6 VUE - 组件传值【通信】方式

1 父亲传子代传值【子代使用父代的数据】 1.1 props传值 父亲给儿子传值&#xff1a; 爷爷给孙子传值&#xff1a; 这个props传值的方式&#xff0c;只能一代一代的往下传&#xff0c;不能跨代传值。 有一个问题&#xff1a;子组件不能修改父组件的值&#xff1a; 1.2 …

C语言 学生记录管理系统

学生记录管理系统 1--添加 2--删除 3--查询&#xff1a;按姓名 4--查询&#xff1a;按班级 5--查询&#xff1a;按学号 0--退出 请选择操作序号(0—5):1 请输入新学生的学号:1 请输入新学生的…

【数据结构考研笔记】 绪论

唯一可以确定的是&#xff0c;明天会使我们大吃一惊 数据结构 考研复习版 前言&#xff1a;还是要复习这个了&#xff0c;按理说最拿手&#xff0c;拿来引起一下自己的兴趣吧… 数据结构在学什么&#xff1f; 如何用程序代码把现实世界的问题信息化如何用计算机高效地处理这些…