优化Spark和Yarn配置

时间:2017-09-12 08:24:52

标签: apache-spark

我们有一个包含4个节点的集群,具有上述特征:

enter image description here

Spark工作在处理过程中会花费很多时间,我们怎么能优化这段时间,因为我们知道我们的工作是从RStudio运行的,而且我们仍然有很多内存没有被利用。

enter image description here

2 个答案:

答案 0 :(得分:1)

要在上面的答案中添加更多上下文,我想解释一下如何正确设置这些参数--num-executors--executor-memory--executor-cores

以下答案涵盖了标题中提到的3个主要方面 - 执行者数量执行者内存核心数

可能还有其他参数,如驱动程序内存和其他参数,我在此答案中未提及。

  

案例1硬件 - 6个节点,每个节点16个核心,64 GB RAM

每个执行程序都是JVM实例。所以我们可以在一个Node中有多个执行器

操作系统和Hadoop守护程序需要前1个核心和1 GB,因此可用15核,每个节点63 GB RAM

从一个接一个开始,如何选择这些参数。

  

核心数量:

Number of cores = Concurrent tasks as executor can run

因此我们可能会认为,每个执行程序的更多并发任务将提供更好的性能。

但是研究表明,任何具有超过5个并发任务的应用程序都会导致糟糕的显示。所以坚持5。

这个数字来自执行者的能力,而不是系统拥有的核心数。所以数字5保持不变 即使CPU中有双(32)个核心。

  

执行人数:

回到下一步,每个执行程序有5个核心,在一个节点(CPU)中有15个可用核心 - 我们来 每个节点3个执行器。

因此,每个节点有6个节点和3个执行器 - 我们得到18个执行器。在18个中,我们在YARN中需要1个执行器(java进程),我们得到17个执行器

这是我们从spark-submit shell命令运行时使用--num-executors给出的数字

  

每位遗嘱执行人的记忆:

从上面的步骤,我们每个节点有3个执行器。可用内存为63 GB

So memory for each executor is 63/3 = 21GB.

然而,还需要较小的开销内存来确定每个执行程序对YARN的完整内存请求。 头顶的公式是max(384,.07 * spark.executor.memory)

Calculating that overhead - .07 * 21 (Here 21 is calculated as above 63/3)
                            = 1.47

1.47 GB> 384 MB,头顶是1.47。 从上面的每个21中取出以上内容=> 21 - 1.47~19 GB

执行器内存 - 19 GB

最终数字 - 执行者 - 每个节点17个,每个执行器核心5个,执行程序内存 - 19 GB

这样,将资源正确分配给集群中的spark作业可以加快工作;有效利用现有资源。

答案 1 :(得分:0)

我建议你看一下这些参数:

--num-executors:控制将分配多少执行程序

--executor-memory:每个执行者的RAM

--executor-cores:每个执行者的核心