Apache Spark:使用硬件资源

时间:2016-01-08 10:55:19

标签: apache-spark

我正在尝试使用Spark Standalone Cluster。我想设置群集设置,应用程序始终使用尽可能多的群集资源。我更改了以下设置:

spark-defaults.conf (on Master node)
  spark.driver.cores  (works fine)
  spark.driver.memory (works fine)
  spark.executor.cores
  spark.executor.memory
spark-env.sh (on each node, depending on the available hardware)
  SPARK_WORKER_CORES
  SPARK_WORKER_MEMORY

我是对的,每个Executor始终使用相同的资源运行,因为设置spark.executor.cores&全局设置spark.executor.memory

是否无法为每台机器设置不同的值以更有效地使用资源?我的群集具有以下硬件:

 - Master: 12 CPU Cores & 128 GB RAM (~10 GB RAM / Core)
 - Slave1: 12 CPU Cores &  64 GB RAM (~ 5 GB RAM / Core)
 - Slave2:  6 CPU Cores &  64 GB RAM (~10 GB RAM / Core)

正如您所看到的,RAM / Core值非常不同,这似乎是问题的问题吗?

2 个答案:

答案 0 :(得分:1)

只需更改spark-env.sh Master和每个奴隶(Executor节点)

主人:spark-env.sh

SPARK_WORKER_CORES=12
SPARK_WORKER_MEMORY=10g

奴隶1:spark-env.sh

SPARK_WORKER_CORES=12
SPARK_WORKER_MEMORY=5g

奴隶2:spark-env.sh

SPARK_WORKER_CORES=6
SPARK_WORKER_MEMORY=10g

请查看此documentation链接以了解配置信息。

答案 1 :(得分:0)

好的,我现在知道了 - 设置以下参数:

arr = [['value', 'element1'],['value', 'element2'], ['value1', 'element1'], ['value', null]];

obj = {}
arr.forEach(function(item) {
  var key = item[0];
  if (key) {
    obj[key] = obj[key] || [];
    item.forEach(function(val, index) {
      if (index != 0 && val) {
        obj[key].push(val);
      }
    });
  }
});

console.log(Object.keys(obj).map(function(key) {
  obj[key].unshift(key);
  return obj[key];
}));

因为我想使用" strong"驱动程序和执行程序进程的主节点,我还设置了以下内容:

spark-defaults.conf (on Master):
  spark.executor.memory 60g
  (spark.executor.cores not set! -> executor can use all available -> see setting SPARK_EXECUTOR_CORES below!)