Spark2.1.0——Executor动态分配的实现原理

本文深入探讨了Spark2.1.0中ExecutorAllocationManager的工作原理,它作为动态调整Executor的代理,根据工作负载计算Executor需求并与集群管理器交互。ExecutorAllocationManager启动涉及条件检查、创建与启动,并通过定时任务scheduleTask按需增减Executor。文中详细阐述了Executor数量的计算、过期Executor的移除等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         ExecutorAllocationManager的作用已在《Spark2.1.0——SparkContext概述》一文有过介绍,更为准确地说,ExecutorAllocationManager是基于工作负载动态分配和删除Executor的代理。简单讲,ExecutorAllocationManager与集群管理器之间的关系可以用图1来表示。

ExecutorAllocationManager与集群管理器之间的关系
图1       ExecutorAllocationManager与集群管理器之间的关系

 

ExecutorAllocationManager内部会定时根据工作负载计算所需的Executor数量,如果对Executor需求数量大于之前向集群管理器申请的Executor数量,那么向集群管理器申请添加Executor;如果对Executor需求数量小于之前向集群管理器申请的Executor数量,那么向集群管理器申请取消部分Executor。此外,ExecutorAllocationManager内部还会定时向集群管理器申请移除(杀死)过期的Executor。

         有了对ExecutorAllocationManager的了解,这里来看看SparkContext是如何创建和启动ExecutorAllocationManager的。创建ExecutorAllocationManager的代码如下:

    val dynamicAllocationEnabled = Utils.isDynamicAllocationEnabled(_conf)
    _executorAllocationManager =
      if (dynamicAllocationEnabled) {
        schedulerBackend match {
          case b: ExecutorAllocationClient =>
            Some(new ExecutorAllocationManager(
              schedulerB
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值