yarn集群优化和治理常见问题和答案
YARN 集群优化与治理常见问题答案合集(共30题)
🐭1. Q:YARN中Fair Scheduler的抢占机制是如何工作的?如何配置?
A:
Fair Scheduler支持资源抢占,允许优先级高的任务从低优先级任务中“抢”回空闲资源。抢占通过fair-scheduler.xml配置:
<fairSharePreemptionTimeout>60</fairSharePreemptionTimeout>
<allowPreemptionFrom>true</allowPreemptionFrom>
fairSharePreemptionTimeout表示一个队列等待获取公平份额的时间。allowPreemptionFrom表示是否允许被抢占。
🐮2. Q:在多租户环境下,如何实现不同用户组之间的资源隔离?
A:
可通过资源队列划分+ACL控制来实现资源隔离:
- 在
fair-scheduler.xml或capacity-scheduler.xml中定义多个队列,并分配资源配额。 - 使用ACL设置各队列的提交权限和管理权限,例如:
<queue name="finance">
<aclSubmitApps>finance-group</aclSubmitApps>
<aclAdministerApps>finance-admin</aclAdministerApps>
</queue>
🐅3. Q:YARN中如何避免小任务频繁申请资源造成的调度开销?
A:
可使用以下策略:
- 启用ApplicationMaster级别的资源聚合,如Spark的动态资源分配。
- 设置最小Container内存(1G)/VCores(1CPU),避免过小资源请求。
- 调整调度器参数,如Fair Scheduler的
fairSharePreemptionTimeout。 - 使用资源共享模型,如Hadoop的JVM重用(仅MapReduce)。
🐰4. Q:YARN中如何提升任务的数据本地性?
A:
数据本地性对性能影响巨大,可通过以下方式优化:
- 确保HDFS和YARN节点部署在同一主机上。
- 增加NodeManager数量,提高本地匹配概率。
- 调整调度器配置,提升本地性优先级。
- 使用延迟调度机制(Delay Scheduling),允许短暂等待本地节点空闲。
🐉5. Q:YARN中ResourceManager HA是如何实现的?需要注意哪些事项?
A:
ResourceManager HA通过ZooKeeper实现主备切换,步骤如下:
- 配置两个RM实例,分别处于Active和Standby状态。
- 配置ZooKeeper集群用于元数据同步。
- 开启自动故障转移功能:
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
注意事项包括:
- 确保共享状态存储(如ZK、ATS)一致性。
- 备RM需能快速恢复应用状态。
- 应用程序需具备容错能力(如AM重启)。
🐍6. Q:YARN中NodeManager频繁重启导致任务失败,应如何排查?
A:
排查步骤如下:
- 检查NodeManager日志是否有OOM、GC异常。
- 查看系统日志
/var/log/messages或/var/log/syslog。 - 检查磁盘空间是否已满。
- 确认NM心跳是否正常发送到RM。
- 检查网络是否中断或不稳定。
- 检查是否因Cgroups资源限制触发Kill。
🐴7. Q:如何通过监控工具分析YARN资源利用率并优化集群?
A:
常用工具及方法包括:
- YARN Web UI:查看实时资源使用情况。
- Prometheus + Grafana:采集JMX指标并可视化。
- Cloudera Manager / Ambari:提供完整的资源分析面板。
- 监控指标建议包括:总资源、已分配资源、运行中的任务数、队列资源使用率等。
🐐8. Q:YARN中如何解决资源碎片化问题?
A:
资源碎片化是指集群中存在大量无法满足新任务需求的小块资源。解决方案包括:
- 合理设置Container资源请求值(不要过小)。
- 启用资源预留机制(Reservation System)。
- 启用抢占(Preemption)释放空闲资源。
- 动态调整资源队列容量,合理分配长期任务和短期任务。
🐵9. Q:YARN中如何优化ApplicationMaster的资源调度效率?
A:
ApplicationMaster是每个任务的核心组件,优化其调度效率可以从以下方面入手:
- 为AM分配足够的内存和CPU资源。
- 减少AM启动时间,避免频繁拉取依赖包。
- 对Spark作业启用Executor动态分配。
- 合理设置AM尝试次数和超时时间。
🐔10. Q:YARN中如何处理任务执行慢的问题?可能原因有哪些?
A:
任务执行慢的可能原因包括:
- 数据本地性差,任务不在数据所在节点运行。
- Container资源不足(内存或CPU)。
- 网络带宽瓶颈。
- JVM GC频繁。
- 磁盘读写性能差。
排查方法:
- 查看任务日志定位瓶颈。
- 使用Web UI查看任务运行时间线。
- 分析YARN metrics监控指标。
🐶11. Q:YARN中如何配置动态资源分配(如Spark)?
A:
Spark on YARN可启用动态资源分配以提高资源利用率:
--conf spark.dynamicAllocation.enabled=true \
--conf spark.dynamicAllocation.maxExecutors=20 \
--conf spark.dynamicAllocation.minExecutors=2 \
--conf spark.dynamicAllocation.initialExecutors=5
该机制可根据负载自动伸缩Executor数量,减少资源浪费。
🐖12. Q:YARN中如何做任务级别的资源回收?
A:
任务完成后,其占用的Container资源会被YARN自动回收。也可以通过命令手动杀死任务:
yarn application -kill <application_id>
此外,可配置任务超时自动清理:
<property>
<name>yarn.nodemanager.sleep-delay-before-sigkill.ms</name>
<value>2500</value>
</property>
🐘13. Q:YARN中如何查看某个节点的资源使用情况?
A:
可以通过以下方式查看:
- 使用命令:
yarn node -list -showDetails - 或者访问YARN Web UI → Nodes页面,点击具体节点查看详情。
🐿14. Q:YARN中如何配置资源队列的弹性伸缩?
A:
在Fair Scheduler中可以配置队列的min和max资源比例,实现弹性伸缩。例如:
<queue name="default">
<minResources>10240mb,5vcores</minResources>
<maxResources>20480mb,10vcores</maxResources>
</queue>
这表示该队列最少保证10GB内存和5个vCore,最多可扩展至20GB和10个vCore。
🦔15. Q:YARN中如何启用HTTPS安全访问?
A:
在yarn-site.xml中启用SSL:
<property>
<name>yarn.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>rm-host:8090</value>
</property>
🦊16. Q:YARN中如何启用Kerberos认证?
A:
需要配置Kerberos Realm、Principal、Keytab文件等信息,并在yarn-site.xml中开启安全模式:
<property>
<name>yarn.nodemanager.principal</name>
<value>yarn/_HOST@REALM</value>
</property>
<property>
<name>yarn.nodemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
<property>
<name>yarn.security.enabled</name>
<value>true</value>
</property>
🐼17. Q:YARN中如何做任务失败的自动重试?
A:
YARN本身不直接提供任务重试机制,通常由ApplicationMaster(如MapReduce、Spark)实现任务失败重试逻辑。也可以通过配置作业参数控制最大重试次数,例如:
<mapreduce.map.maxattempts>4</mapreduce.map.maxattempts>
🐳18. Q:YARN中如何优化ApplicationMaster的资源使用?
A:
ApplicationMaster作为每个应用的管理者,合理配置其资源对整体性能很重要。建议:
- 设置合适的内存和CPU资源(tez.am.resource.memory.mb=8192mb)。
- 启用ApplicationMaster重试机制(tez.am.max.app.attempts=5;tez.am.task.max.failed.attempts=12)。
- 避免AM频繁失败,影响任务调度。
- 对于Spark应用,可适当降低Executor数量以减少AM负载。
🦈19. Q:YARN中如何启用Linux Cgroups进行资源隔离?
A:
通过配置NodeManager启用CGroups资源隔离:
<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.resource-plugins</name>
<value>yarn.io/cgroups</value>
</property>
这样可以更精细地控制每个Container使用的CPU和内存资源。
🦐20. Q:YARN中如何查看ApplicationMaster的日志?
A:
使用命令:
yarn logs -applicationId <application_id>
也可以通过Web UI访问对应应用的日志链接。
🍔21. Q:YARN中如何配置资源预热池?
A:
资源预热池(Warm-up Containers)可用于加速任务启动,适用于Spark等交互式场景。可在Spark提交参数中配置:
--conf spark.dynamicAllocation.warmup=true \
--conf spark.dynamicAllocation.localityWait=3s
YARN本身未原生支持,但可通过调度器插件实现类似机制。
⚽22. Q:YARN中如何实现跨集群资源调度?
A:
YARN原生不支持跨集群调度,但可通过联邦(Federation)机制实现:
- 使用
YARN Federation将多个YARN集群组合成一个统一的虚拟集群。 - ResourceManager之间通过Router进行协调。
- 支持按用户、队列等方式路由到不同子集群。
🏀23. Q:YARN中如何防止恶意任务耗尽集群资源?
A:
可通过以下方式防范恶意任务:
- 设置用户/队列的最大并发任务数。
- 限制单个任务的最大资源请求。
- 启用资源抢占机制。
- 使用ACL控制提交权限。
- 结合Ranger/Sentry做细粒度权限控制。
🏐24. Q:YARN中如何优化任务调度延迟?
A:
调度延迟主要受资源匹配速度影响,优化方法包括:
- 提高资源匹配效率(如增加NodeManager数量)。
- 使用延迟调度(Delay Scheduling)提升数据本地性。
- 减少调度器锁竞争(如升级到Capacity Scheduler改进版本)。
- 避免资源碎片化。
🏸25. Q:YARN中如何配置资源保留策略?
A:
资源保留(Reservation System)允许为特定任务预留资源。配置如下:
<property>
<name>yarn.resourcemanager.reservation-system.enable</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.reservation-system.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.reservation.PlanBasedReservationSystem</value>
</property>
🎱26. Q:YARN中如何实现长任务的资源保障?
A:
对于长任务(如Spark Streaming),可采取以下措施:
- 将任务放入高优先级队列。
- 设置最小资源保障。
- 启用动态资源分配,按需伸缩。
- 配置资源抢占机制,确保资源不被挤占。
🐊27. Q:YARN中如何查看历史任务的资源使用情况?
A:
可通过Timeline Server查看历史任务信息:
- 访问 Timeline Server Web UI,默认端口为8188。
- 使用命令:
yarn timeline -listEntities -entityType YARN_APPLICATION
🐬28. Q:YARN中如何配置资源调度策略为Dominant Resource Fairness(DRF)?
A:
Fair Scheduler支持DRF调度策略,更适合多维资源调度。配置如下:
<fairSharePolicy>drf</fairSharePolicy>
DRF会根据内存和CPU的综合使用情况进行公平调度。
🐧29. Q:YARN中如何实现容器级别的资源监控?
A:
可通过以下方式实现容器级别监控:
- NodeManager暴露JMX接口,采集Container资源使用数据。
- 使用Prometheus + Node Exporter + Hadoop JMX Exporter。
- 配合Grafana展示每个Container的CPU、内存、IO等指标。
🐚30. Q:YARN中如何实现任务级别的优先级调度?
A:
YARN支持任务优先级调度,尤其在Fair Scheduler中表现良好。配置如下:
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.assignMultiple</name>
<value>true</value>
</property>
然后在提交任务时指定优先级:
yarn jar your_app.jar -D mapreduce.job.priority=HIGH
更多推荐


所有评论(0)