MapReduce作业运行简单而言,客户端向负责协调集群上计算机资源分配的YARN资源管理器提交作业job,YARN资源管理器将作业分配到YARN节点管理器中,YARN节点管理器负责启动和监视集群中机器上的计算容器(container),作业在容器中被执行。
MapReduce作业运行机制如下图所示:
MapReduce作业运行机制作业的提交
- 客户端提交作业
- 向资源管理器请求一个新应用ID,作为MapReduce job ID。
- 将运行作业所需要的资源(包括作业JAR文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下的共享文件系统中。
- 调用资源管理器的submitApplication()方法提交作业。
自此,作业已经提交到资源管理器。
作业的初始化
- 调度器分配一个容器,然后资源管理器在节点管理器管理下的容器中启动application master的进程。
- application master对作业的初始化是通过创建多个系统的分类记录对象以保持对作业进度的跟踪来完成的。
- 接受存储在共享文件系统中,在客户端计算的输入分片。然后对每一个分片创建一个map任务对象和多个reduce任务对象。任务ID也在此时分配。
任务的分配
- 如果作业很小,application master就选择和自己在同一个JVM上运行任务,这样的作业称为uberized或uber任务运行。如果作业不适合作为uber任务运行,那么application master就会为该作业中的所有map任务和reduce任务向资源管理器请求容器。
任务的执行
- 在资源管理器分配了一个节点上的容器后,application master就通过与节点管理器通信来启动容器。
- 执行任务前,任务需要将资源本地化,包括作业的配置、JAR文件和所有来自分布式缓存的文件。
- 运行map任务或reduce任务。
基于Java编程的MapReduce到这里为止,已经在集群上运行。
Streaming
如果是其他编程语言(例如Python等)实现,运行map任务或reduce任务还需要与程序通信。Streaming任务使用标准输入和输出流与进程(可以用任何语言写)进行通信。
如下图中,Streaming程序通过标准的IO流读取数据并且将结果返回给节点管理器。
网友评论