Hadoop之YARN简介

YARN :Yet Another Resource Negotiator,有部电影《The Negotiator》叫王牌对王牌,可以看出YARN取名设计之初即有对它的定位,除了有一个霸气的英文名字同时也有个一见倾心的中文名字“雅恩”

它是Hadoop 2.0后的新一代计算框架,目前可以支持多种计算框架运行在YARN上面,比如MapReduce(离线计算)、Storm(实时计算)、Spark(内存计算)、Flink(批处理和流处理)等 。

背景:

首先,我们来看看Hadoop 1.0的MapReduce结构来了解它有哪些缺陷导致催生了YARN的产生:首先是MapReduce1.0的JobTracker是采用的Master-Slave模式,同时监管资源配置和任务调度,两个功能耦合在一起,如果任务一多JobTracker就成为了整个计算框架的瓶颈;其次是由于是采用的单点故障,一旦JobTracker节点故障整个计算框架都将不可用;再次是JobTracker只支持MapReduce,如果想支持其他框架就需要修改JobTracker,这样的代价太大。下面来看看MapReduce1.0的结构图:

其次,我们从集群的利用率上来看,在一个集群中如果只支持一种计算框架,如Hadoop的MapReduce或Storm或Spark的框架,那么要实现多个功能势必需要多个集群,但不幸的是每个集群使用资源又不是很充分,而且它们使用的高峰期很有坑是错开的,因此很多时候这些集群都是出于空闲状态,而且不止一个集群空闲而是多个集群空闲,资源利用率很低,因此很有必要使用一个平台能集成多种计算框架使它们在一个共享集群下工作并且错开工作峰最大程度的提高资源利用率;其次从数据利用率来说,如果各个集群各自为政,那么在进行数据处理的时候很容易出现的一个问题就是,需要将临时数据甚至是同样的原始数据在多个集群中来回拷贝传输来完成一个可能复杂需要多种框架计算配合的工作,增加了集群的负担,数据利用率不高,如下图看看各集群框架使用资源高峰的情况和使用Yarn共享集群后的情况:

原理:

Yarn包括ResourceManager、ApplicationManager、NodeManager三大节点,其中ResourceManager一个集群只有一个,为了避免单点故障采用了主从备份的方式,正常运行时刻只有主ResourceManager对外提供服务从ResourceManager只进行同步工作,当主ResourceManager出现故障时立即切换至从ResourceManager,ResoureManager维护集群中NodeManager的状态通过心跳包、状态包等机制确定是否异常是否处于忙碌状态是否可以分配更多任务等。下面以一个请求处理来详细说明各个组件之间的系统工作方式:

1.当一个用户发送一个应用请求时,ResourceManager接收任务添加进任务队列获取启动该任务ApplicationManager所需要的资源包括CPU、内存等

2.之后ResourceManager分配一个节点启动这个任务的ApplicationManager,ApplicationManager根据应用需要获取必要的CPU、内存资源并获取运行环境参数和所需的jar包等等向ResourceManager申请资源分配Task节点,同时创建一个运行程序的容器运行程序,如果子任务的资源消耗比较少,一般为线程数小于10并且内存使用比较少时,ApplicationManager会在其自身的节点上运行这个Task

3.ApplicationManager拿到ResourceManager分配的资源创建Task节点并与Task进行通讯获取它们的运行状态健康状态等,运行完成后ApplicationManager发送处理完成消息给ResourceManager释放资源

 

