Performance 我们如何为Spark作业的不同阶段优化CPU/核心/执行器?

Performance 我们如何为Spark作业的不同阶段优化CPU/核心/执行器?,performance,apache-spark,distributed-computing,Performance,Apache Spark,Distributed Computing,如下图所示: 我的Spark工作分为三个阶段: 0. groupBy 1. repartition 2. collect 阶段0和阶段1相当轻量级,但是阶段2相当CPU密集 一次火花作业的不同阶段是否可能有不同的配置 我曾想过将这个Spark任务分为两个子任务,但这违背了使用Spark的目的,Spark的所有中间结果都存储在内存中。这也将大大延长我们的工作时间 有什么想法吗?没有,运行时无法更改spark配置。有关SparkConf的信息,请参见: 注意,一旦SparkConf对象传递到Sp

如下图所示:

我的Spark工作分为三个阶段:

0. groupBy
1. repartition
2. collect
阶段0和阶段1相当轻量级,但是阶段2相当CPU密集

一次火花作业的不同阶段是否可能有不同的配置

我曾想过将这个Spark任务分为两个子任务,但这违背了使用Spark的目的,Spark的所有中间结果都存储在内存中。这也将大大延长我们的工作时间


有什么想法吗?

没有,运行时无法更改spark配置。有关SparkConf的信息,请参见:

注意,一旦SparkConf对象传递到Spark,它将被克隆,用户将无法再修改它。Spark不支持在运行时修改配置



但是,如果在
收集
之前没有其他操作,我猜您不需要执行
重新分区
<代码>重新分区将在节点上移动数据,如果您想做的是
收集
数据到驱动程序节点上,这是不必要的。

I agrre with Shaido's point。但是我想在这里包括Spark 2.x附带的动态资源分配

在较高级别上,Spark应该在不再使用执行器时放弃执行器,并在需要执行器时获取执行器

这意味着应用程序可以动态更改该值,而不是使用spark.executor.instances

spark.executor.instances与spark.DynamicLocation.enabled不兼容。如果同时指定了spark.dynamicAllocation.enabled和spark.executor.instances,将关闭动态分配,并使用指定数量的spark.executor.instances