如何计算每个执行器和内存的数量?

时间:2015-11-21 19:24:10

标签: apache-spark apache-spark-sql

嗨我有16个RAM和4个内核的两个节点。 任何人都可以建议我使用火花属性,例如没有遗嘱执行者和遗嘱执行者记忆吗?

我正在使用spark sql查询(选择*带有2个连接的查询)并且还建议我一种方式,以便我将此查询过程时间降低到1秒,我的输入数据现在为10 GB

2 个答案:

答案 0 :(得分:3)

每个进程的典型工作负载可能在2到8GB的范围内使用。鉴于您的资源很少,那么每个执行者可能有3G和4个执行者(每个核心一个)。这为O / S和其他过程留下了大量的ram(4gb)。

使用4个执行程序将是spark standalone的默认设置(您正在使用它还是使用Yarn?)在这种情况下,您无需明确指定它。 但以防万一:

Standalone(和mesos):

 --total-executor-cores=8

纱线:

 --num-executors=1 --executor-cores=4 

另一个设置是

 --executor-memory=3G

答案 1 :(得分:0)

有两种方法可以分配资源静态和动态分配。以下是如何为应用程序分配静态资源

您的群集资源总数 16 GB RAM 4核

首先应为操作系统分配1个核心和1 GB,留下15 GB RAM和3个核心

Core是Spark中的并发级别,因此您有3个内核可以同时运行3个并发进程。

接下来计算执行者的数量。每个执行程序都在自己的JVM进程中运行,每个Worker节点都可以运行多个执行程序。建议每个执行程序最多具有5个并发进程,否则在单个JVM实例中将无法管理争用量并发进程。因为你只有3个核心,所以你可以拥有1个执行者

在3个内核中划分15 GB的RAM将为每个内核留下5 GB的空间。

因此,在您的情况下,您将设置以下属性

Number of cores = 3
Number of Executors = 1
RAM = 15 GB