当前位置:   article > 正文

Spark yarn 模式设置执行器 executor 的核心数目(core number)、数量以及内存_executor核心数

executor核心数

按需静态设置

参考链接Stack Overflow
接下来的案例包含了标题中的三方面内容:executor 核心数目,executor 数量,executor 内存。例如 driver memory 这样的参数原文并没有提及。

案例:6 个节点,每个节点 16 核 + 64 GB RAM

由于每个 executor 都是一个 JVM 实例,所以我们可以给每个节点分配多个 executor。

  1. 为系统的运行保留资源
    文章原文的内容是:为了保证操作系统和 hadoop 进程的运行,每个节点要预留 1 个核心 + 1 GB 内存。所以每个节点可用的资源为:15 个核心 + 63 GB RAM。
    但是如果你不希望你的系统陷入高负载的情况,你可以多预留一些资源,我个人的使用经验是每个节点预留 4 个核心 + 4 GB 内存。

  2. 确定每个 executor 的核心数量——“magic number”
    executor 核心数量 = executor 能并发执行的任务(task)数量 ,研究表明,不是给 executor 分配越多的核心越好,任何一个 application 分配的核心数目超过 5 个只会导致性能下降,所以我们一般把 executor 核心数量设置为 5 及 5 以下的数字。在接下来的案例讲解中我们把核心数目设置为 5。

  3. 设置 executor 数量
    每个节点的 executor 数量 = 15 / 5 = 3, 所以总的 executor 数量为 3 * 6 = 18,由于 YARN 的 ApplicationMaster 需要占用一个 executor,所以我们设置的 executor 数量为 18 - 1 = 17。

  4. 设置 executor 分配的内存大小
    在之前的步骤中,我们给每个节点分配了 3 个 executor,每个节点可用的 RAM 是 63 GB,所以每个 executor 的内存为 63 / 3 = 21 GB。
    但是 spark 在向 YARN 申请内存时,YARN 会给每个 executor 多分配大小为 overhead 的内存,而 overhead = max(384 MB, 0.07 * spark.executor.memory)。在我们的案例中 overhead = 0.07 * 21 = 1.47 GB > 384 MB,所以我们申请的内存大小为 21 - 1.47 ~ 19 GB。

  5. 最终我们得到的分配方案是:每个 executor 分配 5 个核心,设置 17 个 executor, 每个 executor 分配的内存为 19 GB。写成 spark-submit 命令为:

spark-submit --master yarn\
 --executor-cores 5 --num-executors 17\
 --executor-memory 19 filename
  • 1
  • 2
  • 3

spark 动态分配(spark.dynamicAllocation)

参考链接spark 官方文档
配置 spark 的资源分配为动态分配模式根据 spark 的运行模式(1. standalone 模式 2. YARN 模式 3. Mesos 模式)的不同而略有不同,本文只介绍 YARN 模式的相关配置,详细的配置可以参考上述链接中的官方文档内容。

  1. 定位 spark-<version>-yarn-shuffle.jar,并把它复制到每一个节点的 $SPARK_HOME/yarn目录中。
  2. 在每一个节点的 yarn-site.xml 文件中,在属性 yarn.nodemanager.aux-services 中添加 spark_shuffle , 并 添加属性 yarn.nodemanager.aux-services.spark_shuffle.class ,值为 org.apache.spark.network.yarn.YarnShuffleService。如下所示:
		<property>
                <name>yarn.nodemanager.aux-services</name>
                <value>spark_shuffle,mapreduce_shuffle</value>
        </property>
        <property>
              <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
              <value>org.apache.spark.network.yarn.YarnShuffleService</value>
        </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 重启集群中的所有 NodeManager。
  2. $SPARK_HOME/conf 目录下找到名为 spark-defaults.conf 的配置文件(如果没有则创建一个),添加如下两个配置:
spark.shuffle.service.enabled           true
spark.dynamicAllocation.enabled         true
  • 1
  • 2
  1. 重启 spark,如果 spark 能成功重启,则配置 spark 资源动态分配模式成功。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/265903
推荐阅读
相关标签
  

闽ICP备14008679号