Spark内核和内存管理

时间:2015-07-05 19:53:35

标签: apache-spark

我们在ec2上运行spark 1.4.0,有6台机器,每台4个核心。我们正在尝试在多个总执行器核心上运行应用程序。但我们希望它尽可能在最少数量的机器上运行(例如,total-executor-cores = 4,我们需要单机.total-executor-cores = 12,我们需要3台机器)

我在以下命令中运行spark shell:

/root/spark/bin/spark-shell --total-executor-cores X --executor-cores 4

/root/spark/bin/spark-shell --total-executor-cores X

并检查了spark UI上的核心,并找到了以下内容:

Req total-executor-cores    Actual cores with executor-cores param  Actual cores without executor-cores=4 param
24  24  24
22  22  16
20  20  8
16  16  0
12  12  0
8   8   0
4   4   0

我们的问题:

  1. 为什么我们总是得不到我们在通过" executor-cores 4"时所要求的核心数量?参数?我们实际得到的核心数似乎是" max(24-(24-REQ_TOTAL_CORES)* 4,0)"
  2. 我们如何获得原始请求?以最少的机器获得核心?使用executor-cores时,我们遇到了(1)中描述的问题,但内核的核心数最少
  3. 使用参数spark.deploy.spreadOut,似乎没有帮助我们的请求
  4. 谢谢,

    尼赞

1 个答案:

答案 0 :(得分:-1)

如果我没有错,默认情况下spark由群集节点配置为1个执行者,所以我不是专家,但我认为你想要的是1台机器和4个核心(假设你有默认配置)

/root/spark/bin/spark-shell --executor-cores 4 --num-executors 1

这适用于3台机器和12个核心

/root/spark/bin/spark-shell --total-executor-cores 12 --num-executors 3

正如我之前所说,我不是专家,但我认为 - executor-cores 4 意味着每个执行者(默认情况下每个群集节点)将使用4个核心,而 - -total-executor-cores 12 意味着将在所有执行程序中使用12个核心。另外我认为默认情况下spark会根据可用的执行器数量尝试使用所有可能的核心,所以也许启动spark的第一句就足够了

/root/spark/bin/spark-shell --num-executors 1

因为每个执行程序都有4个核心(同样,假设您有默认配置)。

让我知道它是否适合你