【问题标题】:What if the number of task slot is greater than the task manager vcores如果任务槽的数量大于任务管理器的 vcores 怎么办
【发布时间】:2020-08-25 07:56:13
【问题描述】:

我已经在yaml配置文件中设置了yarn.container.vcores=1,并且我用

启动了一个flink集群

yarn-session.sh -jm 1024 -tm 2048 -n 4 -s 3

通过上面的命令,我启动了 4 个任务管理器,每个 TM 只分配了 1 个 vcore,每个 TM 也有 3 个任务槽。

假设如果我在 TM 中运行 3 个子任务,则每个任务槽都拥有一个子任务。

这3个子任务是3个线程同时运行(使用3个cpu核心,vcore=1不生效)还是只有一个线程同时运行(vcore = 1生效)

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    无论有多少内核可用,每个任务都有自己的 JVM 线程。如果任务管理器有 3 个插槽和 1 个 vcore 就可以了。在这些槽中运行的任务只会争夺 TM 可用的资源。

    请注意,通常您会在一个插槽中运行多个子任务(或任务 --tasks and subtasks are really the same thing)。对于只有一个子任务的每个任务槽,要么该作业非常简单(即只有一个节点的作业图),要么您做了一些特殊的事情来隔离子任务。

    【讨论】:

    • 谢谢@david。那么我是否可以得出结论:如果 TM 有 3 个lot 和 1 个 vcore,那么这 3 个 slot 中的子任务实际上会尝试使用 at many as TM cpu cores 来同时运行这些子任务?
    • 每个(子)任务将有一个 JVM 线程。这 3 个插槽中的所有 JVM 线程都将竞争 TM 可用的 1 个 vcore。
    • 请注意,Flink 没有确保真正只使用一个内核的机制。我知道 K8s 执行得很好,但是上次我检查 YARN 时更被动地检查它(在检测到 RAM 使用率后被杀死的任务高于请求)。另请注意,如果它确实只采用分配给bugs.openjdk.java.net/browse/JDK-8242287 的内容,它可能取决于您非常具体的java 版本。
    • 从我读到的有关 yarn 如何强制 vcore 限制的内容,它使用 linux cgroups 设置软限制,以占总 CPU 的百分比表示。如果有额外的 CPU 可用,可能会允许需要更多 CPU 的纱线应用程序超出其限制。
    • 谢谢,关键是任务或子任务是如何发送到TM的。假设 TM 有 3 个插槽并且只分配了 1 个 vocre,并且这些插槽总共要运行 6 个任务/子任务)。如果JM将任务一个一个发送到TM(完成后发送下一个任务),那么1个vcore限制是有意义的。如果这 6 个任务同时发送,那么一个 vcore 限制没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多