yarn资源分配常见问题解析
问题1:
问题描述:
yarn还有资源,为什么我任务启动更多的container
问题背景:
yarn总资源有256G内存/128vcore,有4个NodeManager提供;
spark任务配置:
driver内存10G/8vcore
executor内存16G/8vcore
节点当前资源状况:
一个JDBCServer任务,占用一个container(1G+1vcore)
一个Spark任务,占用3个container(5G+5vcore)
剩余资源:250G+122vcore
理论上新的spark任务可以启动1个driver+14个executor,实际上只能同时启动10个executor
问题分析点:
1. 理论上executor使用4G那么启动这个executor的container应该需要更大的内存,因此一个container使用了16.5G内存;
2. 一个container在运行的时候必须是完整的启动,也就是资源必须由同一个节点提供,不能由2个节点各提供一部分;
详细解析:
实际在使用中,container分配到各个节点上运行情况如下图:
按照上图分配的情形,集群应该剩余58G内存+26vcore,还能启动3个container,但是各个节点上已经无法再启动一个完整的container(16.5G+8vcore)
因此,就出现问题描述里面的情况,yarn还有大量资源,但是无法被使用。
问题2:
问题描述:
yarn队列资源为什么能使用到200%
问题背景:
配置某个yarn队列资源:默认资源池容量10%,默认资源池最大容量100%:
实际在使用的过程中会出现资源使用率200%以上的情况:
问题分析:
此问题涉及概念:
Absolute Configured Capacity:
配置了此队列在yarn上能使用的最小资源,当yarn任务繁忙的时候,依旧会保证这个配置的比例资源给队列使用。
Absolute Configured Max Capacity:
配置了此队列在yarn上能使用的最大资源,当yarn任务不多的时候,队列上的任务可以占用yarn资源的最大值。
而问题中的队列使用容量,比值是(实际使用资源/最小可用资源),因此可以在yarn任务不繁忙的时候占用超过100%的最小资源限制。
问题3:
问题描述:
yarn还有资源,但是提交任务一直处于Pending状态。
问题背景:
yarn界面上显示还有资源可以使用,但是新提交的任务一直处于Pending状态(ACCEPTED状态)
问题分析:
yarn队列除了最大资源限制,还对队列中所有任务的ApplicationMaster占用资源的总和有限制:Configured Max Application Master Limit
例如上图中的default队列,限制了40%的资源,而在当前状态中已经有一个任务占用了一个container(1G+1vcore),因此后续任务的ApplicationMaster总资源不能超过3.5G+4vcore
如果提交一个任务的ApplicationMaster请求资源大于2.5G或者大于3vcore,则任务会被Pending,直到有足够的队列资源比例来启动此任务的ApplicationMaster。
- 点赞
- 收藏
- 关注作者
评论(0)