我正在使用jupyterhub在kubernetes上单独使用spark进行概念验证。
我想要动态分配,因为我的用户会经常离开键盘,其应用程序(笔记本)处于“运行”状态(但没有任务/作业),但是司机正在等待工作。
动态分配似乎没有起作用。从它正在等待的文档:
spark.dynamicAllocation.executorIdleTimeout=60s
但是空闲的定义是什么?对我来说,这些笔记本似乎是空闲的
答案 0 :(得分:2)
原因很少,
如果您的用户正在设置执行程序的数量,则永远不会删除此执行程序数。您需要为最小执行者设置的内容应为:spark.dynamicAllocation.minExecutors
在我的情况下,我们将其设置为2,即使群集已满,数据科学家也可以使用最少数量的执行程序。
首先检查是否删除了选项'--num-executors'并更改为spark.dynamicAllocation.minExecutors
。
工作人员未被删除的其他原因是缓存数据,如果您的数据科学家有缓存数据,对于此问题,请检查选项spark.dynamicAllocation.cachedExecutorIdleTimeout
这对我的用例我们没有更改。出于这个原因,根据documentation说:
永远不会删除包含缓存数据的默认执行程序
更改spark.dynamicAllocation.cachedExecutorIdleTimeout
有关动态分配的详细信息,请参阅Spark Summit Europe 2016
中的此演示文稿