这样一个请求过程就完成了,在这个过程中ResourceManager有一些调度机制,Yarn自带了容量调度器、公平调度器,这里讲一下它的默认调度器--容量调度器的一些分配资源的原则:在容量调度器中采用了资源预留的机制来尽量满足资源请求者的需求,如果有一个任务请求资源,ResourceMananger会获取所有节点的资源,发现有符合条件的节点即分配,如果没有符合条件的资源就会继续等待收集资源,等到资源满足了以后再分配给资源请求者,这样做有一个明显的缺点那就是有可能一个资源迟迟得不到满足,那么预留的那些资源就一直不能被分配使用,导致了资源利用率不高,但是好处也很明显,这样避免了一个大资源请求一直得不到需求的资源被“饿死”的情况;在NodeManager中有监控每个Task的资源使用情况,当某个Task资源使用超出了申请的量时为保证整个集群其他节点的容量均衡性,NodeManager会Kill掉异常的Task(是NodeManager来Kill还是通过ApplicationManager来Kill或是ResoureceManager来Kill还有待阅读源码后确认,只是表达这个意思),进而触发ApplicationMaster的Task节点异常程序重新分配资源进行处理。同时,Yarn还提供了接口用户还可以实现提供的接口提供自己的调度器。

 

### Hadoop YARN 是什么? Hadoop YARN(Yet Another Resource Negotiator)是 Apache Hadoop 生态系统中的核心组件之一,主要用于集群资源管理和作业调度。它是 Hadoop 2.x 版本引入的关键特性,旨在取代 Hadoop 1.x 中的 JobTracker 和 TaskTracker 架构。YARN 的设计目标是为 Hadoop 提供更灵活的资源管理能力,使其能够支持多种类型的工作负载,包括批处理、交互式查询、流处理等[^1]。 ### Hadoop YARN 的核心功能 #### 1. **资源管理** YARN 负责整个集群的资源管理,将资源(如 CPU、内存)分配给运行在集群上的各种应用程序。它将资源分配与任务调度分离,使得资源管理更加灵活和高效。YARN 通过 ResourceManager 和 NodeManager 两个核心组件来实现资源的统一管理和分配。 - **ResourceManager**:负责整个集群的资源调度和管理,维护集群资源的全局视图。 - **NodeManager**:负责单个节点上的资源管理,监控并报告节点的资源使用情况[^2]。 #### 2. **作业调度** YARN 提供了灵活的作业调度机制,支持多种调度策略。用户可以根据需求选择不同的调度器,如 **CapacityScheduler** 和 **FairScheduler**。 - **CapacityScheduler**:适用于多租户环境,支持资源的分层分配和优先级控制。 - **FairScheduler**:确保所有应用程序公平地共享集群资源[^4]。 #### 3. **多类型应用支持** YARN 的一个重要特性是支持多种类型的应用程序运行在 Hadoop 集群上。除了传统的 MapReduce 作业,YARN 还可以运行如 Hive、HBase、Pig、Spark、Storm 等应用。YARN 将这些应用统称为“application”,从而扩展了 Hadoop 的适用范围,使其成为一个通用的分布式计算平台[^2]。 #### 4. **统一资源调度** YARN 可以将整个集群的资源进行统一调度,使得不同的应用程序可以共享集群资源,而不会相互干扰。这种设计提高了资源利用率,同时降低了集群管理的复杂性。YARN 充当了一个分布式的操作系统平台,而 MapReduce、Spark 等计算框架则作为运行在其上的应用程序[^3]。 #### 5. **可配置性与性能优化** YARN 提供了丰富的配置参数,允许用户根据实际需求进行调优。例如: - **yarn.resourcemanager.scheduler.class**:用于指定资源调度器。 - **yarn.app.mapreduce.am.resource.mb**:设置 Application Master 的内存大小。 - **yarn.nodemanager.resource.detect-hardware-capabilities**:控制是否检测节点硬件能力。 通过合理配置这些参数,可以优化集群性能,提高作业执行效率。 ### 示例:YARN 中的资源调度器配置 以下是一个配置 YARN 使用 FairScheduler 的示例: ```xml <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property> ``` 该配置将 YARN 的资源调度器设置为 FairScheduler,以实现资源的公平分配。 ### 总结 Hadoop YARN 是一个通用的资源管理和调度平台,其核心功能包括资源管理、作业调度、多类型应用支持、统一资源调度以及丰富的配置选项。通过 YARNHadoop 能够支持更广泛的工作负载,提高集群资源利用率,并简化集群管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值