首页 > 解决方案 > 如何在 Spark 中强制每个执行程序只处理一个任务?

问题描述

我正在使用 Spark 来处理我的数据。我的 Spark 工作是仅 Map操作,我正在使用一些外部库来处理我的数据。这个外部库有一个内存泄漏错误。当执行程序启动时,它成功处理了几个文件/分区,但由于这个内存错误,它开始失败。

我非常依赖这个外部库,内存泄漏错误不会很快得到修复。所以,我正在寻找替代选项来运行我的 spark 工作(以低性能为代价)

正如我之前提到的,每个执行程序都可以轻松处理几个文件/分区,我认为,如果我可以将我的 Spark 应用程序配置为每个任务使用一个执行程序,即在处理分配的任务后终止执行程序并为下一个任务创建新的执行程序,我也许可以胜任我的工作。

我想知道,是否有办法配置 Spark 为每个可用任务创建新的执行程序?

我已经尝试过使用spark.dynamicAllocation.executorIdleTimeout=0,但这不会为每个任务创建新的执行程序。

标签: scalaapache-sparkapache-spark-sql

解决方案


确保你设置spark.executor.cores=1,像这样每个执行器 jvm 将只有 1 个任务(一次)。但是,每个执行程序将有几个任务按顺序运行


推荐阅读