前言在MapReduce的时候也许很多人会有这种疑问:写了MR后,map task和reduce task是如何在多节点上并行执行的,而且又是怎么决定哪个任务执行再哪个节点上的?其实这些问题都是和这个
前言
在MapReduce的时候也许很多人会有这种疑问:写了MR后,map task和reduce task是如何在多节点上并行执行的,而且又是怎么决定哪个任务执行再哪个节点上的?其实这些问题都是和这个Yarn有关。因为Yarn这个框架其实不仅仅是支持MR,还可以运行各种各样的程序。
我们知道程序运行在集群中是要耗费资源的,比如cpu,内存,IO···等,在hadoop1.x的时候,其实这个分配资源的行为(上图的cluster resource management)也是MapReduce自行完成的。在集群规模大,应用多时,MapReduce较为容易成为系统瓶颈。所以在hadoop2.x的时候,就引入了Yarn,而负责存储的HDFS和负责计算的MapReduce则不变。
Apache Hadoop YARN 是 apache Software Foundation Hadoop的子项目,为分离Hadoop2.0资源管理和计算组件而引入。YARN的诞生缘于存储于HDFS的数据需要更多的交互模式,不单单是MapReduce模式。Hadoop2.0 的YARN 架构提供了更多的处理框架,不再强迫使用MapReduce框架。
当企业的数据在HDFS中是可用的,有多种数据处理方式是非常重要的。有了Hadoop2.0和YARN,机构可以采用流处理、互动数据处理方式以及其他的基于Hadoop的应用程序。
Yarn
一、Yarn架构
YARN还是经典的主从(master/slave)结构,如下图所示。大体上看,YARN服务由一个ResourceManager(RM)和多个NodeManager(NM)构成,ResourceManager为主节点(master),NodeManager为从节点(slave)。
可以通过jps命令打开我们的集群进程,看到一个ResourceManager进程的话就是主节点。看到是NodeManager,那就是从节点
1.1 核心组件
组件名 | 作用 |
---|---|
ResourceManager | 是Master上一个独立运行的进程,负责集群统一的资源管理、调度、分配等等; |
ApplicationManager | 相当于这个Application的监护人和管理者,负责监控、管理这个Application的所有Attempt在cluster中各个节点上的具体运行,同时负责向Yarn ResourceManager申请资源、返还资源等; |
NodeManager | 是Slave上一个独立运行的进程,负责上报节点的状态(磁盘,内存,cpu等使用信息); |
Container | 是yarn中分配资源的一个单位,包涵内存、CPU等等资源,YARN以Container为单位分配资源; |
ResourceManager 负责对各个 NadeManager 上资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的 ApplicationMaster,它负责向 ResourceManager 申请资源,并要求 NodeManger 启动可以占用一定资源的任务。由于不同的 ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响。
Client 向 ResourceManager 提交的每一个应用程序都必须有一个 ApplicationMaster,它经过 ResourceManager 分配资源后,运行于某一个 Slave 节点的 Container 中,具体做事情的 Task,同样也运行与某一个 Slave 节点的 Container 中。
1.2 Yarn是如何进行工作的
YARN的基本理念是将JobTracker/TaskTracker 两大职能分割为以下几个实体:
1. 一个全局的资源管理ResourceManager2. 每个应用程序一个ApplicationMaster3. 每个从节点一个NodeManager4. 每个应用程序一个运行在NodeManager上的Container
这个是Yarn官方关于各个应用运行在Yarn上的通用图,看这种图还是先看角色,分别是两个client,一主三从。客户端需要先和主的Resource Manager建立连接(你看你看,从HDFS的NameNode到Kafka的controller和leader partition我都是说这句话,先联系主的,再通过主的去操作从的。真的所有大数据框架都一个样
