cal*_*vin 7 hadoop-yarn apache-spark
首先,我读了这篇文章,其中说如果没有明确设置,spark.dynamicAllocation.maxExecutors则其值等于。然而,从本文的以下部分来看,它说“或充当默认值 2 的最小执行器数量”,这让我感到困惑。num-executorsspark.dynamicAllocation.maxExecutors--num-executorsspark.executor.instances
--num-executors我的第一个问题是Spark 2.x 或更高版本中的用法是什么?它是否像一个在动态分配之前有用的过时选项?当引入dynamicAllocation时,--num-executors其--max-executors行为更像是一些默认值spark.dynamicAllocation.*?
--conf spark.dynamicAllocation.maxExecutors和 和有什么区别--max-executor?后者是否相当于前者的别名?
同时,文章没有提及num-executors和之间的关系spark.dynamicAllocation.initialExecutors。所以我做了一个实验,我发送以下参数:
--conf spark.dynamicAllocation.minExecutors=2 --conf spark.dynamicAllocation.maxExecutors=20 --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.initialExecutors=3 --conf spark.dynamicAllocation.maxExecutors=10 --num-executors 0 --driver-memory 1g --executor-memory 1g --executor-cores 2
Run Code Online (Sandbox Code Playgroud)
事实证明,最初分配了 3 个执行器(对应initialExecutors),然后减少到 2 个(对应minExecutors),在这里似乎--num-executors没有用。然而文章中说“-num-executors 或spark.executor.instances 充当执行器的最小数量”,所以现在出现了矛盾。
num-executors我的第三个问题是和之间的关系spark.dynamicAllocation.initialExecutors是spark.dynamicAllocation.initialExecutors什么num-executors?从文档中,我发现当num-executors设置大于时spark.dynamicAllocation.initialExecutors,它将覆盖spark.dynamicAllocation.initialExecutors。小智 1
您的第一篇文章来自 Qubole 的开发人员指南,它不一定反映 Apache Spark 的默认行为。
回答您的问题:
num-executors如果您使用单独的进程或命令设置了动态分配,则不一定会过时,num-executors如果动态分配因任何原因关闭,则可以充当正确分配的保障。因此,我通常将其num-executors设置为等于spark.dynamicAllocation.maxExecutors。max-executors,但我会假设它是一个别名,其中较小的一个,并且spark.dynamicAllocation.maxExecutors是设置的最大值(如果两者都指定了),按照 Spark 的典型逻辑。最好只使用spark.dynamicAllocation.maxExecutors.num-executors其行为与使用动态分配时spark.dynamicAllocation.initialExecutors不同。spark.dynamicAllocation.minExecutors我观察到,如果两者都设置了,则使用num-executors和中的较大者。initialExecutors| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |