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

时间:2016-08-26 16:32:05

标签: apache-spark yarn

我在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。

这些是我的问题

  1. 为什么火花不会创造出19个执行者。是否有计算背后 那些限制它的场景?
  2. 如果我希望获得最佳的火花性能,在我的群集配置下运行spark-shell的最佳配置是什么
  3. 默认情况下,driver-core设置为1。增加它会提高性能。
  4. 这是我的纱线配置

    • 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 :(得分:2)

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

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

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

Cloudera blog中所述,当每个执行者最多分配5个核心时,YARN以最佳性能运行

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

现在,作为' 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驱动程序,并且计算需要以不同方式完成。 / p>

答案 1 :(得分:0)

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

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