MapReduce1工作机制:

工作角色:客户端、jobtracker(协调作业)、tasktracker(执行任务)。

提交资源:

  1. 客户端启动一个job
  2. 客户端向jobtracker请求一个新作业,检查作业输出路径是否存在,存在则抛出异常。随后,jobtracker向客户端返回一个作业ID和资源提交路径。
  3. 客户端将job所需资源(jar文件、xml文件、分片信息等)提交到指定路径(一般是HDFS共享文件系统)。
  4. 客户端向jobtracker提交job

作业调度:

  1. jobtracker将提交的job放入内部的任务队列,作业调度器进行调度,初始化作业。(创建一个表示正在运行作业的对象,用来封装任务和记录信息。)
  2. jobtracker的作业调度器从hdfs共享文件系统中获取客户端分片信息,创建任务执行任务列表。(map任务、reduce任务、作业清理任务等)
  3. 多个tasktracker通过心跳与jobtracker进行通信,分配任务,报告是否准备接受任务,若准备好,则jobtracker分配任务给tasktracker。

运行任务:

  1. tasktracker在共享文件系统中获取任务信息,实现jar文件本地化,将jar解压到工作目录,创建TaskRunner实例。
  2. TaskRunner启动一个新的JVM
  3. 运行map/reduce
  4. 状态更新:tasktracker向jobtracker通过心跳发送状态,jobtracker合并后发给客户端。

MapReduce2 YARN工作机制:

工作角色:客户端、resource manager、MRAppMaster、node manager。

  1. 客户端启动一个job
  2. 客户端向jobtracker请求一个新作业,随后,resource manager向客户端返回一个作业ID和资源提交路径。
  3. 客户端将job所需资源(jar文件、xml文件、分片信息等)提交到指定路径(一般是HDFS共享文件系统)。
  4. 客户端向jobtracker提交job
  5. resource manager通过作业调度器在node manager上创建一个容器容器启动MRAppMaster进程(这个进程由resource manager启动)。
  6. MRAppMaster对作业进行初始化,创建多个对象进行跟踪。
  7. MRAppMaster获取分片信息,每个分片创建map任务和指定的reduce任务。若作业很小,会与MRAppMaster在同一个JVM上运行(少于10个mapper且只有一个reducer输出大小小于一个hdfs块,则作为uber任务运行)。
  8. 若作业很大,MRAppMaster为所有map和reduce申请容器资源。请求包括map数据本地化信息和输入分片信息等。
  9. 容器分配好之后,MRAppMaster通过与node manager通信启动容器,由MRAppMaster负责分配在哪些node manager上运行map和reduce任务(YarnChilde进程)。
  10. node manager获取job相关资源
  11. 运行map和reduce任务。
  12. 状态更新:任务状态周期性向MRAppMaster汇报,客户端定期查询MRAppMaster获取任务状态。
最后修改:2022 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