map reduce1.0简析

第一代 map reduce 原理简析。网络

不废话,上图。框架

map reduce原理图

上图为第一代map reduce原理图。左侧为map阶段,右侧为reduce阶段。函数

map和reduce各为一个进程。优化

先看左侧map阶段spa

map的数据存在于HDFS中,通过input format后,读入缓冲区,利用溢写机制不断将缓冲区中的数据写到磁盘上。当全部数据都写到磁盘上后,会进行一次merge合并,merge期间会进行排序。所以merge后的数据是有序的数据。

下面详细说下map各个阶段:线程

  • File:原始数据文件都存于HDFS中,每一个文件切成多个必定大小(默认64M)的Block(默认有3个备份,分别存于多个节点上)。
  • InputFormat:它是MR的基础框架之一。主要有两个做用:数据分割split以及记录读取器。code

    • 数据分割split(Data Splits):它是数据的实际存储,即物理存储。有了它,能够解决跨Block的问题(属于前一个Block对应的split)。实际上,每个split均可能包含后一个Block中开头部分的数据(即一个完整的文件大于64M时,会被分开成多个Block)。
      它主要作两件事:①分割split;②记录split的record(包含下一个block的开头部分)
    • 记录读取器(Record Reader,即RR):它是逻辑存储,即映射表。每读取一条记录,调一次map函数(RR只是单纯读记录,文件的跨Block记录数据存储地址数据是在Data split记录的)。
  • map:这个是map函数,和map进程不是一回事。若是从RR读取到的数据是 “I love China”,那么,通过map函数后,结果会成为{"I",1},{"love",1},{"China",1}。也就是说,会将读取到的数据切分,转成{"word",1}的格式。而后将它们增长到内存中。
  • buffer in memory:内存缓冲区。它的默认大小是100M,当数据占到80%(溢写阈值)时,会将内存中数据转存到磁盘上,同时还会有20%的剩余空间,map函数还会不断将数据写到这20%的空间中。
  • partition:分区。它决定数据最终由哪一个reduce来处理。例如采用hash方式对key取模,最终生成{partition,key,value},就能够知道这个key会由哪一个reduce处理。
  • sort:排序。对key进行排序,默认采用快排。
  • spill:内存缓冲区达到阈值时,溢写的线程会锁住这80%的缓冲区,将这些数据写到磁盘中,而后释放内存。每次溢写会生成一个数据文件。
  • combiner:数据合并。将相同key的value值合并,减小输出传输量。它其实是reduce函数。通常combiner会发生在溢写过程和合并过程(网络传输前)。
  • merge:将本机磁盘上的多个分区的数据文件进行合并(合并可能有屡次)。默认归并排序。

map部分大概这么多,咱们常说的shuffle阶段,包括:partition、sort、spill、merge、combiner、copy、memory、disk...常常状况下,进行优化的部分就是shuffle阶段。orm

再看看右侧reduce阶段blog

  • merge:这些merge的数据来自多个map进程,不在本机的数据会经过网络传输传过来。一样地,也会采用归并排序。多个map task相同partition的数据会由同一个reduce处理。它的合并会由屡次。
  • reduce:最终进行汇总。一个reduce会生成一个文件。

reduce阶段相对来讲简单些。排序

下面有几个小点:

  • map reduce的过程是同步过程,只有当map执行完,才执行reduce。
  • partition的个数由指定的reduce个数决定的。(能够是reduce个数的倍数)

在map reduce1.0中,由两个重要进程:

  • JobTracker:主进程。

    • 它接受客户做业,进行任务调度,提供节点监控状态,任务进度的管理等。
    • 一个mapreduce集群有一个jobtracker。
    • tasktracker用周期性心跳(默认3s)通知jobtracker本身的健康状态,心跳包含可用的map和reduce任务数、占用的数目、运行中的任务详细信息。
    • jobtracker使用一个线程池同时处理心跳和客户请求。
  • TaskTracker:任务进程。

    • 由jobtracker指派任务,周期心跳汇报(健康状态、询问任务)
    • 每个工做节点永远只有一个tasktracker。
    • jobtracker一直等待jobclient提交做业。

mapreduce做业调度默认采用先进先出队列调度模式(FIFO):

  • 优先级:very_high、high、normal、low、very low
相关文章
相关标签/搜索