Hadoop java文件,包含从块

时间:2016-03-20 22:54:58

标签: java hadoop mapreduce hadoop2

正如我们在Hadoop的MapReduce中所知,映射器从存储在HDFS中的节点中的块中读取。但是映射器如何从块中读取?块是否连续向映射器发送字节,直到映射器达到其分割大小?或者它做了别的什么?

如果是这样,哪个java文件会发生这种情况? 另外,我正在使用Hadoop 2.7.1,以防万一。

2 个答案:

答案 0 :(得分:2)

Hadoop MapReduce作业输入格式包含两个主要组件:

InputSplit:将输入数据源(例如,输入文件)划分为组成各个地图任务输入的片段。这些片段称为“分裂”。例如,大多数文件在HDFS中的底层块的边界上分开,并由FileInputSplit类的实例表示。如何拆分文件的逻辑是通过InputSplit实现的。

RecordReader:从Split读取数据并发送到Map-Reduce作业。 TextInputFormat严格按字节偏移将文件划分为分割。分割的结束偏移可以在一行的中间。在这种情况下,我们应该在RecordReader中实现逻辑,以便从下一个分割中读取数据,直到重新生成行结束并将其传递给当前的映射器。

请参阅此link了解详情。

答案 1 :(得分:2)

InputFormat描述了Map-Reduce作业的输入规范。 Map-Reduce框架依赖于作业的InputFormat:

  1. 验证作业的输入规范。
  2. 将输入文件拆分为逻辑InputSplits,然后将每个文件分配给单个Mapper。
  3. 提供RecordReader实现,用于从逻辑InputSplit收集输入记录,以供Mapper处理。
  4. InputSplit表示个人Mapper要处理的数据。

    查看FileInputFormat代码,了解拆分的工作原理。

    API:

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

    RecordReader将数据分成键/值对,以输入Mapper。

    有多种RecordReader类型。

    CombineFileRecordReader, CombineFileRecordReaderWrapper, ComposableRecordReader, 
    DBRecordReader, KeyValueLineRecordReader, SequenceFileAsTextRecordReader, 
    SequenceFileRecordReader
    

    最常用的一个:KeyValueLineRecordReader

    查看相关的SE问题,以便更好地理解阅读内部: How does Hadoop process records split across block boundaries?

相关问题