在 yarn 上使用 spark streaming 的动态分配不会缩小执行器

Dynamic Allocation with spark streaming on yarn not scaling down executors

我在 yarn cluster 上使用 spark-streaming(spark 版本 2.2),并试图为我的应用程序启用动态核心分配。

executor的数量按需增加,但是一旦分配了executor,即使流量减少也不会缩减,即一旦分配的executor不会被释放。我还在 yarn 上启用了外部洗牌服务,如下所述: https://spark.apache.org/docs/latest/running-on-yarn.html#configuring-the-external-shuffle-service

我在 spark-submit 命令中设置的配置是:

            --conf spark.dynamicAllocation.enabled=false \
            --conf spark.streaming.dynamicAllocation.enabled=true \
            --conf spark.streaming.dynamicAllocation.scalingInterval=30 \
            --conf spark.shuffle.service.enabled=true \
            --conf spark.streaming.dynamicAllocation.initialExecutors=15 \
            --conf spark.streaming.dynamicAllocation.minExecutors=10 \
            --conf spark.streaming.dynamicAllocation.maxExecutors=30 \
            --conf spark.streaming.dynamicAllocation.executorIdleTimeout=60s \
            --conf spark.streaming.dynamicAllocation.cachedExecutorIdleTimeout=60s \

如果我缺少任何特定配置,有人可以提供帮助吗?

谢谢

作为此 JIRA 的一部分添加的文档帮助了我:https://issues.apache.org/jira/browse/SPARK-12133

需要注意的关键点是,当比率(批处理 time/batch 持续时间)小于 0.5(默认值)时,执行器的数量会减少,这实际上意味着执行器空闲了一半的时间。可用于更改此默认值的配置是 "spark.streaming.dynamicAllocation.scalingDownRatio"