我正在 Spark (v2+) 中寻找一种可靠的方法来以编程方式调整会话中执行器的数量。
我了解动态分配以及在创建会话时配置 Spark 执行器的能力(例如使用--num-executors),但是由于我的 Spark 作业的性质,这些选项对我来说都不是很有用。
该作业对大量数据执行以下步骤:
我很感激我可以将此作业分成两个作业,分别使用不同的 Spark 资源配置文件执行,但我真正想要的是在 Spark 脚本中的特定点(在 Elasticsearch 加载开始之前)以编程方式将执行器的数量设置为 X )。这似乎是一件普遍可以做的有用的事情。
我尝试了一些更改设置,发现了一些可行的方法,但感觉像是一种老套的方式来做一些应该可以以更标准化和受支持的方式完成的事情。
我的尝试(这只是我的尝试):
def getExecutors = spark.sparkContext.getExecutorStorageStatus.toSeq.map(_.blockManagerId).collect {
case bm if !bm.isDriver => bm
}
def reduceExecutors(totalNumber: Int): Unit = {
//TODO throw error if totalNumber is more than current
logger.info(s"""Attempting to reduce number of executors to …Run Code Online (Sandbox Code Playgroud)