MapReduce运行框架
在Hadoop1.X版本中,MapReduce是通过JobTracker运行实现的
我们写好MapReduce程序打成jar包交给client端,client把jar包提交到JobTracker。JobTracker把这个作业拆分成很多份,然后分配给TaskTracker去执行。JobTracker和TaskTracker是主从关系,通过心跳机制管理。TaskTracker并不是随机分配任务的,这里有个概念叫:数据本地化。意思是:将map task分配给含有该map处理的数据块(block)的TaskTracker上,运算向数据移动。在分配reduce任务时并不考虑数据本地化。
在MR1.X运行架构中,有3个角色:
- JobTracker
- TaskTracker
- Client
JobTracker是这个框架的核心,在框架中不仅是资源调度的主节点,也是任务调度的主节点。这会造成节点负载过重,容易发生单点故障。而且资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理。不同框架对资源不能全局管理。
在Hadoop2.X版本中,引入的资源管理系统yarn
工作流程:
- client拿到Application计算的文件的路径,向NameNode获取每一个block的位置
- client向ResourceManager申请ApplicationMaster的资源
- ResourceManager接收到客户端的申请,随机找一个资源相对充足的节点启动Container容器
- 在某个节点启动了Container后,NodeManager会在这个容器中启动一个ApplicationMaster线程
- 客户端会将block位置的报表交给ApplicationMaster
- ApplicationMaster接收报表后,根据报表向ResourceManager申请资源,启动yarn-child线程
- ApplicationMaster分发map task/reduce task到各个yarn-child线程执行
角色分布:
在MR2.X运行架构中,同样有3大角色:
- yarn
- ResourceManager
yarn集群的主节点,资源管理和调度 - NodeManager
从节点,与RM汇报资源,管理Container生命周期 - Container
容器,启动ApplicationMaster线程
- ResourceManager
- ApplicationMaster
任务调度器,避免单点故障,负载到不同的节点
负责任务切分、任务调度、任务监控和容错 - Client
YARN的引入,将资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现,使得多个计算框架可运行在一个集群中,MapReduce作业直接运行在YARN上,每个MapReduce作业对应一个ApplicationMaster。