Use case of spark.executor.allowSparkContext



我正在查看spark-core,我发现了一个未记录的配置,这是spark.executor.allowSparkContext从3.0.1开始可用。我无法在spark官方文档中找到细节。在代码中,这个配置有一个简短的描述

如果设置为true, SparkContext可以在executor中创建。

但是我想知道,SparkContext如何在executor中创建?据我所知,SparkContext是在驱动程序上创建的,执行器是由资源管理器分配的。所以SparkContext总是在executor之前创建。这个配置的用例是什么?

从Spark Core 3.0迁移到3.1:

在Spark 3.0及以下版本中,SparkContext可以在执行器中创建。从Spark 3.1开始,创建时会抛出异常执行器中的SparkContext。您可以通过设置创建时配置spark.executor.allowSparkContextSparkContext in executors.

根据此问题SPARK-32160,自3.1版本以来,在创建SparkContext(参见pyspark pyspark/context.py)时添加了一个检查,该检查阻止执行器创建SparkContext:

if (conf is None or
        conf.get("spark.executor.allowSparkContext", "false").lower() != "true"):
   # In order to prevent SparkContext from being created in executors.
   SparkContext._assert_on_driver() 
# ...
@staticmethod
def _assert_on_driver():
    """
    Called to ensure that SparkContext is created only on the Driver.
    Throws an exception if a SparkContext is about to be created in executors.
    """
    if TaskContext.get() is not None:
        raise Exception("SparkContext should only be created and accessed on the driver.")

我建议文档和实现中的错误。

如果你了解Spark架构,整个概念就没有意义了。除此之外,我们没有任何声明。

从另一个答案和大量关于这方面的错误文档来看,显然有些地方出了问题。

最新更新