一、概念
Hadoop YARN(Yet Another Resource Negotiator)是Hadoop 2.x版本中的一个重要组件,用于资源管理和作业调度。它是Hadoop的第二代资源管理器,取代了Hadoop 1.x版本中的MapReduce作业调度器。
通俗地理解它的作用有点像一个大型公司的行政部门,负责合理分配公司的资源(如办公室空间、电脑等)给不同的部门和员工,以确保公司运作高效。
二、主要组成
YARN主要由三个部分组成:
- ResourceManager (RM):它是整个集群资源的大管家,负责管理和调度资源。
- NodeManager (NM):它是每台机器上的代理,负责监控和管理机器上的资源,并向ResourceManager报告。
- ApplicationMaster (AM):每个应用程序都有一个AM,它负责与ResourceManager协商资源,并管理应用程序的执行。
YARN的基本理念是将资源管理和作业调度/监控的功能分解为单独的组件。其核心思想是拥有一个全局的ResourceManager(RM)和每个应用程序的ApplicationMaster(AM)。一个应用程序可以是单个作业,也可以是一系列相关的作业。
ResourceManager和NodeManager构成了数据计算框架的核心。ResourceManager是系统中调解所有应用程序资源分配的最终机构。NodeManager是每台计算机上的框架代理,负责管理容器,监视它们的资源使用情况(CPU、内存、磁盘、网络),并将这些信息报告给ResourceManager/Scheduler。
每个应用程序的ApplicationMaster实际上是一个特定于框架的库,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监控任务。
三、主要功能
YARN的主要功能包括:
1. 资源管理:YARN负责管理整个Hadoop集群的资源,包括内存、CPU等,以便有效地运行作业。
2. 作业调度:YARN通过调度器(Scheduler)来分配集群资源给不同的应用程序。它支持多种调度器,如FIFO、Capacity Scheduler和Fair Scheduler,允许用户根据不同的需求进行资源调度和分配。
3. 容错性:YARN具有高可用性和容错性,能够处理节点故障或其他异常情况,并自动重新分配作业。
4. 多框架支持:除了支持MapReduce,YARN还可以运行其他分布式计算框架,如Apache Spark、Apache Flink等,使得Hadoop集群更加灵活多样化。
四、具体使用
yarn-site.xml
是 Apache Hadoop YARN(Yet Another Resource Negotiator)组件的配置文件之一,用于配置 YARN 的各种参数和属性。yarn-site.xml
中的配置项可以影响 YARN 的行为和性能。
以下是一个简单的 yarn-site.xml
配置示例:
<configuration>
<!-- 指定 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>your_resourcemanager_hostname</value>
</property>
<!-- 指定 NodeManager 的地址 -->
<property>
<name>yarn.nodemanager.hostname</name>
<value>your_nodemanager_hostname</value>
</property>
<!-- 配置日志存储路径 -->
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/var/log/yarn</value>
</property>
<!-- 配置 YARN 容器的资源上限 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 内存上限,单位为MB -->
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value> <!-- CPU 核心数上限 -->
</property>
<!-- 配置 YARN 调度器 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> <!-- 使用容量调度器 -->
</property>
</configuration>
在这个示例中:
yarn.resourcemanager.hostname
指定了 ResourceManager 的主机名。yarn.nodemanager.hostname
指定了 NodeManager 的主机名。yarn.nodemanager.log-dirs
指定了日志存储路径。yarn.nodemanager.resource.memory-mb
和yarn.nodemanager.resource.cpu-vcores
分别指定了 NodeManager 的资源上限。yarn.resourcemanager.scheduler.class
指定了使用的调度器类型,这里使用了容量调度器。