首页 文章

Spark增加了纱线模式下执行程序的数量

提问于
浏览
1

我在4节点集群上运行Spark over Yarn . 节点中每台机器的配置为128GB内存,每节点24核CPU . 我使用这个命令运行Spark

spark-shell --master yarn --num-executors 19 --executor-memory 18g --executor-cores 4 --driver-memory 4g

但Spark最多只能启动16个执行程序 . 我将纱线的最大值分配设置为80(我拥有的94个核心) . 所以我的印象是,这将启动19个执行者,但它最多只能有16个遗嘱执行人 . 此外,我不认为即使这些执行程序完全使用分配的VCores .

这些是我的问题

  • 为什么没有't spark creating 19 executors. Is there a computation behind the scenes that'限制它?

  • 如果我想获得最佳的火花性能,在我的群集配置下运行spark-shell的最佳配置是什么

  • driver-core默认设置为1 . 增加它会提高性能 .

这是我的纱线配置

  • yarn.nodemanager.resource.memory-mb:106496

  • yarn..minimum-allocation-mb:3584

  • yarn..maximum-allocation-mb:106496

  • yarn..minimum-allocation-vcores:1

  • yarn..maximum-allocation-vcores:20

  • yarn.nodemanager.resource.cpu-vcores:20

2 回答

  • 0

    我仍然无法评论,所以它将作为一个答案 .

    this问题 . 请你减少执行程序内存并尝试再次运行吗?

  • 1

    好吧,按照我们的配置,我们有:(我也是Spark的新手但下面是我在这个场景中推测的)每个节点有24个内核和128GB内存,我们在集群中有4个节点 .

    我们为开销分配1个核心和1 GB内存,并考虑您在YARN-Client模式下运行集群 .

    我们有4个节点的127GB Ram和23个核心 .

    如_291021中所述,当每个执行程序最多分配5个核心时,YARN以最佳性能运行 .

    所以,23X4 = 92个核心 . 如果我们为每个 Actuator 分配5个核心,则18个 Actuator 具有5个核心,1个 Actuator 具有2个核心或类似 . 因此,假设我们的应用程序中有18个执行程序,每个执行程序有5个核心 . Spark在4个节点上分配这18个 Actuator . 假设它的分布式为:第一个节点:4个 Actuator 第二个节点:4个 Actuator 第3个节点:5个 Actuator 第4个节点:5个 Actuator

    现在,由于'yarn.nodemanager.resource.memory-mb:106496'在您的配置中设置为104GB,每个节点可以分配最多104 GB内存(我建议增加此参数) . 对于具有4个执行程序的节点:每个执行程序104/4 - 26GB对于具有5个执行程序的节点:每个执行程序104/5~21GB . 现在剩下7%的内存用于开销,我们得到24GB和20GB .

    所以我建议使用以下配置: - --num-executors:18 --executor-memory:20G --executor-cores:5

    此外,这是考虑您在客户端模式下运行群集,但如果您在Yarn-cluster模式下运行群集1节点将被分配fir驱动程序,并且计算将需要以不同方式完成 .

相关问题