MapReduce 1.x 架构

MapReduce 1.x 采用 Master/Slave 架构,由全局唯一的 Jobtracker 和多个 TaskTacker 组成,并且在Client中提供一系列的api供编程和管理使用。
1.client
提供api供用户编程调用,将用户编写的MapReduce程序提交到JobTracker中。
2. JobTracker
- 负责资源调度 主节点 发生故障整个集群瘫痪
- 负责任务调度,主节点
存在的问题
负载过高,容易故障
与MR耦合度太高,如果Spark也要运行在这一框架上,需要自己去实现,这个集群就存在两套资源调度器,存在资源隔离问题以及资源掠夺问题。。
全局唯一,主要负责集群资源监控和作业调度。JobTracker会对集群中所有的TaskTracker进行监控,一旦TaskTracker出现宕机、失败等情况,JobTracker中的调度器会将原来在这个TaskTracker上面执行的任务转移到其他的节点上面继续执行。当有新的作业进入到集群中时,调度器会根据资源的使用情况合理的分配这些作业。并且JobTracker中的调度器是可以插拔的,这意味着用户可以根据自己的需要,自定义作业和集群的调度方法。但是JobTracker存在单点故障的问题,一旦JobTracker所在的机器宕机,那么集群就无法正常工作。
3.TaskTracker
TaskTracker使用 “slot” 对本节点的资源(cpu、内存、磁盘等)进行划分,负责具体的作业执行工作。TaskTracker需要周期性向JobTracker汇报本节点的心跳信息,包括自身运行情况、作业执行情况等,JobTracker中的调度器会根据心跳信息对其分配“slot”,TaskTracker获得slot之后,就开始执行相应的工作。其中 slot 有两种: MapSlot 和 TaskSlot ,分别负责执行Map任务和Task任务,二者互不影响。
4.Task
分为两种:Map Task 和 Reduce Task,分别执行Map任务和 Task 任务。MapReduce的输入数据会被切分成多个 split ,一个split会交给一个Map Task去执行。

MapReduce 2.x 架构

yarn资源调度器主从架构
ResourceManager
NodeManager
YARN:Yet Another Resource Negotiator;
Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;
核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现
ResourceManager:负责整个集群的资源管理和调度
ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等
YARN的引入,使得多个计算框架可运行在一个集群中
每个应用程序对应一个ApplicationMaster
目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等
基本功能模块
- YARN:负责资源管理和调度 AppMaster:负责任务切分、任务调度、任务监控和容错等 MapTask/ReduceTask:任务单元
- 每个MapRduce作业对应一个AppMaster AppMaster任务调度 YARN将资源分配给AppMaster AppMaster进一步将资源分配给内部的任务
- AppMaster容错 AppMaster失败后,由YARN重新启动 任务失败后,AppMaster重新申请资源
相关技术点
ResurceManager(RM):一个纯粹的调度器,专门负责集群中可用资源的分配和管理。
Container :分配给具体应用的资源抽象表现形式,包括内存、cpu、disk
NodeManager(NM) :负责节点本地资源的管理,包括启动应用程序的Container,监控它们的资源使用情况,并报告给RM,管理Container生命周期
Container:节点NM,CPU,MEM,I/O大小,启动命令,默认NM启动线程监控Container大小,超出申请资源额度,kill
支持linux的Cgroup
App Master (ApplicationMaster(AM)):特定框架库的一个实例,负责有RM协商资源,并和NM协调工作来执行和监控Container以及它们的资源消耗。AM也是以一个的Container身份运行。
以作业为单位,避免单点故障,负载到不同的节点,为task申请资源(Task-Container)
客户端(Client):是集群中一个能向RM提交应用的实例,并且指定了执行应用所需要的AM类型,请求资源创建AM,与AM交互执行过程
- 提交MapReduce程序,向NameNode请求要处理文件的Block的位置信息。
- 向ResourceManager申请资源,请求启动一个ApplicationMaster。
- RM接收到请求后随机选择一台资源充足的节点启动Container容器
- NodeManager会在这个Container容器中启动一个ApplicationMaster(任务调度器)
- client把请求到的信息报表提交到AM。
- AM根据这些位置信息向ResourceManager申请资源,RM接收请求选择资源充足的节点启动一个Container容器,并在容器中创建yarn-child进程。
- AM分发Map Task线程到各个yarn-child中执行。
- 在每个yarn-child所在节点,每个Map Task线程执行完后会都会生成一个磁盘文件。
- 如果yarn-child节点资源充足,AM会优先选择这些节点分发Reduce Task任务。
- 等Reduce Task执行完之后,会把结果文件写入HDFS。
596



被折叠的 条评论
为什么被折叠?



