我们正在观察有关 dataproc 上执行程序和任务数量的一些奇怪行为。我们的理解是(理论上)集群中可用的核心数量会限制可以并行运行的任务数量:32 个核心意味着最多 32 个任务。然而,在 dataproc 中,我们经常观察到一些不同的行为,基本上是理论上可能的并发任务数量的两倍。下面是一个例子:
使用 12+1(master) n1-standard-4 机器运行 dataproc 集群。这提供了 48 个可用的 vcore,每台机器有 15GB RAM。我们启动了我们的 spark 应用程序
spark.executor.cores = 4
...这应该给我们 12 个执行程序,每个执行程序能够并行运行 4 个任务,即 48 个并行任务,同时未充分利用内存,因为 dataproc 将自动分配
spark.executor.memory = 5586m
.然而,实际发生的情况是,我们似乎最终得到了 24 个执行器,并行运行了总共 92 个任务,因此(几乎)快了两倍。我们不明白为什么。YARN 监视器还告诉我们有 24 个容器,尽管应该有 12 个(每个有 4 个内核)。
最佳答案
请检查每个节点的 CPU 数量和每个 CPU 的线程数量,并验证您是否拥有与您所说的一样多的内核。
关于apache-spark - dataproc 上的任务数量多于 vCPU 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295436/