【问题标题】:Are partitions pre-allocated to executors or dynamically allocated?分区是预先分配给执行者还是动态分配?
【发布时间】:2017-09-04 19:35:37
【问题描述】:

在foreachPartitions/mapPartitions的调用中,有两种可能的分配策略:

  1. 将所有分区预分配给不同的执行器,即,如果我有 1000 个分区和 10 个执行器,那么每个执行器恰好得到 100 个分区。
  2. 每当执行器准备就绪时,就为其分配一个新分区,即,如果某些分区运行缓慢,则执行器可能会获得更少的分区而其他人会获得更多。

spark实际使用的是哪种策略?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这个问题没有简单的答案。 executor 的准确分配取决于集群管理器(独立、YARN、Mesos 等)和配置选项的数量,其中一些方式不适用于所有管理器:

    • spark.deploy.spreadOut - 循环或合并到最少节点数。
    • spark.dynamicAllocation.enabled - 根据工作负载启用分配。
    • spark.speculation - 为慢速任务启用推测执行。

    这可能会进一步受到数据局部性(进一步受spark.locality.wait 影响)和运行时事件(失败、超时)和应用程序特定参数(如首选位置)和 DAG/执行计划(在某些情况下 Spark 会更喜欢 co - 分区的位置)。

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 2019-01-29
      • 2013-01-02
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2021-07-14
      相关资源
      最近更新 更多