首页 > 解决方案 > 解释 Spark 配置之间的区别

问题描述

我必须将我的 spark 应用程序中的执行程序数量设置为 20。在查看官方文档时,我很困惑哪个是更好的配置

我启用了以下配置

在什么用例场景中我将使用其中一个?

标签: apache-sparkpyspark

解决方案


根据火花文档

  1. spark.dynamicAllocation.initialExecutors

如果启用了动态分配,则要运行的初始执行程序数。

如果--num-executors(or spark.executor.instances) 被设置并且大于这个值,它将被用作 executors 的初始数量

正如您在突出显示的文本中看到的那样,当它设置为比 spark.dynamicAllocation.initialExecutors 更高的值时,它可以被 --num-executors 覆盖。基本上,当您的应用程序启动时,它将启动spark.dynamicAllocation.initialExecutors,然后在启用动态分配时缓慢增加直到spark.dynamicAllocation.maxExecutors 。

  1. spark.executor.instances

静态分配的执行者数量。

用外行的话来说,这就像说我想要 x 资源(spark.executor.instances)来完成一项工作

(或者)

我希望 min(x 资源) 和 max(y 资源) 和最初(z 资源) 完成一项工作...条件 (x<=z<=y) 应该始终满足,并且您的资源使用情况将取决于何时需要你的工作正在运行。

什么时候使用动态分配?

当您在集群上运行多个流应用程序或按需 spark-sql 作业时。大多数情况下,您的作业可能需要很少的资源,并且几乎只在大数据流块(高峰时段)中保持空闲状态,作业可能需要更多资源来处理数据,否则集群资源应该被释放并用于其他目的。

注意:启用动态分配时,请务必启用外部 shuffle 服务 (spark.shuffle.service.enabled=true)。

外部 shuffle 服务的目的是允许 executor 被删除而不删除它们编写的 shuffle 文件(更详细)。设置此服务的方式因集群管理器而异

参考: https ://dzone.com/articles/spark-dynamic-allocation


推荐阅读