gpt4 book ai didi

apache-spark - Dataproc : possible to run more executors per CPU? 上的 Spark

转载 作者:行者123 更新时间:2023-12-05 00:12:42 34 4
gpt4 key购买 nike

我在 Google Cloud Dataproc 上运行 Spark 1.6.2(所以 Dataproc 版本 1.0)。我的集群由几个 n1-standard-8 组成 worker ,我每个核心运行一个执行程序( spark.executor.cores=1 )。

我看到我的整体 CPU 利用率从未超过 50%,即使每个 worker 运行正确数量的 executor(我在每个 worker 上为 OS 等留下一个核心)。

我想知道是否有可能以某种方式在每个工作人员上运行更多的执行程序以更充分地利用集群?如果是这样,我需要指定哪些设置?
lscpu工作机器上的转储看起来像这样:

Architecture:          x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU @ 2.50GHz
Stepping: 4
CPU MHz: 2500.000
BogoMIPS: 5000.00
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 30720K
NUMA node0 CPU(s): 0-7

感谢您的任何建议!

最佳答案

默认情况下,YARN 仅根据内存而不是它们请求的内核数来调度容器(在本例中为 spark 执行器)。 Dataproc 设置执行器内存,以便每个节点有 2 个执行器。
spark.executor.cores在 YARN 的上下文中基本上被忽略,但它用于决定并行运行多少个任务。如果您要降低 spark.executor.cores ,但不是执行程序内存,您实际上是在减少并行度!

你应该不理会执行者的内存并提升 spark.executor.cores .在 n1-standard-4 上,您应该能够提高 spark.executor.cores从 2 到 4 没有问题。

如果您尝试设置 spark.executor.cores高于节点上 YARN vcore 的数量,Spark 会提示。您可以通过设置 yarn.nodemanager.resource.cpu-vcores=<large-number> 来解决此问题.然后,<large-number>将是新的上限。

根据您的工作的 I/O 限制,您可以轻松地翻倍或翻倍 spark.executor.cores ,如果不是更多。将文件写入 GCS 往往受 I/O 限制。

请注意,虽然您可以在运行 spark 作业时指定 spark 属性,但您只能在创建集群时指定该 YARN 属性:

  • 工作属性:https://cloud.google.com/sdk/gcloud/reference/beta/dataproc/jobs/submit/spark
  • 集群属性:https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties
  • 关于apache-spark - Dataproc : possible to run more executors per CPU? 上的 Spark ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50295610/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com