MapReduce预处理阶段-----浅谈InputFormat接口

本文探讨了MapReduce中的InputFormat接口及其在预处理阶段的角色。InputFormat负责逻辑上分割输入文件,其getSplits()方法决定是否切分文件及切分方式,而getRecordReader()则返回RecordReader实例,处理键值对。FileInputFormat是常见的实现类,通过isSplitable()和getSplits()来控制文件切分。默认情况下,切分大小与block大小相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.mapreduce的简介

mapreduce:基于YARN的系统,用于并行处理大型数据集,在我看来是一个计算框架,

官网对于mapreduce的解释:Hadoop MapReduce是一个软件框架,用于轻松编写应用程序,以可靠,容错的方式在大型集群(数千个节点)的商用硬件上并行处理大量数据(多TB数据集)。

MapReduce 作业通常将输入数据集拆分为独立的块,这些块由map任务以完全并行的方式处理。框架对地图的输出进行排序,然后输入到reduce任务。通常,作业的输入和输出都存储在文件系统中。该框架负责调度任务,监视它们并重新执行失败的任务。

2.mapreduce的数据流转形式(分为map阶段和reduce阶段)

(input) <k1, v1> -> map阶段 -> <k2, v2> -> reduce -> <k3, v3> (output)

文字解释:我们指定处理的文件输入map时以<k,v>的形式进入map

此时的数据<k,v>对成为<k1,v1>,k1表示行偏移量,v1表示该行的内容

那么我们的数据是如何转换成<k1,v1>的形式传入map阶段的呢??这就是我们今天要说的预处理阶段

作为MapReduce过程的预处理阶段,InputFormat起到怎么的作用呢??

InputFomat接口的JAVAAPI解释:逻辑上分割作业的输入文件集。且每个切分后的inputsplit对应一个mapper,简单的说,决定我们mapper的个数,InputFomat中文直译:输入规范/输入格式,规范了我们的输入文件

* 在InputFormat接口中只有两个方法

* 1. InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;

* 2. RecordReader<K, V> getRecordReader(InputSplit split,

JobConf job,

Reporter reporter) throws IOException;

* 其中getSplit方法,可以决定文件是否切分。【是一整个文件进行整理(如奇偶行求和,如果文件被切分了,

* 可能造成奇偶和的错乱,所以不能切分),或是文件太大,切分成若干split,提高处理速度】

* 而getrecordReader方法,可以返回一个任意的recordReader

 

既然inputformat是一个接口,我们可以选择了解一下它的实现类,我们经常使用的FileInputFormat

FileInputFomat:抽象类,实现了InputFormat接口

JAVAAPI解释:一个基于文件的InputFormat基础类,并且提供了getSplit()的通用实现,它的子类也可以覆盖这个方法,从而达到是文件作为一个整体而不被切分。

【InputFormat抽象方法解析一:getSplit()】

那么我们的文件是如何切分的呢??

方法一:判断文件是否可切分:isSplitable()

在FileInputFormat类中,通过isSplitale方法,可以设置文件是否可切分,在此类中,恒返回ture,表示文件可被切分

protected boolean isSplitable(JobContext context, Path filename) {

return true;

}

方法二:判断文件如何切分/计算切分大小:getSplits()

public List<InputSplit> getSplits(JobContext job) throws IOException {

StopWatch sw = new StopWatch().start();

long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值