Hadoop映射器如何处理部分溢出到下一个块的记录?

时间:2017-09-20 12:44:33

标签: hadoop mapreduce

我正在尝试详细了解MapReduce,特别是以下查询。

正如我们所知,HDFS中的数据被分解为块,并且通常Mapper一次在块上工作;我们可能会遇到record溢出到另一个街区的情况;例如:

数据集:“你好,你是怎么做的”;这些数据可能会泄漏到两个不同的块中。

块1:

hello, how a

块2:

re  
you doing

现在,如果Mapper在Block1上运行,mapper如何从block1获取溢出到Block2的“完整”记录?

有人能帮我理解吗?

2 个答案:

答案 0 :(得分:1)

它适用于文件,可以作为多个块存储在HDFS上。但是,就映射器而言,它在文件上工作,块和它们分割的位置无关紧要,它只会看到文件及其完整内容。

答案 1 :(得分:1)

Block是数据的物理划分,InputSplit是数据的逻辑划分。 输入拆分是recordReader将数据呈现给映射器的方式。

存储数据时,有可能将记录分成2个块。 InputSplit不包含实际数据,但包含对数据的引用。 InputSplit表示由单个Mapper处理的数据。通常,它在输入上呈现面向字节的视图,并且作业的RecordReader负责处理它并呈现面向记录的视图。 RecordReader通常转换由InputSplit提供的输入的面向字节的视图,并为Mapper和Reducer任务提供面向记录的视图以进行处理。因此,它负责处理记录边界并使用键和值显示任务。

数据的分割方式取决于InputFormat。默认的InputFormat是FileInputFormat,它对InputSplit使用lineFeed。

另见:InputSplitRecordReader