请阐述在 Spark 中启用动态资源分配机制的具体步骤及其对集群资源使用效率的优化原理。
考察说明
考查对 Spark 动态资源分配机制的理解,包括其配置、工作原理以及对集群资源利用率的优化效果。
回答思路
- 【回答框架 1】动态资源分配是指 Spark 应用根据实际负载动态调整 Executor 的数量。启用该功能需设置 spark.dynamicAllocation.enabled 为 true,并且外部 shuffle 服务(spark.shuffle.service.enabled)也要开启。
- 【回答框架 2】当任务积压较多时,Spark 会通过 ExecutorAllocationManager 请求增加 Executor;当任务空闲时,会逐步回收 Executor。其中涉及最小和最大 Executor 数(spark.dynamicAllocation.minExecutors/maxExecutors)以及调度参数(如 initialExecutors)。
- 【回答框架 3】动态资源分配主要优化了集群的资源使用效率,避免应用长期占用空闲资源,提高整体吞吐量。但需要注意的是,资源请求和回收有延迟,可能不适合短任务或对实时性要求高的场景。
- 【回答框架 4】实现时需要确保集群已配置外部 shuffle 服务,否则会导致 Executor 移除时 shuffle 数据丢失。
- 【关键点 1】动态资源分配通过 ExecutorAllocationManager 管理 Executor 数量。
- 【关键点 2】核心配置包括 spark.dynamicAllocation.enabled、minExecutors、maxExecutors。
- 【关键点 3】需要开启外部 shuffle 服务以避免数据丢失。
- 【关键点 4】资源调整存在延迟,不适合严格的实时场景。
- 【易错点 1】未配置外部 shuffle 服务可能导致 Executor 被回收时 shuffle 数据丢失。
- 【易错点 2】动态调整 Executor 有延迟,可能导致任务高峰期资源不足。
- 【易错点 3】对于短小任务,开启动态分配可能因资源申请延迟而影响性能。