MapeReduce工作机制(2) | 青训营笔记

117 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第十一天

一、本篇笔记重点内容:

  • InputFormat数据输入
  • TextInputFormat
  • CombineTextInputFormat
  • Partition Comparable

二、详细知识点介绍:

InputFormat数据输入

FileInputFormat

常见的接口实现类包括:TextInputFormat、KeyValueTextInputFormat、 NLineInputFormat、CombineTextInputFormat 和自定义 InputFormat 等

  • Math.max(minSize, Math.min(maxSize, blockSize));

每次切片前都要判断剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片

比如文件大小260M,每一个块大小分为128M。过程:(260/128=2.03>1.1?) 此时切128M 剩下132M(132/128=1.03>1.1?)此时不大于 所以 将132M 放在一个切片。也就是实际是将260M 分成了两个Spilt 一个是128M 一个是132M

  • 将切片信息写到一个切片规划文件中
  • inputsplit只记录了切片的元数据信息
  • 提交切片规划文件到YRAN上,其MrAppMaster可以根据切片规划文件开启MapTask个数
  • (提交xml文件)

TextInputFormat

  • 是默认的 FileInputFormat 实现类。
  • 按行读取每条记录。
  • 键是偏移量(该行在整个文件中的起始字节)LongWritable类型。
  • 值是这行的内容,不包括行结束符,Text类型。

CombineTextInputFormat

  • 用于小文件过多的场景
  • 可以将多个小文件从逻辑上规划到一个切片中。

image.png

Partition Comparable

  • MapTask收集map()方法中输出的kv对,放到内存缓冲区中(圆形内存缓冲区,分为索引(元数据)和数据两个分区)。
  • 当环形缓冲区的使用率达到一定阈值后,再对缓冲区中的数据进行一次快排溢写到磁盘,数据处理完毕后,磁盘上的所有文件进行归并排序。
  • 多个溢出文件会合并(过程调用Partitioner进行分区,并对key排序)
  • ReduceTask根据分区号在MapTask上拉取相应的分区数据,若文件大小超过一定阈值,溢写在磁盘上,否则存储在内存。若磁盘上的文件大小超过阈值,进行归并生成更大文件。当所有数据拷贝完毕后,统一对内存和磁盘上的所有数据进行一次归并排序。
  • ReduceTask合并文件(同一分区不同MapTask的结果文件)
  • shuffle过程结束

三、引用参考&推荐书目:

  1. www.bilibili.com/video/BV1Qp… 尚硅谷大数据Hadoop教程