Apache Flink:限制TaskManager中的CPU数量

时间:2017-06-23 18:28:44

标签: resources apache-flink flink-streaming

首先我在独立模式下运行

我一直试图找到任何配置,但我还没有发现任何相关内容。

在Spark中,有一些配置允许您限制每个从站中使用的CPU数量:

  • SPARK_WORKER_CORES(工作人员配置)
  • spark.executor.cores(群集配置)

但是在Flink中你可以设置要使用的最大内存和任务槽的数量(它只是划分内存),如上所述in the official documentation

  
      
  • taskmanager.numberOfTaskSlots:单个TaskManager可以运行的并行操作符或用户函数实例的数量(默认值:   1)。如果此值大于1,则单个TaskManager占用   函数或运算符的多个实例。那样的话   TaskManager可以使用多个CPU核心,但同时也可以   可用内存分为不同的运算符或函数   实例。该值通常与数量成正比   TaskManager的机器具有的物理CPU核心(例如,等于   核心数量,或核心数量的一半)。
  •   

here more focused问我的问题:

  

每个任务槽代表一个固定的资源子集   任务管理器。例如,具有三个插槽的TaskManager将   将1/3的托管内存专用于每个插槽。开槽   资源意味着子任务不会与子任务竞争   管理内存的其他工作,但有一定的数量   保留的托管内存。请注意,这里没有CPU隔离;   当前插槽只分离任务的托管内存。

谢谢!

2 个答案:

答案 0 :(得分:0)

我一直在寻找同样的问题。根据我的理解,没有配置可以设置每个插槽的CPU数量。设置插槽数将在插槽之间划分内存,从而减少每个插槽的内存。我最好的猜测是将插槽数设置为1,并使CPU可用于在容器中运行的任务管理器进程(可能是docker)。您可以通过增加任务管理器的数量来实现相同的并行性。

答案 1 :(得分:0)

认为这在flink配置文档中: https://ci.apache.org/projects/flink/flink-docs-stable/ops/config.html#yarn

  

yarn.containers.vcores -1

     

每个YARN容器的虚拟核心数(vcore)。默认情况下,vcore数设置为每个TaskManager的插槽数(如果已设置),否则设置为1。为了使用此参数,您的群集必须启用CPU调度。您可以通过设置org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler来实现。

大卫在上面是正确的-但其原因是由于这种设置,我认为这更贴切地回答了OP的问题。因此,如果您保留默认值,则调整任务插槽数将调整内核数。