13-如何分-InputFormat&InputSplit&RecordReader解析

Hadoop InputFormat&InputSplit&Recorder解析

1 概述

本节我们来介绍InputFormat、InputSplit以及Recorder,了解Hadoop是如何使用这些组件来分割数据的。我们从而掌握这些组件之间的联系和区别。

在这里插入图片描述

2 Hadoop InputFormat

Hadoop InputFormat检查作业的输入规范。InputFormat将输入文件分割成InputSplit(输入分片),并分配给独立的mapper。

InputFormat定义了在Hadoop中输入文件如何被分割和读取。在MapReduce中,Hadoop InputFormat是第一个组件,它负责建立输入分片并把它们拆分成记录。

最初,MapReduce任务的数据是存储在输入文件中的,输入文件一般在HDFS上面。这些文件的格式可以是任意的,包括基于行的日志文件以及二进制格式的文件。使用InputFormat,我们可以定义输入文件如何分割和读取。在Hadoop MapReduce框架中,InputFormat类是一个基础类,它提供了如下功能:

  • 用于输入的文件或者对象是由InputFormat负责选取的。
  • InputFormat定义了数据分片,数据分片定义着单独的map任务的大小以及可能执行的服务。
  • InputFormat定义了RecordReader,RecordReader负责从输入文件中读取实际的记录。

2.1 Mapper如何获取数据

在MapReduce中有两个方法负责向mapper提供数据:getsplits()和 createRecordReader() :

public abstract class InputFormat<K, V>
{
public abstract List<InputSplit> getSplits(JobContext context)
	throws IOException, InterruptedException;
public abstract RecordReader<K, V> 
	createRecordReader(InputSplit split,TaskAttemptContext context) 
		throws IOException,InterruptedException;
}

2.2 MapReduce中InputFormat的类型

下面让我们看看InputFormat有哪些类型。

在这里插入图片描述

2.2.1 FileInputFormat

FileInputFormat是所有基于文件的InputFormat的基类。Hadoop FileInputFormat指定了数据文件所在的目录。当我们开始一个Hadoop作业时,包含要读取文件的路径会提供给FileInputFormat。FileInputFormat会读取所有文件,并且把这些文件分割成一个或者更多的输入分片(InputSplit)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值