【问题标题】:How to set executor number by memory in YARN mode?如何在YARN模式下通过内存设置执行器编号?
【发布时间】:2016-05-22 19:25:09
【问题描述】:

我在r3.8 xlarge集群上做了一些测试,每个实例有32核,244G内存

如果我设置 spark.executor.cores=16, spark.executor.memory=94G,每个实例有 2 个执行器,但是当我设置 spark.executor.memory 大于 94G 时,每个实例只有一个执行者;

如果我设置 spark.executor.cores=8, spark.executor.memory=35G,每个实例有 4 个执行器,但是当我设置 spark.executor.memory 大于 35 时,每个实例的执行者不超过 3 个。

那么,我的问题是,执行者编号是如何通过内存集得出的?公式是什么?我虽然 Spark 只是简单地使用 70% 的物理内存来分配给执行程序,但似乎我错了......

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    在 Yarn 模式下,您需要通过 num-executors 设置执行器数量,通过 executor-memory 设置执行器内存。这是一个例子:

    spark-submit --master yarn-cluster --executor-memory 6G --num-executors 31 --executor-cores 32 example.jar Example
    

    现在每个 executor 都从 yarn 请求一个 6G + 内存开销和 1 个核心的容器。

    更多信息on spark documentation

    【讨论】:

      【解决方案2】:

      关于您看到的行为,您的 YARN 节点管理器可用的内存量实际上小于操作系统可用的 244GB。要验证这一点,请查看您的 YARN ResourceManager Web UI,您可以看到整个集群总共有多少可用内存。这是由 yarn-site.xml 中的yarn.nodemanager.resource.memory-mb 确定的。

      回答您关于如何确定执行器数量的问题:在 YARN 中,如果您使用 spark 并将 dynamicAllocation.enabled 设置为 true,则执行器的数量限制在 dynamicAllocation.minExecutors 以上和 dynamicAllocation.maxExecutors 以下。

      除此之外,您还要接受 YARN 的资源分配,对于大多数调度程序而言,YARN 将分配资源以填充您的作业运行所在的给定队列。

      如果您有一个完全未使用的集群和一个 YARN 队列,并且您向它提交作业,Spark 作业将继续添加具有给定内核数和内存量的执行器,直到整个集群已满(或没有足够的内核/内存来分配额外的执行程序)。

      【讨论】:

        猜你喜欢
        • 2016-11-15
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 2020-12-05
        • 2016-05-08
        • 1970-01-01
        相关资源
        最近更新 更多