大数据面试题:MapReduce的过程

  1. 在客户端执行submit()方法之前,会先获取读取文件的信息
  2. 将job提交给yarn,会带着三个信息过去(job.split(文件的切片信息)、jar包、job.xml)
  3. yarn会根据文件的切片信息(文件会根据块大小(128M)进行切片)去计算将要启动的maptask的数量,一个切片对应一个map任务
  4. Maptask会根据InPutFormat()方法去HDFS上面读取文件,InPutFormat()方法会再去调用RecordRead()方法,将数据解析成一个一个的key/value键值对,并传给mapper()方法
  5. Mapper方法做一些逻辑处理后,将数据传到分区方法中,对数据进行一个分区标注后,发送到环形缓冲区
  6. 环形缓冲区默认的大小是100M,达到80%的阈值将会溢写
  7. 在溢写之前根据key进行一次快排
  8. 溢写会产出大量的溢写文件,当map阶段的所有数据处理完成之后,会调用merge()方法进行归并排序,默认10个溢写文件合并成一个大文件
  9. 也可以对溢写文件做一次combiner操作,对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,前提是combiner不会对结果产生影响
  10. 等待所有的maptask结束后,会启动一定数量的reducetask
  11. Reducetask会发送拉取的线程到map端拉取数据,拉取的数据会先加载到内存中,内存不够会写到磁盘里,等待所有的数据拉取完毕,会将这些数据再进行一次归并排序
  12. 归并后的文件会再次进行一次分组的操作,然后将数据以组为单位发送到reduce()方法
  13. reduce方法做一些逻辑判断后,最终调用OutputFormat()方法,OutputFormat()方法会再调用RecordWrite()方法将数据以KV的形式写入到HDFS中

猜你喜欢

转载自blog.csdn.net/weixin_42258633/article/details/129185417