# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。