scala- Yarn 上的 spark-无法分配容器,因为请求的资源大于允许的最大分配
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当您在YARN上运行Spark作业时遇到“无法分配容器,因为请求的资源大于允许的最大分配”的问题,这通常意味着您的Spark任务申请的资源超出了YARN配置中允许的最大值。为了解决这一问题,请按照以下步骤检查和调整相关配置:
检查应用资源请求:
调整集群级资源配置:
yarn.scheduler.maximum-allocation-mb
的值,在yarn-site.xml
中设置。此值代表了单个容器可请求的最大内存,默认值依据EMR创建时最大非Master实例组的可用内存设定。yarn.scheduler.maximum-allocation-vcores
的值,在同文件中设置。默认值为32,根据需要可适当提高。队列级别资源控制:
capacity-scheduler.xml
中的yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb
和yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores
来分别调整队列的最大内存和CPU核心数。这些配置会覆盖集群级设置,仅对相应队列生效。重启受影响服务:
yarn.resourcemanager
) 和NodeManager (yarn.nodemanager
) 服务以使更改生效。对于队列配置的更改,重启ResourceManager服务即可。考虑AM资源比例:
yarn.scheduler.capacity.maximum-am-resource-percent
(在capacity-scheduler.xml
中),以提高AM可使用的资源比例,如从0.25调整至0.5,确保Spark作业能够顺利提交。Spark作业内存溢出处理:
spark.driver.memoryOverhead
和spark.executor.memoryOverhead
的值,以增加堆外内存空间,避免因内存限制导致的任务失败。请根据实际情况,结合YARN和Spark的监控信息,逐步排查并调整相应的配置项。务必注意,资源调整应基于实际需求与集群能力合理进行,避免造成资源浪费或碎片化。