Flink学习指南玩转大数据Java

Flink 使用之 Yarn 资源问题排查

2023-01-13  本文已影响0人  AlienPaul

Flink 使用介绍相关文档目录

Flink 使用介绍相关文档目录

前言

Flink作业提交的时候会遇到任务无法提交,或者是长时间处于ACCEPTED状态。此时需要重点排查Yarn的资源的相关配置。

本篇为大家带来Flink on Yarn 资源问题的排查思路。

典型报错

Flink on Yarn程序提交的时候如果资源不足,JobManager会出现类似如下的错误:

java.util.concurrent.CompletionException: org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Slot request bulk is not fulfillable! Could not allocate the requeired slot within slot request timeout

根因是Yarn的资源不足,或者是超过配置限制。

确定Flink使用的资源

首先需要根据Flink配置文件,或者作业的提交命令,确定Flink的资源配置,以及作业提交到了哪个队列,是否指定了node label或者指定了哪个node label。

使用Yarn session提交的Flink作业,注意检查的参数有:

Yarn cluster模式:

另外提交作业时还有:

flink-conf.yaml配置文件:

Yarn资源相关配置

本节列出了需要重点检查Yarn的配置。

内存相关:

CPU相关:

容量调度资源配置:

容量调度应用限制配置:

资源限制检查顺序:

Hadoop官网的解释如下:

  1. maximum-applications check - if the limit is exceeded, the submission is rejected immediately.
  2. max-parallel-apps check - the submission is accepted, but the application will not transition to RUNNING state. It stays in ACCEPTED until the queue / user limits are satisfied.
  3. maximum-am-resource-percent check - if there are too many Application Masters running, the application stays in ACCEPTED state until there is enough room for it.

中文解释为:

  1. 检查maximum-applications。如果超出,拒绝作业提交。(硬限制)
  2. 检查max-parallel-apps。如果超出,作业进入ACCEPTED状态,等到条件满足时候恢复执行。(软限制)
  3. 检查maximum-am-resource-percent。如果超出,作业进入ACCEPTED状态,等到条件满足时候恢复执行。(软限制)

权限配置:

标签调度相关:

Yarn的节点可以被绑定标签。从而可以限制Yarn作业调度的物理节点。当然也能够对作业资源进行限制。需要注意的是没有绑定任何标签的节点自成一类,他们能够被所有队列使用到。

使用yarn node -list -showDetails命令查看Yarn集群节点和节点绑定的label。通过绑定某个label的节点数和前面所述的节点可用内存和vcore配置,可以计算出该label纳管的资源最大值。

队列标签配置:

如果队列标签配置错误或者是用户提交应用时候使用的标签配置有误,很有可能导致应用无法获得足够的资源,最终无法运行。

Flink资源计算方法

TaskManager数量 = 向上取整(parallelism.default或者实际运行时指定的并行度 / taskmanager.numberOfTaskSlots)

如果各算子并行度不同,parallelism取用并行度最大的算子并行度。

总的Container数量 = 1 + TaskManager数量。

其中1是JobManager(AppMaster角色),它自己占用一个container。

相关Yarn配置:

需要检查目标队列的剩余资源是否能够满足作业需要。


每个container的vcore使用量 = taskmanager.numberOfTaskSlots或者-s参数。

相关Yarn配置:


JobManager container内存使用量 = jobmanager.memory.process.size或者-jm参数。

因为JobManager在Yarn中的角色是AppMaster,因此它的资源使用量受到了yarn.scheduler.capacity.maximum-am-resource-percent配置项的限制。

除此之外还有:


TaskManager container内存使用量 = taskmanager.memory.process.size或者-tm参数。

相关Yarn配置:

参考链接

https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

https://zhuanlan.zhihu.com/p/335881182

上一篇下一篇

猜你喜欢

热点阅读