hadoop1.x版本
这个时候并没有yarn这个概念,只有MapReduce的概念,是mapreduce的计算框架reduce中的原理部分。
工作流程
工作流程图
组件介绍
- Job Tracker:
- 资源调度主节点
- 任务调度主节点
- Task Tracker:从节点 其中还有DataNode
- client:客户端
流程详解
- client把Application导出为一个jar包,并把jar包通过指令发送给JobTracker;
- 但在这之前JobTracker会向NameNode去获取需要计算的文件的位置信息(一个block默认对应三个位置);
- JobTracker会向有数据的TaskTracker发送消息:“分配点资源,我要去发任务运行”;
- 然后在对应的节点上,规划一个container也就是容器(容器中包含了所需要的cpu、内存等资源);
- 接着,JobTracker往各个容器中分发Map Task;
- Map Task会产生大量磁盘文件;
- Job Tracker会通知TaskTracker启动一个容器,在容器中执行Reduce Task;
- Reduce Task从Map Task拉来各个数据,经过计算返回给客户端
对于Map Task和Reduce Task是什么可以参考初识MapReduce .
1.x版本的缺点
- JobTracker负责资源 和 任务调度的主节点,一旦挂掉,整个集群处于瘫痪状态
- JobTracker负载过高
- 与MapReduce耦合度太高,假设Spark也要运行在这套集群上,需要自己去实现资源调度;那么这个集群就存在了两套资源调度器,这也就产生了资源隔离性问题和资源抢夺的问题。
于是为了解决这些种种问题,开发者们开发了Yarn来解决这个问题,也就是下面要说的Hadoop2.x
Hadoop2.x版本
工作流程
工作流程图
主要组件介绍
- ResourceManager:资源管理的主节点,用于资源的调度
- NodeManager:资源管理的从节点(与DataNode在同一节点上),NM发送心跳给RM
- ApplicationMaster:负责任务调度
- client:客户端
详细流程介绍
- client把MapReduce Application打包成jar包,使用
hadoop jar
指令上传到yarn集群去运行。 - 拿到App计算的文件的路径,去找NameNode,获取每一个Block块的位置,(假设HDFS只有两个block组成)生成一个列表(这里为假设)
block1 node01 02 03,map task最好在这三个节点上启动(为了减少网络IO),如果这三个节点都满了,就找同机架的服务器;如果还不行,就随机找一个。
block2 node02 03 08 - 生成完列表后,向ResourceManager发送一个请求,为ApplicationMaster申请资源,请求启动一个ApplicationMaster(任务调度器)
- RM接受客户端的申请,然后查看对应的节点上资源充不充足(不充足不启动),随机在NodeManager中规划出一个container容器(里面包含CPU、内存等资源)
- NodeManager会在容器中启动一个ApplicationMaster负责任务调度
- 客户端将报表交给ApplicationMaster
- ApplicationMaster拿到报表后,根据报表去找RM申请资源,假设02 03资源充足,在那俩节点上启动一个container,NodeManager在容器中启动起来一个进程yarn-child
- ApplicationMaster分发map task(线程)到yarn-child进程
- 产生磁盘文件
- 交给reduce task(最好也在02 03 节点)
- 计算完之后,在写到HDFS中