MapReduce Inputformat

1.目的

Hadoop InputFormat检查作业的输入规范。 InputFormat将输入文件分割成InputSplit并分配给各个Mapper。 我们将了解什么是Hadoop MapReduce中的InputFormat,获取数据到映射器的不同方法以及Hadoop中不同类型的InputFormat,比如Hadoop中的FileInputFormat,TextInputFormat,KeyValueTextInputFormat等。我们还将看到什么是 Hadoop中的默认InputFormat。

2.什么是Hadoop InputFormat?

InputFormat定义了输入文件如何拆分并在Hadoop中读取。 Hadoop InputFormat是Map-Reduce中的第一个组件,它负责创建inputsplit并将它们分成记录。

最初,MapReduce任务的数据存储在输入文件中,而输入文件通常驻留在HDFS中。虽然这些文件格式是任意的,但可以使用基于行的日志文件和二进制格式。使用InputFormat我们定义了这些输入文件是如何拆分和读取的。 InputFormat类是Hadoop MapReduce框架中的基本类之一,它提供了以下功能:

用于输入的文件或其他对象由InputFormat选择;

InputFormat定义了数据拆分,它定义了各个Map任务及其将要执行服务器的大小;

InputFormat定义了RecordReader,它负责从输入文件中读取实际记录。

3.如何获取数据给mapper?

有两种方法将数据获取到MapReduce中的映射器: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;
}

4. MapReduce中的InputFormat类型

4.1  Hadoop中的FileInputFormat

它是所有基于文件的InputFormat的基类。 Hadoop FileInputFormat指定数据文件所在的输入目录。当我们启动一个Hadoop作业时,FileInputFormat提供了一个包含要读取的文件的路径。 FileInputFormat将读取所有文件并将这些文件分成一个或多个InputSplits。

4.2 TextInputFormat

它是MapReduce的默认InputFormat。 TextInputFormat将每个输入文件的每一行视为单独的记录,并不执行分析。这对于未格式化的数据或基于行的记录(如日志文件)非常有用。

键 – 它是文件内行开头的字节偏移量(不是整个文件只是一个inputsplit),因此如果与文件名一起使用,它将是唯一的。

Value – 这是该行的内容,不包括行结束符。

4.3  KeyValueTextInputFormat

它与TextInputFormat类似,因为它也将每行输入视为单独的记录。虽然TextInputFormat将整行视为值,但KeyValueTextInputFormat通过制表符(‘/ t’)将行本身分解为键和值。这里键是行首直到制表符,而值是制表符后的行剩余部分。

4.4  SequenceFileInputFormat

Hadoop SequenceFileInputFormat是一个读取序列文件的InputFormat。序列文件是存储二进制键值对序列的二进制文件。序列文件是块压缩的,并提供几种任意数据类型(不仅仅是文本)的直接序列化和反序列化。这里的键和值都是用户自定义的。

4.5  SequenceFileAsTextInputFormat

Hadoop SequenceFileAsTextInputFormat是SequenceFileInputFormat的另一种形式,它将序列文件键值转换为Text对象。通过调用‘tostring()‘转换是在键和值上执行的。这个InputFormat使序列文件适合输入流。

4.6 SequenceFileAsBinaryInputFormat

Hadoop SequenceFileAsBinaryInputFormat是一个SequenceFileInputFormat,我们可以使用它来提取序列文件的键和值作为不透明的二进制对象。

4.7  NLineInputFormat

Hadoop NLineInputFormat是TextInputFormat的另一种形式,其中键是行的字节偏移量,值是行的内容。每个映射器都接收可变数量的带有TextInputFormat和KeyValueTextInputFormat的输入行,数量取决于分割的大小和行的长度。如果我们希望我们的映射器接收固定数量的输入行,那么我们使用NLineInputFormat。

N是每个映射器接收的输入行数。默认情况下(N = 1),每个映射程序只接收一行输入。如果N = 2,那么每个输入分割包含两行。一个映射器将接收前两个键值对,另一个映射器将接收后两个键值对。

4.8  DBInputFormat

Hadoop DBInputFormat是一个InputFormat,它使用JDBC从关系数据库中读取数据。由于它没有分割功能,所以需要小心不要从数据库中创建过多的映射器。加载相对较小的数据集是最好的。

5.结论

总之,我们可以说InputFormat定义了如何分割和读取输入文件。 InputFormat定义了RecordReader。也可以为不同的目的使用不同类型的InputFormat。

MapReduce Inputformat

发表评论

电子邮件地址不会被公开。 必填项已用*标注

三十 六 ÷ 四 =