scala- Yarn 上的 spark-无法分配容器,提示请求的资源大于允许 怎么解决

scala- Yarn 上的 spark-无法分配容器,因为请求的资源大于允许的最大分配

展开
收起
账号已穿越 2021-10-27 14:34:17 1204 分享 版权
阿里云 AI 助理回答

当您在YARN上运行Spark作业时遇到“无法分配容器,因为请求的资源大于允许的最大分配”的问题,这通常意味着您的Spark任务申请的资源超出了YARN配置中允许的最大值。为了解决这一问题,请按照以下步骤检查和调整相关配置:

  1. 检查应用资源请求

    • 首先,确认您的Spark作业提交时所请求的资源(内存和CPU核心数)是否超过了YARN集群或指定队列的限制。
  2. 调整集群级资源配置

    • 内存限制:检查并可能增加yarn.scheduler.maximum-allocation-mb的值,在yarn-site.xml中设置。此值代表了单个容器可请求的最大内存,默认值依据EMR创建时最大非Master实例组的可用内存设定。
    • CPU核心数限制:调整yarn.scheduler.maximum-allocation-vcores的值,在同文件中设置。默认值为32,根据需要可适当提高。
  3. 队列级别资源控制

    • 如果您的Spark作业被提交到特定队列,确保该队列的资源限制没有成为瓶颈。通过修改capacity-scheduler.xml中的yarn.scheduler.capacity.<queue-path>.maximum-allocation-mbyarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores来分别调整队列的最大内存和CPU核心数。这些配置会覆盖集群级设置,仅对相应队列生效。
  4. 重启受影响服务

    • 修改上述配置后,需重启ResourceManager (yarn.resourcemanager) 和NodeManager (yarn.nodemanager) 服务以使更改生效。对于队列配置的更改,重启ResourceManager服务即可。
  5. 考虑AM资源比例

    • 如果发现队列有资源但任务仍无法启动,可能是Application Master (AM) 资源不足。检查并调整yarn.scheduler.capacity.maximum-am-resource-percent(在capacity-scheduler.xml中),以提高AM可使用的资源比例,如从0.25调整至0.5,确保Spark作业能够顺利提交。
  6. Spark作业内存溢出处理

    • 若Spark作业因内存使用超出其申请量而被YARN终止,可在Spark服务配置中调高spark.driver.memoryOverheadspark.executor.memoryOverhead的值,以增加堆外内存空间,避免因内存限制导致的任务失败。

请根据实际情况,结合YARN和Spark的监控信息,逐步排查并调整相应的配置项。务必注意,资源调整应基于实际需求与集群能力合理进行,避免造成资源浪费或碎片化。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

国内唯一 Forrester 公共云容器平台领导者象限。

还有其他疑问?
咨询AI助理