我在努力学习 MapReduce 在一些细节上,特别是下面的查询。我们知道hdfs中的数据是分块的,通常mapper一次处理一个块;我们可以有这样的情况 record 溅到另一个街区;例如:数据集:“你好,你好”;这些数据可能会溢出到两个不同的块中。
MapReduce
record
hello, how a
re you doing
现在,如果mapper在block1上工作,那么mapper如何从block1获得溢出到block2的“完整”记录?有人能帮我理解吗?
8zzbczxx1#
它适用于文件,这些文件可以作为多个块存储在hdfs上。然而,只要Map程序关心它在文件和块上的工作以及它们在哪里分割是无关的,它只会看到文件及其完整的内容。
7eumitmz2#
块是数据的物理划分,inputsplit是数据的逻辑划分。输入分割是recordreader将数据呈现给Map器的方式。当一个数据被存储时,有可能记录被分割成两个块。inputsplit不包含实际数据,而是对数据的引用。inputsplit表示要由单个Map器处理的数据。通常,它在输入上呈现一个面向字节的视图,并且由作业的recordreader负责处理该视图并呈现一个面向记录的视图。recordreader通常会转换inputsplit提供的面向字节的输入视图,并为要处理的mapper和reducer任务提供面向记录的视图。因此,它负责处理记录边界并用键和值表示任务。数据的拆分方式取决于inputformat。默认的inputformat是fileinputformat,它使用linefeed进行inputsplit。另请参阅:inputsplit和recordreader
2条答案
按热度按时间8zzbczxx1#
它适用于文件,这些文件可以作为多个块存储在hdfs上。然而,只要Map程序关心它在文件和块上的工作以及它们在哪里分割是无关的,它只会看到文件及其完整的内容。
7eumitmz2#
块是数据的物理划分,inputsplit是数据的逻辑划分。输入分割是recordreader将数据呈现给Map器的方式。
当一个数据被存储时,有可能记录被分割成两个块。inputsplit不包含实际数据,而是对数据的引用。inputsplit表示要由单个Map器处理的数据。通常,它在输入上呈现一个面向字节的视图,并且由作业的recordreader负责处理该视图并呈现一个面向记录的视图。recordreader通常会转换inputsplit提供的面向字节的输入视图,并为要处理的mapper和reducer任务提供面向记录的视图。因此,它负责处理记录边界并用键和值表示任务。
数据的拆分方式取决于inputformat。默认的inputformat是fileinputformat,它使用linefeed进行inputsplit。
另请参阅:inputsplit和recordreader