【问题标题】:Apache Flink: Limit number of CPUs in a TaskManagerApache Flink:限制任务管理器中的 CPU 数量
【发布时间】:2017-06-23 18:28:44
【问题描述】:

首先我在独立模式下运行

我一直在尝试查找任何配置,但没有找到任何相关信息。

在 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 隔离; 目前插槽仅分隔任务的托管内存。

谢谢!!

【问题讨论】:

  • 只需将 taskmanager.numberOfTaskSlots 设置为您希望 TM 拥有的核心数。此参数设置每个 TM 可用的最大插槽数。默认情况下,每个插槽占用一个核心。

标签: resources apache-flink flink-streaming


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    认为这是在 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 来做到这一点。

    david 在上面是正确的——但原因是因为这个设置,我认为这更接近地回答了 OPs 的问题。所以如果你保留默认值,调整任务槽数会调整核心数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多