【发布时间】:2017-09-04 19:35:37
【问题描述】:
在foreachPartitions/mapPartitions的调用中,有两种可能的分配策略:
- 将所有分区预分配给不同的执行器,即,如果我有 1000 个分区和 10 个执行器,那么每个执行器恰好得到 100 个分区。
- 每当执行器准备就绪时,就为其分配一个新分区,即,如果某些分区运行缓慢,则执行器可能会获得更少的分区而其他人会获得更多。
spark实际使用的是哪种策略?
【问题讨论】:
标签: apache-spark
在foreachPartitions/mapPartitions的调用中,有两种可能的分配策略:
spark实际使用的是哪种策略?
【问题讨论】:
标签: apache-spark
这个问题没有简单的答案。 executor 的准确分配取决于集群管理器(独立、YARN、Mesos 等)和配置选项的数量,其中一些方式不适用于所有管理器:
spark.deploy.spreadOut - 循环或合并到最少节点数。spark.dynamicAllocation.enabled - 根据工作负载启用分配。spark.speculation - 为慢速任务启用推测执行。这可能会进一步受到数据局部性(进一步受spark.locality.wait 影响)和运行时事件(失败、超时)和应用程序特定参数(如首选位置)和 DAG/执行计划(在某些情况下 Spark 会更喜欢 co - 分区的位置)。
【讨论】: