借助阿里云在亚洲加速迈向成功
一站式安全合规咨询服务
MLPS 2.0 一站式合规解决方案
依托我们的网络进军中国市场
提升面向互联网应用的性能和安全性
保障您的中国业务安全无忧
通过强大的数据安全框架保护您的数据资产
申请 ICP 备案的流程解读和咨询服务
面向大数据建设、管理及应用的全域解决方案
企业内大数据建设、管理和应用的一站式解决方案
将您的采购和销售置于同一企业级全渠道数字平台上
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
快速搭建在线教育平台
提供域名注册、分析和保护服务
云原生 Kubernetes 容器化应用运行环境
以 Kubernetes 为使用界面的容器服务产品,提供符合容器规范的算力资源
安全的镜像托管服务,支持全生命周期管理
多集群环境下微服务应用流量统一管理
提供任意基础设施上容器集群的统一管控,助您轻松管控分布式云场景
高弹性、高可靠的企业级无服务器 Kubernetes 容器产品
敏捷安全的 Serverless 容器运行服务
为虚拟机和容器提供高可靠性、高性能、低时延的块存储服务
一款海量、安全、低成本、高可靠的云存储服务
可靠、弹性、高性能、多共享的文件存储服务
全托管、可扩展的并行文件系统服务。
全托管的 NoSQL 结构化数据实时存储服务
可抵扣多种存储产品的容量包,兼具灵活性和长期成本优化
让您的应用跨不同可用区资源自动分配访问量
随时绑定和解绑 VPC ECS
云网络公网、跨域流量统一计费
高性价比,可抵扣按流量计费的流量费用
创建云上隔离的网络,在专有环境中运行资源
在 VPC 环境下构建公网流量的出入口
具备网络状态可视化、故障智能诊断能力的自助式网络运维服务。
安全便捷的云上服务专属连接
基于阿里云专有网络的私有 DNS 解析服务
保障在线业务不受大流量 DDoS 攻击影响
系统运维和安全审计管控平台
业务上云的第一个网络安全基础设施
集零信任内网访问、办公数据保护、终端管理等多功能于一体的办公安全管控平台
提供全面统一的云原生防护平台(CNAPP)能力
防御常见 Web 攻击,缓解 HTTP 泛洪攻击
实现全站 HTTPS,呈现可信的 WEB 访问
为云上应用提供符合行业标准和密码算法等级的数据加解密、签名验签和数据认证能力
一款发现、分类和保护敏感数据的安全服务
创建、控制和管理您的加密密钥
快速提高应用高可用能力服务
围绕应用和微服务的 PaaS 平台
兼容主流开源微服务生态的一站式平台
多集群环境下微服务应用流量统一管理
Super MySQL 和 PostgreSQL,高度兼容 Oracle 语法
全托管 MySQL、PostgreSQL、SQL Server、MariaDB
兼容 Redis® 的缓存和KV数据库
兼容Apache Cassandra、Apache HBase、Elasticsearch、OpenTSDB 等多种开源接口
文档型数据库,支持副本集和分片架构
100%兼容 Apache HBase 并深度扩展,稳定、易用、低成本的NoSQL数据库。
低成本、高可用、可弹性伸缩的在线时序数据库服务
专为搜索和分析而设计,成本效益达到开源的两倍,采用最新的企业级AI搜索和AI助手功能。
一款兼容PostgreSQL协议的实时交互式分析产品
一种快速、完全托管的 TB/PB 级数据仓库
基于 Flink 为大数据行业提供解决方案
基于Qwen和其他热门模型的一站式生成式AI平台,可构建了解您业务的智能应用程
一站式机器学习平台,满足数据挖掘分析需求
高性能向量检索服务,提供低代码API和高成本效益
帮助您的应用快速构建高质量的个性化推荐服务能力
提供定制化的高品质机器翻译服务
全面的AI计算平台,满足大模型训练等高性能AI计算的算力和性能需求
具备智能会话能力的会话机器人
基于机器学习的智能图像搜索产品
基于阿里云深度学习技术,为用户提供图像分割、视频分割、文字识别等离线SDK能力,支持Android、iOS不同的适用终端。
语音识别、语音合成服务以及自学习平台
一站式智能搜索业务开发平台
助力金融企业快速搭建超低时延、高质量、稳定的行情数据服务
帮助企业快速测算和分析企业的碳排放和产品碳足迹
企业工作流程自动化,全面提高效率
金融级云原生分布式架构的一站式高可用应用研发、运维平台
eKYC 数字远程在线解决方案
可智能检测、大数据驱动的综合性反洗钱 (AML) 解决方案
阿里云APM类监控产品
实时云监控服务,确保应用及服务器平稳运行
为系统运维人员管理云基础架构提供全方位服务的云上自动化运维平台
面向您的云资源的风险检测服务
提升分布式环境下的诊断效率
日志类数据一站式服务,无需开发就能部署
ECS 预留实例
让弹性计算产品的成本和灵活性达到最佳平衡的付费方式。云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势自带IP上云
自带公网 IP 地址上云全球网络互联
端到端的软件定义网络解决方案,可推动跨国企业的业务发展全球应用加速
提升面向互联网应用的性能和安全性全球互联网接入
将IDC网关迁移到云端云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势金融科技云数据库解决方案
利用专为金融科技而设的云原生数据库解决方案游戏行业云数据库解决方案
提供多种成熟架构,解决所有数据问题Oracle 数据库迁移
将 Oracle 数据库顺利迁移到云原生数据库数据库迁移
加速迁移您的数据到阿里云阿里云上的数据湖
实时存储、管理和分析各种规模和类型的数据数码信贷
利用大数据和 AI 降低信贷和黑灰产风险面向企业数据技术的大数据咨询服务
帮助企业实现数据现代化并规划其数字化未来人工智能对话服务
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人EasyDispatch 现场服务管理
为现场服务调度提供实时AI决策支持在线教育
快速搭建在线教育平台窄带高清 (HD) 转码
带宽成本降低高达 30%广电级大型赛事直播
为全球观众实时直播大型赛事,视频播放流畅不卡顿直播电商
快速轻松地搭建一站式直播购物平台用于供应链规划的Alibaba Dchain
构建和管理敏捷、智能且经济高效的供应链云胸牌
针对赛事运营的创新型凭证数字服务数字门店中的云 POS 解决方案
将所有操作整合到一个云 POS 系统中元宇宙
元宇宙是下一代互联网人工智能 (AI) 加速
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速DevOps
快速、安全地最大限度提高您的DevOps优势数据迁移解决方案
加速迁移您的数据到阿里云企业 IT 治理
在阿里云上构建高效可控的云环境基于日志管理的AIOps
登录到带有智能化日志管理解决方案的 AIOps 环境备份与存档
数据备份、数据存档和灾难恢复用阿里云金融服务加快创新
在云端开展业务,提升客户满意度
为全球资本市场提供安全、准确和数字化的客户体验
利用专为金融科技而设的云原生数据库解决方案
利用大数据和 AI 降低信贷和黑灰产风险
建立快速、安全的全球外汇交易平台
新零售时代下,实现传统零售业转型
利用云服务处理流量波动问题,扩展业务运营、降低成本
快速轻松地搭建一站式直播购物平台
面向大数据建设、管理及应用的全域解决方案
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
以数字化媒体旅程为当今的媒体市场准备就绪您的内容
带宽成本降低高达 30%
快速轻松地搭建一站式直播购物平台
为全球观众实时直播大型赛事,视频播放流畅不卡顿
使用阿里云弹性高性能计算 E-HPC 将本地渲染农场连接到云端
构建发现服务,帮助客户找到最合适的内容
保护您的媒体存档安全
通过统一的数据驱动平台提供一致的全生命周期客户服务
在钉钉上打造一个多功能的电信和数字生活平台
在线存储、共享和管理照片与文件
提供全渠道的无缝客户体验
面向中小型企业,为独立软件供应商提供可靠的IT服务
打造最快途径,助力您的新云业务扬帆起航
先进的SD-WAN平台,可实现WAN连接、实时优化并降低WAN成本
通过自动化和流程标准化实现快速事件响应
针对关键网络安全威胁提供集中可见性并进行智能安全分析
提供大容量、可靠且高度安全的企业文件传输
用智能技术数字化体育赛事
基于人工智能的低成本体育广播服务
专业的广播转码及信号分配管理服务
基于云的音视频内容引入、编辑和分发服务
在虚拟场馆中模拟关键运营任务
针对赛事运营的创新型凭证数字服务
智能和交互式赛事指南
轻松管理云端背包单元的绑定直播流
通过数据加强您的营销工作
元宇宙是下一代互联网
利用生成式 AI 加速创新,创造新的业务佳绩
阿里云高性能开源大模型
借助AI轻松解锁和提炼文档中的知识
基于生成式AI的一体化平台,助您在同一个工作空间内高效创作多样化内容
通过AI驱动的语音转文本服务获取洞察
探索阿里云人工智能和数据智能的所有功能、新优惠和最新产品
该体验中心提供广泛的用例和产品帮助文档,助您开始使用阿里云 AI 产品和浏览您的业务数据。
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速
元宇宙是下一代互联网
构建发现服务,帮助客户找到最合适的内容
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
加速迁移您的数据到阿里云
在阿里云上建立一个安全且易扩容的环境,助力高效率且高成本效益的上云旅程
迁移到完全托管的云数据库
将 Oracle 数据库顺利迁移到云原生数据库
自带公网 IP 地址上云
利用阿里云强大的安全工具集,保障业务安全、应用程序安全、数据安全、基础设施安全和帐户安全
保护、备份和还原您的云端数据资产
MLPS 2.0 一站式合规解决方案
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
实现对 CloudOps、DevOps、SecOps、AIOps 和 FinOps 的高效、安全和透明的管理
构建您的原生云环境并高效管理集群
快速、安全地最大限度提高您的DevOps优势
实施细粒度安全控制
提供运维效率和总体系统安全性
实时分析您的云消耗并实现节约
实时存储、管理和分析各种规模和类型的数据
登录到带有智能化日志管理解决方案的 AIOps 环境
帮助企业实现数据现代化并规划其数字化未来
帮助零售商快速规划数字化之旅
将全球知名的 CRM 平台引入中国
在线存储、共享和管理照片与文件
构建、部署和管理高可用、高可靠、高弹性的应用程序
快速、安全地最大限度提高您的DevOps优势
将您的采购和销售置于同一企业级全渠道数字平台上
企业内大数据建设、管理和应用的一站式解决方案
帮助企业简化 IT 架构、实现商业价值、加速数字化转型的步伐
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
快速搜集、处理、分析联网设备产生的数据
0.0.201
本文汇总了YARN使用时的常见问题。
集群问题汇总
组件问题汇总
RM
NM
UI或REST API
TimelineServer
集群有状态重启包括RM Restart和NM Restart两部分,ResourceManager(简称RM)负责维护应用级基础信息与状态,NodeManager(简称NM)负责维护运行时的Container信息与状态,它们持续将相关状态同步至外部存储(Zookeeper、LevelDB和HDFS等),并在重启后重新加载状态自行恢复,保证集群升级或重启后应用自动恢复,通常情况下可以做到应用无感知。
您可以在EMR控制台YARN服务的配置页签,检查或者配置以下参数启用RM HA。
参数 | 描述 |
参数 | 描述 |
yarn.resourcemanager.ha.enabled | 设置为true,表示开启HA。 默认值为false。 |
yarn.resourcemanager.ha.automatic-failover.enabled | 使用默认值true,表示启用自动切换。 |
yarn.resourcemanager.ha.automatic-failover.embedded | 使用默认值true,表示使用嵌入的自动切换方式。 |
yarn.resourcemanager.ha.curator-leader-elector.enabled | 设置为true,表示使用curator组件。 默认值为false。 |
yarn.resourcemanager.ha.automatic-failover.zk-base-path | 使用默认值/yarn-leader-electionleader-elector。 |
以下操作内容适用于Hadoop 3.2.0及后续版本。
开启关键配置。
您可以在EMR控制台YARN服务的配置页签,检查或者配置以下参数。
参数 | 描述 | 参数值(推荐) |
参数 | 描述 | 参数值(推荐) |
yarn.scheduler.configuration.store.class | 使用的后备存储的类型。例如,设置为fs,表示使用FileSystem类型存储。 | fs |
yarn.scheduler.configuration.max.version | 保留历史版本的最大数量,超出自动清理。 | 100 |
yarn.scheduler.configuration.fs.path | capacity-scheduler.xml文件存储路径。 不存在存储路径时,则自动创建。不指定前缀时,则默认defaultFs的相对路径。 | /yarn/<集群名>/scheduler/conf 重要 将<集群名>替换为集群名称以便区分,可能有多个YARN集群对应同一分布式存储的情况。 |
查看capacity-scheduler.xml配置。
方式一(REST API):http://<rm-address>/ws/v1/cluster/scheduler-conf。
方式二(HDFS文件):${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp>,其中后缀<timestamp>值最大的文件是最新的配置文件。
更新配置。
示例:更新一个配置项yarn.scheduler.capacity.maximum-am-resource-percent,并删除配置项yarn.scheduler.capacity.xxx,删除某配置项只需去掉其Value值。
curl -X PUT -H "Content-type: application/json" 'http://<rm-address>/ws/v1/cluster/scheduler-conf' -d '
{
"global-updates": [
{
"entry": [{
"key":"yarn.scheduler.capacity.maximum-am-resource-percent",
"value":"0.2"
},{
"key":"yarn.scheduler.capacity.xxx"
}]
}
]
}'
以下操作内容适用于Hadoop 2.8.0及后续版本。
Queue内部资源通常会被大作业占据,小作业较难获得资源,希望各作业能公平获得资源。您可以通过以下步骤处理:
修改Queue配置yarn.scheduler.capacity.<queue-path>.ordering-policy,使其调度次序由fifo(默认值)改为fair。
FIFO Scheduler为先进先出调度器,Fair Scheduler为公平调度器。
您还可以修改参数yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight,该参数默认值false,表示按used资源值从小到大排序,参数值为true时表示按照used或demand计算值从小到大排序。
开启队列内抢占。
队列内抢占常用参数如下表所示。
参数 | 描述 | 参数值(推荐) |
参数 | 描述 | 参数值(推荐) |
yarn.resourcemanager.scheduler.monitor.enable | 抢占功能总开关,在yarn-site.xml中配置,其余参数是在capacity-scheduler.xml中配置。 | true |
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled | 队列内抢占开关(队列间抢占无开关,默认开启)。 | true |
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy | 抢占策略优先考虑应用优先级,默认值为userlimit_first。 | priority_first |
yarn.scheduler.capacity.<queue-path>.disable_preemption | 指定Queue不被抢占,默认false。 true表示不允许指定Queue资源被抢占,子Queue未配置则继承父Queue配置值。 | true |
yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption | 指定Queue不开启队列内抢占,默认值false。 true表示禁用Queue内抢占,子Queue未配置则继承父Queue配置值。 | true |
要查看队列资源使用情况,您可以在YARN WebUI页面查看Used Capacity参数。Used Capacity参数表示该队列已使用的资源占该队列整体资源的百分比,分别计算Memory和vCores占总体的比例,并选取最大值作为队列整体资源使用的比例。具体查看操作如下:
访问YARN UI,详情请参见通过控制台访问开源组件Web界面。
在All Applications页面,单击目标作业的ID。
单击Queue行的队列。
在Application Queues区域,可以查看队列资源使用情况。
问题原因:Hadoop组件部分依赖库使用Java Logging APIs来生成日志记录,不支持使用log4j配置的日志轮转。目前这些daemon组件的stderr输出被重定向到.out
文件中,没有自动清理机制,长时间积累可能导致数据盘存储空间被占满。
处理方法:可以使用head
和tail
命令结合日志中生成的时间戳信息,来判断是否由于Java Logging APIs生成的日志导致存储空间占用过大。通常情况下,这些依赖库产生的都是INFO级别日志,不影响组件正常功能使用,但为了避免数据盘存储空间被占用,可以采取修改配置的方式禁用此类日志的生成。
例如,在优化TimelineServer组件以关闭jersey依赖库的日志生成时,操作步骤如下:
通过以下命令,监控YARN日志路径中与hadoop-timelineserver-
相关的.out
日志文件。DataLake集群的日志路径为/var/log/emr/yarn/
,Hadoop集群日志路径为/mnt/disk1/log/hadoop-yarn
。
tail /var/log/emr/yarn/*-hadoop-timelineserver-*.out
观察到输出日志中包含由com.sun.jersey组件产生的记录。
为了禁止组件输出Jersey库的INFO级别日志到.out 文件,创建并配置一个文件来关闭其日志生成。在运行有TimelineServer组件的EMR节点上,可以通过执行以下命令以root权限创建并编辑配置文件。
sudo su root -c "echo 'com.sun.jersey.level = OFF' > $HADOOP_CONF_DIR/off-logging.properties"
在EMR控制台中YARN服务的配置页面,查找YARN_TIMELINESERVER_OPTS
参数(Hadoop集群为yarn_timelineserver_opts
),并在此参数值后添加-Djava.util.logging.config.file=off-logging.properties
,指定刚刚创建的配置文件位置。
保存上述配置更改后,重启TimelineServer组件使新设置生效。持续观察一段时间,如果TimelineServer组件正常启动,并且.out
日志中不再出现任何与com.sun.jersey
相关的日志信息,则说明关闭jersey依赖库日志的操作已成功完成。
您可以通过以下方式检查:
检查ResourceManager HA状态(如果集群已启用HA,需确保有且只有一个Active ResourceManager),以下方式任选一种,检查字段haState是否为ACTIVE或STANDBY,haZooKeeperConnectionState是否为CONNECTED:
命令行:yarn rmadmin -getAllServiceState
REST API:http://<rmAddress>/ws/v1/cluster/info
示例如下。
检查应用状态。
执行以下命令,查看是否有持续的SUBMITTED或ACCEPTED状态。
yarn application -list
查看提交的新应用是否可以正常运行并结束。命令示例如下。
hadoop jar <hadoop_home>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar sleep -m 1 -mt 1000 -r 0
您可以在sleep -m
之间新增配置项以指定Queue,新增的参数为-Dmapreduce.job.queuename,参数值为default。
您可以查看以下信息。
查询信息 | 描述 |
查询信息 | 描述 |
基本信息 | 包括ID、User、Name、Application Type、State、Queue、App-Priority、StartTime、FinishTime、State、FinalStatus、Running Containers、Allocated CPU VCores、Allocated Memory MB和Diagnostics(诊断信息)等。
|
Queue信息 |
|
Container日志 |
|
检查App状态,通过App详情页或App REST API检查App状态。
未找到App状态,可能原因:
客户端向YARN提交之前失败退出:客户端组件问题(检查提交客户端日志:BRS、flowagent等组件)。
客户端无法连接YARN RM:检查连接RM地址是否正确、网络是否存在问题。如有网络问题,客户端可能存在报错:com.aliyun.emr.flow.agent.common.exceptions.EmrFlowException: ###[E40001,RESOURCE_MANAGER]: Failed to access to resource manager, cause: The stream is closed
。
NEW_SAVING:该状态处于Zookeeper State Store写入应用信息阶段。持续该状态可能原因如下:
Zookeeper存在问题,检查Zookeeper服务是否正常。
Zookeeper读写数据问题,处理方法请参见RM处于Standby状态,无法自动恢复Active状态,该如何处理?。
SUBMITTED:该状态极少遇到,可能原因为Node Update请求太多造成Capacity Scheduler内部抢锁堵塞,通常发生在大规模集群,需优化相关流程。相关案例,请参见YARN-9618。
ACCEPTED:检查Diagnostics。请根据提示信息,选择相应的处理方式。
报错提示Queue's AM resource limit exceeded。
可能原因:Queue AM已使用资源和AM资源之和超出了Queue AM资源上限,UI条件为${Used Application Master Resources} + ${AM Resource Request} < ${Max Application Master Resources}。
处理方法:上调该Queue的AM资源上限。例如,设置参数yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent为0.5。
报错提示User's AM resource limit exceeded。
可能原因:Queue user AM已使用资源和AM资源之和超出了Queue user AM资源上限。
处理方法:提高user-limit比例。您可以修改参数yarn.scheduler.capacity.<queue-path>.user-limit-factor和yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent的参数值。
报错提示AM container is launched, waiting for AM container to Register with RM。
可能原因:AM已启动,内部初始化未完成(例如,Zookeeper连接超时等)。
处理方法:需要根据AM日志进一步排查问题。
报错提示Application is Activated, waiting for resources to be assigned for AM。
执行步骤3,检查AM资源分配为何未满足。
RUNNING:执行步骤2,检查Container资源请求是否完成。
FAILED:检查diagnostics。请根据提示信息,选择相应的处理方式。
报错提示Maximum system application limit reached,cannot accept submission of application
可能原因:集群内运行中的总应用数超过上限(配置项:yarn.scheduler.capacity.maximum-applications,默认值:10000)。
处理方法:检查JMX Metrics,确认各队列运行的应用数是否符合预期,找出并处理有大量重复提交的问题应用。如果应用都正常,可以根据集群水位情况适当调大上述配置。
报错提示Application XXX submitted by user YYY to unknown queue: ZZZ
可能原因:提交到不存在的queue。
处理方法:提交到已存在的leaf queue。
报错提示Application XXX submitted by user YYY to non-leaf queue: ZZZ
可能原因:提交到parent queue。
处理方法:提交到已存在的leaf queue。
报错提示Queue XXX is STOPPED. Cannot accept submission of application: YYY
可能原因:提交到STOPPED或DRAINING queue(已下线或正在下线的queue)。
处理方法:提交到RUNNING queue(工作状态正常的queue)。
报错提示Queue XXX already has YYY applications, cannot accept submission of application: ZZZ
可能原因:queue应用数达到上限。
处理方法:
检查queue内是否有大量重复提交的问题应用。
调整配置:yarn.scheduler.capacity.<queue-path>.maximum-applications。
报错提示Queue XXX already has YYY applications from user ZZZ cannot accept submission of application: AAA
可能原因:user应用数达到上限。
处理方法:
检查该user是否有大量重复提交的问题应用。
调整配置:yarn.scheduler.capacity.<queue-path>.maximum-applications、yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent、yarn.scheduler.capacity.<queue-path>.user-limit-factor。
确认YARN资源分配还未完成。
在apps列表页,单击appID进入AM页面。
单击下方列表的AM-ID,进入AM-Attempt页面。
查看Total Outstanding Resource Requests列表中是否有Pending资源(也可以通过PendingRequests REST API查询):
没有Pending资源:说明YARN已分配完毕,退出该检查流程,检查AM情况。
有Pending资源:说明YARN资源分配未完成,继续下一步检查。
资源限制检查。
检查集群或Queue资源,查看资源信息,例如,Effective Max Resource和Used Resources。
检查集群资源或所在Queue资源或其父Queue资源是否已用完。
检查叶子队列某维度资源是否接近或达到上限。
当集群资源接近用满时(例如85%以上),应用的分配速度可能会变慢,因为大部分机器都没有资源了,分配的机器没有资源就会reserve,reserve到一定个数后分配就会变慢,另外也可能是由于内存资源和CPU资源不成比例,例如,有的机器上内存资源有空闲但CPU资源已经用满,有的机器上CPU资源有空闲但内存已经用满。
检查是否存在Container资源分配成功但启动失败的情况,YARN UI的App Attempt页面可以看到已分配的Container数(间隔一小段时间观察是否变化),如果有Container启动失败,查看对应的NM日志或Container日志进一步排查失败原因。
动态修改日志级别:在YARN UI的logLevel页面(http://RM_IP:8088/logLevel),将org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity(CapacityScheduler调度逻辑所在的package)参数的日志级别改为DEBUG,如下图所示。
您需要在复现问题的同时打开,持续几十秒(由于日志刷新的很快,无需持续太长时间),日志级别改回INFO即可恢复。
由调度器或队列(queue)配置项决定:
配置项 | 配置说明 | 默认值 |
配置项 | 配置说明 | 默认值 |
yarn.scheduler.maximum-allocation-mb | 集群级最大可调度内存资源,单位:MB。 | EMR默认值为:创建集群时最大非master实例组的可用内存(与最大实例组的 yarn.nodemanager.resource.memory-mb参数的配置值相同)。 |
yarn.scheduler.maximum-allocation-vcores | 集群级最大可调度CPU资源,单位:VCore。 | EMR默认值为32。 |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb | 指定队列的最大可调度内存资源,单位:MB。 | 默认未配置,配置则覆盖集群级配置,仅对指定队列生效。 |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores | 指定队列的最大可调度CPU资源,单位:VCore。 | 默认未配置,配置则覆盖集群级配置,仅对指定队列生效。 |
如果申请资源超过单任务或容器(Container)的最大可用资源配置,应用日志中能够发现异常信息InvalidResourceRequestException: Invalid resource request…
。
可能原因
非热更新配置,配置关联的组件未重启。
热更新配置,配置生效所需的指定操作未执行。
解决方案:请确保相关配置修改的后续操作正确执行。
配置集 | 配置类型 | 更新后续操作 |
配置集 | 配置类型 | 更新后续操作 |
| 调度器配置。 | 热更新配置,需要执行RM组件的refresh_queues操作。 |
| YARN组件运行配置。 | 重启配置关联组件。例如:
|
问题现象:无法正常访问Active ResourceManager。ResourceManager日志异常,提示信息:WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 10.33.**.**:53144 got version 6 expected version 9。
问题原因:Hadoop版本太旧,导致客户端RPC版本不兼容。
处理方法:使用匹配的Hadoop版本。
您可以通过以下方式排查问题:
检查支持自动恢复的必选配置项是否配置正确。
参数 | 描述 |
参数 | 描述 |
yarn.resourcemanager.ha.enabled | 需要配置为true。 |
yarn.resourcemanager.ha.automatic-failover.enabled | 需要配置为true。 |
yarn.resourcemanager.ha.automatic-failover.embedded | 需要配置为true。 |
修改为上述配置后,问题还未解决,您可以通过以下方式排查问题:
检查Zookeeper服务是否正常。
检查Zookeeper客户端(RM)读取数据是否超出其Buffer上限。
问题现象:RM日志内存在异常,提示Zookeeper error len*** is out of range!或Unreasonable length = ***。
处理方法:在EMR控制台YARN服务的配置页面,单击yarn-env页签,更新参数yarn_resourcemanager_opts的参数值为-Djute.maxbuffer=4194304 ,然后重启RM。
Zookeeper服务端写入数据是否超出其Buffer上限。
问题现象:Zookeeper日志内存在异常,提示Exception causing close of session 0x1000004d5701b6a: Len error ***。
处理方法:Zookeeper服务各节点新增或更新配置项-Djute.maxbuffer= (单位:bytes) ,将Buffer上限调大超过异常显示的长度。
如果RM或Zookeeper日志都找不到异常,可能是因为RM选主Zookeeper Ephemeral Node(${yarn.resourcemanager.zk-state-store.parent-path}/${yarn.resourcemanager.cluster-id}/ActiveStandbyElectorLock)被其他Session持有未释放,可在zkCli命令窗口中stat该节点确认,默认选主方式可能存在未知问题或触发Zookeeper问题。
建议修改选主方式,在yarn-site页签中,新增或更新配置项yarn.resourcemanager.ha.curator-leader-elector.enabled为true ,然后重启RM。
RM OOM包括多种问题类型,您需要先根据RM日志确定问题类型,可能的问题类型及对应的原因和解决方案如下:
Java heap space或GC overhead limit exceeded或频繁FullGC
原因
直接原因:JVM堆空间不足,RM进程内部对象无法获取到足够的资源,并且在抛出OOM之前已经进行过一轮或多轮FullGC回收了失效的对象,仍无法获取足够的堆空间用于分配。
原因分析:RM有很多常驻对象(不能被JVM回收的对象),包括集群、队列(queue)、应用、执行任务容器(container)、节点(node)等各类信息。这些信息占用的堆空间随着集群规模增大而增大,因此对于规模较大的集群需要保证RM进程的内存配置也较大。另一方面,由于需要保留应用的历史信息,随着时间推移历史应用占用的存储空间越来越大,即使是只有1个节点的最小规模集群,也需要确保有一定的存储空间(建议不低于2 GB)。
解决方案
如果Master节点资源足够,建议适当增大RM堆内存(yarn-env.sh配置项YARN_RESOURCEMANAGER_HEAPSIZE)。
对于小规模集群,也可以考虑适当减小需要存储的历史应用数量(yarn-site.xml配置项yarn.resourcemanager.max-completed-applications,默认:10000)。
unable to create new native thread
原因:RM所在节点上已用的总线程数达到系统上限,无法创建新的线程。
线程数上限由用户最大可用线程数(查看命令:ulimit -a | grep "max user processes"
)和PID最大可用数(查看命令:cat /proc/sys/kernel/pid_max
)决定。
解决方案
如果可用线程数配置过低,调大相关系统配置。通常规格小的节点可用线程数需配置数万量级,规格大的节点需配置十几万或几十万量级。
如果可用线程数配置正常,通常是节点上存在个别问题进程占用过多线程导致,可以进一步定位哪些进程占用线程较多。
执行命令:ps -eLf | awk '{print $2}' | uniq -c | awk '{print $2"\t"$1}' | sort -nrk2 | head
,查看占用线程数最多的Top10进程,格式:[进程ID] [占用线程数]。
问题现象:NM日志异常,提示java.io.IOException: Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider。
可能原因:HDFS配置异常。
处理方法:
以上是封装后的异常,非根因,需要打开DEBUG级别日志查看:
hadoop客户端命令行环境(例如执行hadoop fs -ls /
命令),开启DEBUG调试信息。
export HADOOP_LOGLEVEL=DEBUG
有Log4j配置的运行环境,Log4j末尾增加log4j.logger.org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider=DEBUG
。
以下示例的根因是用户曾修改过NameServices配置,将emr-cluster修改为了hadoop-emr-cluster,但是扩容节点时使用了修改前的配置。
在EMR控制台HDFS服务的配置页面,检查各项配置是否正确。
问题现象:
Job AM Container启动失败,异常信息如下。
Failed job diagnostics信息为:Application application_1412960082388_788293 failed 2 times due to AM Container for appattempt_1412960082388_788293_000002 exited with exitCode: -1000 due to: EPERM: Operation not permitted
在资源本地化过程中(下载后解压时)报错,NodeManager日志信息如下。
INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService: Failed to download rsrc { { hdfs://hadoopnnvip.cm6:9000/user/heyuan.lhy/apv/small_apv_20141128.tar.gz, 1417144849604, ARCHIVE, null },pending,[(container_1412960082388_788293_01_000001)],14170282104675332,DOWNLOADING}
EPERM: Operation not permitted
at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:226)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:629)
at org.apache.hadoop.fs.DelegateToFileSystem.setPermission(DelegateToFileSystem.java:186)
at org.apache.hadoop.fs.FilterFs.setPermission(FilterFs.java:235)
at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:949)
at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:945)
at org.apache.hadoop.fs.FSLinkResolver.resolve(FSLinkResolver.java:90)
at org.apache.hadoop.fs.FileContext.setPermission(FileContext.java:945)
at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:398)
at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412)
at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412)
at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:352)
at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
问题原因:压缩包内含有软链接导致资源本地化异常。
处理方法:删除该压缩包内包含的软链接。
可能原因及排查思路如下:
磁盘已满。
检查/sys/fs/cgroup/cpu/hadoop-yarn/cgroup.clone_children和/sys/fs/cgroup/cpu/cgroup.clone_children的Cgroups配置。
如果cgroup.clone_children的值为0,请修改为1,开机启动项时,设置命令echo 1 > /sys/fs/cgroup/cpu/cgroup.clone_children
。
如果没有上述问题,请检查同级的cpuset.mems或cpuset.cpus文件,hadoop-yarn目录中的值需要和上层一样。
可能是Cgroups目录的子目录数超出上限65535造成的,检查YARN配置yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms或者yarn.nodemanager.linux-container-executor.cgroups.delete-timeout-ms。
问题现象:报错提示java.net.UnknownHostException: Invalid host name: local host is: (unknown)。
问题原因及处理方法:
查看是否正确配置了DNS服务器。
通过以下命令,检查配置信息。
cat /etc/resolv.conf
查看防火墙是否设置了53端口的相关规则。
如果设置了,请关闭防火墙。
查看是否开启了DNS的NSCD缓存服务。
通过以下命令,检查服务状态。
systemctl status nscd
如果开启了DNS的NSCD缓存服务,可以执行以下命令,停止缓存服务。
systemctl stop nscd
NM OOM包括多种问题类型,您需要先根据NM日志确定问题类型,可能的问题类型及对应的原因和解决方案如下:
Java heap space或GC overhead limit exceeded或频繁FullGC
原因
直接原因:JVM堆空间不足,NM进程内部对象无法获取到足够的资源,并且在抛出OOM之前已经进行过一轮或多轮FullGC回收了失效的对象,仍无法获取足够的堆空间用于分配。
原因分析:NM进程中的常驻对象不多,一般只包含当前节点、运行应用、执行任务容器(Container)等基本信息,这部分占用空间不会很大。可能占用空间较大的是External Shuffle Service的Cache和Buffer,这部分受Shuffle Service相关配置(例如Spark:spark.shuffle.service.index.cache.size或spark.shuffle.file.buffer,MapReduce:mapreduce.shuffle.ssl.file.buffer.size或mapreduce.shuffle.transfer.buffer.size等)影响,并且与使用了Shuffle Service的运行应用数(或执行任务容器数)成正比。这些信息占用的堆空间随着使用ShuffleService应用数或任务容器数的增大而增大,因此对于规格较大可运行任务较多的节点需要保证NM进程的内存配置也较大(建议最小不低于1 GB)。
解决方案
如果节点资源足够,建议适当增大NM堆内存(yarn-env.sh配置项YARN_NODEMANAGER_HEAPSIZE)。
检查Shuffle Service相关配置是否合理,例如Spark Cache配置不应该占用大部分堆内存。
Direct buffer memory
原因
直接原因:堆外内存溢出导致的OOM,通常与External Shuffle Service有关,例如有的Shuffle Service服务的RPC调用使用了NIO DirectByteBuffer,就会用到堆外内存。
原因分析:堆外内存跟使用ShuffleService的应用数或任务容器数成正比。对于使用Shuffle Service的任务较多的节点,需要确认NM进程的堆外内存配置是否过小。
解决方案
检查堆外内存配置-XX:MaxDirectMemorySize(yarn-env.sh配置项YARN_NODEMANAGER_OPTS)是否合理。无此配置时默认与堆内存大小相同,不合理时适当调大堆外内存空间。
unable to create new native thread
参见RM组件OOM如何处理?中的unable to create new native thread部分的内容进行分析解决。
详细异常信息:ResourceHandlerException: Unexpected: Cannot create yarn cgroup Subsystem:cpu Mount point:/proc/mounts User:hadoop Path:/sys/fs/cgroup/cpu/hadoop-yarn
原因:ECS异常重启可能是ECS内核缺陷(已知问题版本:4.19.91 -21.2.al7.x86_64)导致的。重启后CPU cgroup失效问题,原因是重启后cgroup的内存数据会被销毁掉。
解决方案:修改存量集群节点执行和扩容节点的引导脚本,在当前环境中创建cgroup目录并且用rc.local在以后ECS启动的时候创建目录。
# enable cgroups
mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn
chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn
# enable cgroups after reboot
echo "mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local
echo "chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
报错说明:修改yarn.nodemanager.resource.cpu-vcores和yarn.nodemanager.resource.memory-mb参数,保存重启NM后,NM资源数未修改。
问题原因:由于机器组可能使用不同CPU内存规格的实例,所以修改yarn.nodemanager.resource.cpu-vcores和yarn.nodemanager.resource.memory-mb参数,需要修改节点组维度的配置才能生效。
解决方案:在EMR控制台,选择节点组维度,选择需要配置的NM所在节点组修改资源数的配置,具体操作请参见管理配置项。
原因:
磁盘检查发现异常:当正常目录数或总目录数比率低于磁盘健康比例(yarn-site.xml配置项yarn.nodemanager.disk-health-checker.min-healthy-disks,默认值:0.25)时,将节点标记为UnHealthy。例如NM节点使用4块磁盘,当4块磁盘上的目录均不正常时节点才会标记为UnHealthy,否则只在NM状态报告中显示local-dirs are bad或log-dirs are bad,参见节点磁盘问题:local-dirs are bad/log-dirs are bad,如何处理?。
NM健康检查脚本发现异常:该项检查默认未启用,需要主动配置健康检查脚本(yarn-site.xml配置项yarn.nodemanager.health-checker.script.path)才能开启。
解决方案
磁盘问题,请参见节点磁盘问题:local-dirs are bad/log-dirs are bad,如何处理?中的解决方案。
健康检查脚本问题,请根据自定义脚本处理。
原因:磁盘检查发现异常。该项检查默认开启,周期性检查local-dirs(任务运行缓存目录,包括任务运行依赖的各类文件、中间数据文件等)与log-dirs(任务运行日志目录,包含全部日志运行)是否满足以下条件,只要有一项不满足就会被标记为bad。
可读
可写
可执行
磁盘空间使用率是否低于配置阈值(yarn-site.xml配置项yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage,默认:90%)
磁盘剩余可用空间是否大于磁盘最小可用空间的配置值(yarn-site.xml配置项yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb,默认:0)
解决方案
一般都是磁盘空间不足引起,如果确认存在下述场景之一,建议扩容磁盘:
NM节点规格较大,可运行任务数较多。
磁盘空间相对较小。
任务运行所依赖的数据或文件较大。
任务运行产生的中间数据较多。
任务日志相对较大(磁盘空间占比高)。
检查yarn-site.xml配置项yarn.nodemanager.localizer.cache.target-size-mb,如果相对磁盘比例过大会造成历史任务缓存占用磁盘空间过多(超出配置值后才能自动清理)。
坏盘问题,请参见自助坏盘维修流程更换集群损坏的本地盘。
问题现象:打开日志页面时,提示信息如下。
问题原因:访问NodeManager Log页面时会检查ACL规则。如果启用了ACL规则,远程用户就要符合以下任一个条件:
是admin用户。
是app owner。
满足app自定义ACL规则。
处理方法:检查是否满足以上条件中的任一条。
问题现象:访问UI或REST API时报错HTTP ERROR 401或HTTP ERROR 403。HTTP ERROR 401详细信息如下图。
问题原因:YARN启用了Simple认证且不允许匿名访问,详情请参见Authentication for Hadoop HTTP web-consoles。
处理方法:
方式一:URL参数中显示指定远程用户,例如,user.name=***。
方式二:您可以在E-MapReduce控制台的HDFS服务的配置页签,在搜索区域搜索参数hadoop.http.authentication.simple.anonymous.allowed,修改其参数值为true允许匿名访问,参数含义请参见Authentication for Hadoop HTTP web-consoles。然后重启服务,请参见重启服务。
在YARN UI右上方,Cluster或Metrics REST API结果中,TotalVcore显示值不准确。此问题是由于社区2.9.2之前版本TotalVcore计算逻辑有问题,详情请参见https://issues.apache.org/jira/browse/YARN-8443。
EMR-3.37.x和EMR-5.3.x及后续版本已修复此问题。
您可以打开浏览器的开发者工具,排查并处理遇到的问题:
如果是路径为http://<rmAddress>/ws/v1/cluster/apps/APPID的异常,则可能原因是该应用已经被RM清理出去(YARN RM最多保留一定数量的历史应用信息,默认1000个,超出的会将历史应用按启动顺序清理出去)。
如果是路径为http://<tsAddress>/ws/v1/applicationhistory/...的异常,直接访问该URL(http://<tsAddress>/ws/v1/applicationhistory/... )返回500异常(提示找不到app),则可能原因是该应用信息未成功存储(RM发起,查看yarn.resourcemanager.system-metrics-publisher.enabled配置项),或已被Timeline Store清理(查看LevelDB TTL相关配置)。
如果是路径为http://<tsAddress>/ws/v1/timeline/...的异常,直接访问该URL(http://<tsAddress>/ws/v1/timeline/...)返回正常(code为200),但是内容是NotFound信息。
查看AM日志(syslog)启动时打印信息,正常初始化信息如下:
[INFO] [main] |history.HistoryEventHandler|: Initializing HistoryEventHandler withrecoveryEnabled=true, historyServiceClassName=org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService
[INFO] [main] |ats.ATSHistoryLoggingService|: Initializing ATSHistoryLoggingService with maxEventsPerBatch=5, maxPollingTime(ms)=10, waitTimeForShutdown(ms)=-1, TimelineACLManagerClass=org.apache.tez.dag.history.ats.acls.ATSHistoryACLPolicyManager
如果有以下异常信息,说明AM运行时yarn.timeline-service.enabled配置异常,可能原因为FlowAgent问题(FlowAgent里对Hive作业有2种实现,一种是Hive命令,另外一种是Beeline命令,此时默认配置yarn.timeline-service.enabled为false。)
[WARN] [main] |ats.ATSHistoryLoggingService|: org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService is disabled due to Timeline Service being disabled, yarn.timeline-service.enabled set to false
如果您在创建集群时选择了Spark服务,集群会自动启动一个默认的Spark Thrift Server服务。该服务会占用一个YARN Driver的资源。在Spark Thrift Server中运行的任务,默认会通过该Driver向YARN申请所需的资源。
yarn.timeline-service.leveldb-timeline-store.path参数不支持使用OSS地址。
如果您创建的是Hadoop集群,则yarn.timeline-service.leveldb-timeline-store.path的默认值与hadoop.tmp.dir参数相同。请不要修改HDFS的hadoop.tmp.dir参数,因为这会影响yarn.timeline-service.leveldb-timeline-store.path的配置。
在Tez任务特别多的情况下,写入YARN的Timeline Server时,可能会出现连接超时的问题。这是因为Timeline Server进程占用大量CPU导致节点CPU使用率达到极限,进而影响到了作业开发和其他非核心业务(例如报表生成),所以临时停止TimelineServer进程来减轻节点的CPU负载。您可以通过修改以下配置项来解决此问题。
在EMR控制台修改Tez和YARN服务的相应配置,新增或修改配置的具体操作,请参见管理配置项。
在EMR控制台Tez服务的配置页面的tez-site.xml页签,新增参数为tez.yarn.ats.event.flush.timeout.millis,参数值为60000的配置项,该参数用来设置Tez任务将事件写入YARN的Timeline Server时的超时时间。
在EMR控制台YARN服务的配置页面的yarn-site.xml页签,新增或修改以下配置项。修改完配置项后需要在YARN服务的状态页面重启下TimelineServer。
参数 | 参数值 | 说明 |
参数 | 参数值 | 说明 |
yarn.timeline-service.store-class | org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore | 用于指定YARN Timeline Server的事件存储类。 |
yarn.timeline-service.rolling-period | daily | 用于设置YARN Timeline Server的事件滚动周期 |
yarn.timeline-service.leveldb-timeline-store.read-cache-size | 4194304 | 用于设置YARN Timeline Server LevelDB存储的读取缓存大小。 |
yarn.timeline-service.leveldb-timeline-store.write-buffer-size | 4194304 | 用于设置YARN Timeline Server LevelDB存储的写入缓冲区大小。 |
yarn.timeline-service.leveldb-timeline-store.max-open-files | 500 | 用于设置YARN Timeline Server LevelDB存储的最大打开文件数。 |