Spark 有许多可配置的选项。在这里,我想知道在某些约束下的最佳配置是什么。
我已经看过很多这样的帖子,并且认为忽略数据结构的方法不会产生令人满意的解决方案。
集群配置
我们将设置已经建立的--executor-cores 5
,因为之前所做的研究。让我们设置另一个约束,使得--executor-memory 60 Gb
是阈值最大值。这可以表示为--executor-memory
= min(60 Gb, EM
)。
我们将集群中的节点数固定为N_0
,这隐含地调节--num-executors
(等于N_0 * average num-cores on node / 5
)。
数据配置
我们以FN_0
加载FS
到RDD
. 这RDD
最初的分区号PN
等于FN_0
。将所有文件加载到 RDD 中会产生记录RN = RDD.count()
。
问题
我想为 Input -> Map -> Filter -> Action 作业找到一个定性表达式或最佳解决方案--executor-memory
,--num-executors
以及分区号。它们的相互依赖是什么?PN
N_0,FN_0,FS,RN
我的假设是分区数在RN
(大约 100.000)时是理想的,因此每条记录都有自己的任务,但是这种洗牌会以天文数字的方式扩展。对于他的产品FN_0 * FS
和--executor-memory
.