大数据技术分享

spark系列——Executor启动过程分析

2018-04-09  本文已影响15人  code_solve

前言

本篇文章将以问答的方式对Executor的启动进行分析。

1. executor在什么时候开始启动?

新app的加入和集群资源的变动将调用到Master的schedule方法,这个时候会进行startExecutorsOnWorkers()进行executor的调度和启动。(资源申请的是在 appclient 的 registerApplication 消息中)

2.Executor在worker上启动的条件是什么?

3.一个worker上可以启动几个Executor?

4.worker 集群启动Executor的规则是怎么样的?

在可用的 Worker 节点中启动 Executor ,在 Worker 节点每次分配资源时,分配给 Executor 所需的最少 CPU 核数(1.4.2之前是每次只分配一个core),该过程是通过多次轮询进行,在分配过程中Worker 节点可能多次分配,如果 该 Worker 节点可以启动多个 Executor ,则每次分配的时候启动新的 Executor 并赋予资源;如 果 Worker 节点只能启动一个 Executor ,则每次分配的时候把资源追加到该 Executor;

直到没有 worker 节点能够没有满足启动Executor 条件或者已经达到应用程序限制。

5.spark 1.4.2 资源分配的一个bug?

在某一集群中有4 个 Worker 节点,每个节点拥有16个 CPU 核数,其中设置了 spark.cores.max = 48spark.executor.cores = 16,如果spark.deploy.spreadOut = true,按照每次分配 1 个CPU 核数,则每个 Worker 节点的 Executor 将分配到 12 个 CPU 核数,就达到了应用限制的最大核数48,但却没有满足executor启动的最小cores 16,所以将没有 Executor 能够启动,参见 SPARK -8881问题说明。而在后续版本中,每次分配 CPU 核数为 Executor 指定的 CPU 核数,如果没有指定默认情况为1,这样在前面的例子中,按照该分配方式将在3 个 Worker 节点中的 Executor 分配16个 CPU 核数,这样就能够正常启动 Executor 。

通过以上几个问题,大概也能了解到 executor 在worker端启动的整个流程了,本文主要是从源码角度挖掘的信息,如有不对的地方,麻烦指出,谢谢!

上一篇下一篇

猜你喜欢

热点阅读