为什么 Flink 1.4 中每个处理槽都使用独立的 core?

Why every processing slots in Flink 1.4 use separate core?

我有一个docker-compose with hadoop big-data-europe and flink 1.10 and 1.4 which I try to start in separate container. I use this reference YARN Setup,其中有一个例子

示例:发出以下命令分配 10 个任务管理器,每个任务管理器具有 8 GB 内存和 32 个处理槽:

./bin/yarn-session.sh -n 10 -tm 8192 -s 32

当我使用flink 1.10版本时,flink cluster with yarn session starting是可以的,但是当版本是1.4时出现异常:

java.lang.RuntimeException: Couldn't deploy Yarn session cluster
flinkmanger        |    at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:372)
flinkmanger        |    at org.apache.flink.yarn.cli.FlinkYarnSessionCli.run(FlinkYarnSessionCli.java:679)
flinkmanger        |    at org.apache.flink.yarn.cli.FlinkYarnSessionCli.call(FlinkYarnSessionCli.java:514)
flinkmanger        |    at org.apache.flink.yarn.cli.FlinkYarnSessionCli.call(FlinkYarnSessionCli.java:511)
flinkmanger        |    at java.security.AccessController.doPrivileged(Native Method)
flinkmanger        |    at javax.security.auth.Subject.doAs(Subject.java:422)
flinkmanger        |    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1807)
flinkmanger        |    at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)
flinkmanger        |    at org.apache.flink.yarn.cli.FlinkYarnSessionCli.main(FlinkYarnSessionCli.java:511)
flinkmanger        | Caused by: org.apache.flink.configuration.IllegalConfigurationException: The number of virtual cores per node were configured with 32 but Yarn only has 8 virtual cores available. Please note that the number of virtual cores is set to the number of task slots by default unless configured in the Flink config with 'yarn.containers.vcores.'
flinkmanger        |    at org.apache.flink.yarn.AbstractYarnClusterDescriptor.isReadyForDeployment(AbstractYarnClusterDescriptor.java:265)
flinkmanger        |    at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deployInternal(AbstractYarnClusterDescriptor.java:415)
flinkmanger        |    at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:367)
flinkmanger        |    ... 8 more

怎么解释呢,我以为每个槽=线程(-s),每个任务管理器=纱线容器,只有容器才能在单独的处理器上工作?

documentation for configuration parameters in yarn deployment mode 中所述,yarn.containers.vcores 指定每个 YARN 容器的虚拟核心 (vcores) 数量。默认情况下,vcore 数设置为每个 TaskManager 的槽数(如果设置),否则设置为 1。为了使用此参数,您的集群必须启用 CPU 调度。

在您的情况下,您指定了 -s 32 taskmanager.numberOfTaskSlots 参数而不覆盖 yarn.containers.vcores 设置,因此应用程序获取了具有 32 个 vcores 的容器。为了能够 运行 每个 TM 有 32 个插槽且只有 8 个内核,请在 flink/conf/flink-conf.yaml 中将 yarn.containers.vcores 设置为 8

关于资源,是的,每个任务管理器等于获得的纱线容器,但容器有多个 vcores,由 yarn.containers.vcores 指定(或每个容器的槽数)。关于插槽,它更像是一个资源组,每个插槽可以有多个任务,每个 运行ning 在一个单独的线程中。所以,slot本身并不局限于只有一个线程。请在 Task Slots and Resources Docs page.

找到更多信息