# Hadoop中如何配置Yarn
## 一、Yarn概述
### 1.1 Yarn的基本概念
YARN(Yet Another Resource Negotiator)是Hadoop 2.0引入的集群資源管理系統,主要負責集群資源管理和作業調度。作為Hadoop的核心組件之一,它解決了MapReduce v1在擴展性和資源利用率方面的局限性。
核心組件包括:
- **ResourceManager (RM)**:全局資源管理器
- **NodeManager (NM)**:單個節點上的資源代理
- **ApplicationMaster (AM)**:應用級的管理器
- **Container**:資源分配的基本單位
### 1.2 Yarn的架構優勢
相比傳統MapReduce架構,YARN具有:
- 更高的集群利用率(可達90%)
- 支持多種計算框架(如Spark、Flink)
- 更好的擴展性(支持上萬節點)
- 更靈活的資源分配
## 二、Yarn配置準備
### 2.1 環境要求
- Hadoop 2.x或更高版本
- Java 8/11(需與Hadoop版本匹配)
- 至少4GB內存的測試環境
- SSH無密碼登錄配置
### 2.2 配置文件位置
主要配置文件位于`$HADOOP_HOME/etc/hadoop/`目錄:
yarn-site.xml # YARN核心配置 capacity-scheduler.xml # 容量調度器配置 mapred-site.xml # MapReduce相關配置
## 三、核心配置詳解
### 3.1 ResourceManager配置
```xml
<!-- yarn-site.xml -->
<configuration>
<!-- 指定ResourceManager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- ResourceManager服務端口 -->
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<!-- 調度器端口 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<!-- 資源跟蹤端口 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<!-- Web UI端口 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
</configuration>
<!-- yarn-site.xml -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 根據物理內存調整 -->
<description>每個NodeManager可用的物理內存</description>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>8</value> <!-- 根據CPU核心數調整 -->
<description>可用的虛擬CPU核數</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager的輔助服務</description>
</property>
<!-- 容器內存配置 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value> <!-- 最小容器內存 -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value> <!-- 最大容器內存 -->
</property>
<!-- 容器CPU配置 -->
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>4</value>
</property>
<!-- capacity-scheduler.xml -->
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,prod,dev</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.prod.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>20</value>
</property>
</configuration>
<!-- yarn-site.xml -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<!-- fair-scheduler.xml -->
<allocations>
<queue name="prod">
<minResources>8192 mb,4vcores</minResources>
<maxResources>32768 mb,16vcores</maxResources>
</queue>
<queue name="dev">
<minResources>4096 mb,2vcores</minResources>
<maxResources>16384 mb,8vcores</maxResources>
</queue>
</allocations>
<!-- yarn-site.xml -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.principal</name>
<value>yarn/_HOST@REALM</value>
</property>
<property>
<name>yarn.nodemanager.principal</name>
<value>nm/_HOST@REALM</value>
</property>
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
<property>
<name>yarn.admin.acl</name>
<value>admin1,admin2</value>
</property>
<property>
<name>yarn.resourcemanager.admin.client.thread-count</name>
<value>3</value>
</property>
# 啟動YARN
$HADOOP_HOME/sbin/start-yarn.sh
# 驗證服務
jps | grep -E 'ResourceManager|NodeManager'
# 查看節點狀態
yarn node -list
# 查看運行中的應用
yarn application -list
# 終止應用
yarn application -kill <application_id>
內存配置:
yarn.nodemanager.resource.memory-mb
應小于物理內存容器大小:
垃圾回收:
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME,XMX_SETTINGS</value>
</property>
日志管理:
<property>
<name>yarn.nodemanager.log-aggregation-enable</name>
<value>true</value>
</property>
yarn.scheduler.maximum-allocation-mb
設置/var/log/hadoop-yarn/yarn-yarn-nodemanager-*.log
yarn.resourcemanager.webapp.address
配置YARN的合理配置對Hadoop集群性能至關重要。建議: 1. 根據硬件資源仔細調整內存/CPU參數 2. 生產環境務必配置HA 3. 使用適當的調度器并配置隊列 4. 啟用日志聚合和監控 5. 定期審查資源配置與實際使用情況
通過本文的配置指南,您應該能夠建立高效的YARN集群環境。實際配置時請根據具體工作負載特點進行調整,并通過監控工具持續優化配置參數。 “`
這篇文章提供了約2300字的YARN配置指南,包含: - 10個主要章節 - 30+個關鍵配置項 - 多種調度器配置示例 - HA和安全配置指導 - 性能調優建議 - 常見問題解決方案
格式采用標準的Markdown語法,包含代碼塊、列表、表格等元素,適合技術文檔發布。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。