1、调度策略

参数默认值说明
spark.scheduler.modeFIFO调度策略(FIFO/FAIR)
spark.locality.wait3s本地性降级等待时间
spark.locality.wait.processspark.locality.waitPROCESS_LOCAL 等待时间
spark.locality.wait.nodespark.locality.waitNODE_LOCAL 等待时间
spark.locality.wait.rackspark.locality.waitRACK_LOCAL 等待时间

调度策略:FIFO 按提交顺序处理;FAIR 支持权重分配。

本地化策略: 从 PROCESS_LOCAL 到 ANY 逐级降级,减少数据传输开销

val PROCESS_LOCAL, NODE_LOCAL, NO_PREF, RACK_LOCAL, ANY = Value性能最优-> 最差
PROCESS_LOCAL -> NODE_LOCAL -> NO_PREF -> RACK_LOCAL -> ANY1、PROCESS_LOCAL
任务所需的数据就在同一个 Executor 进程的内存中2、NODE_LOCAL
任务所需的数据在同一个物理节点上,但不在同一个 Executor 进程的内存中。3、NO_PREF
没有位置偏好,数据来源本身是均匀分布或位置无关。4、RACK_LOCAL
不在同一个节点上,但在同一个机架5、ANY
在集群的其他机架

2、核心组件

1、Schedulable

可调度实体的接口定义

1、Pool

调度树中的节点,可以是根节点或中间节点

  • 调度模式(FIFO或FAIR)
  • 权重(weight)
  • 最小资源份额(minShare)
  • 运行任务数(runningTasks)
  • 子节点列表(schedulableQueue)

2、TaskSetManager

管理一个TaskSet(一组任务),负责任务调度、本地性处理、失败重试和推测执行

  • 跟踪任务状态(待运行、运行中、已完成)
  • 根据数据本地性选择任务
  • 处理任务失败和重试逻辑
  • 实现推测执行机制

2、TaskScheduler

Spark任务调度的核心实现,协调资源分配和任务调度

  • 接收DAGScheduler提交的TaskSet
  • 管理Executor资源状态
  • 分配任务到可用Executor
  • 处理任务状态更新
  • 实现调度延迟和推测执行策略

3、SchedulableBuilder

调度树构建的抽象基类

1、FIFOSchedulableBuilder

实现先进先出调度策略的构建器

2、FairSchedulableBuilder

实现公平调度策略的构建器

3、核心设计

1、调度树

在这里插入图片描述

  • Spark Standalone支持树形结构的调度池,每个池可以独立配置调度模式(FIFO/FAIR)
特性FIFO调度公平调度
结构单层Pool结构多层Pool树结构
排序方式按提交顺序基于权重/minShare
资源分配独占式按比例共享
适用场景批处理作业多用户/多作业环境
配置方式无需配置XML配置文件定义Pool
  • 作业通过sc.setLocalProperty("spark.scheduler.pool", "poolName")分配到指定的调度池
  • 配置调度池配置文件
<!-- conf/fairscheduler.xml -->
<?xml version="1.0"?>
<allocations><pool name="production"><schedulingMode>FAIR</schedulingMode><weight>1</weight><minShare>2</minShare></pool><pool name="test"><schedulingMode>FIFO</schedulingMode><weight>2</weight><minShare>3</minShare></pool>
</allocations>

1、FIFO

    // 优先级val priority1 = s1.priorityval priority2 = s2.priorityvar res = math.signum(priority1 - priority2)if (res == 0) {val stageId1 = s1.stageIdval stageId2 = s2.stageId// 先进先出res = math.signum(stageId1 - stageId2)}res < 0

2、FAIR

override def comparator(s1: Schedulable, s2: Schedulable): Boolean = {val minShare1 = s1.minShareval minShare2 = s2.minShareval runningTasks1 = s1.runningTasksval runningTasks2 = s2.runningTasks// 1. 满足minShare优先级val s1Needy = runningTasks1 < minShare1val s2Needy = runningTasks2 < minShare2// 2. 比较资源使用比例val minShareRatio1 = runningTasks1.toDouble / math.max(minShare1, 1.0)val minShareRatio2 = runningTasks2.toDouble / math.max(minShare2, 1.0)// 3. 权重比较val taskToWeightRatio1 = runningTasks1.toDouble / s1.weight.toDoubleval taskToWeightRatio2 = runningTasks2.toDouble / s2.weight.toDoublevar compare = 0if (s1Needy && !s2Needy) {return true} else if (!s1Needy && s2Needy) {return false} else if (s1Needy && s2Needy) {compare = minShareRatio1.compareTo(minShareRatio2)} else {compare = taskToWeightRatio1.compareTo(taskToWeightRatio2)}if (compare < 0) {true} else if (compare > 0) {false} else {s1.name < s2.name}}

2、资源分配与任务调度

  • Executor注册
executorAdded(o.executorId, o.host)
  • Pool排序调度队列
val sortedTaskSets = rootPool.getSortedTaskSetQueue
  • TaskSetManager资源分配请求
val (noDelayScheduleReject, minLocality) = resourceOfferSingleTaskSet(taskSet, currentMaxLocality, shuffledOffers, availableCpus,availableResources, tasks)val (taskDescOption, didReject, index) =taskSet.resourceOffer(execId, host, maxLocality, taskCpus, taskResAssignments)
  • TaskSetManager本地性匹配
var allowedLocality = maxLocalityif (maxLocality != TaskLocality.NO_PREF) {allowedLocality = getAllowedLocalityLevel(curTime)if (allowedLocality > maxLocality) {// We're not allowed to search for farther-away tasksallowedLocality = maxLocality}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93841.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93841.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93841.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Orbbec---setBoolProperty 快捷配置设备行为

在奥比中光&#xff08;Orbbec&#xff09;SDK&#xff08;通常称为ob库&#xff09;中&#xff0c;setBoolProperty函数是用于设置设备或传感器的布尔类型属性的核心接口。它主要用于开启/关闭设备的某些功能或模式&#xff0c;是配置设备行为的重要方法。 函数原型与参数解析…

[OWASP]智能体应用安全保障指南

1.关键组件定义 KC1 生成式语言模型&#xff08;Generative Language Models&#xff09; KC1.1 大语言模型&#xff08;LLMs&#xff09;&#xff1a;作为代理的“大脑”&#xff0c;基于预训练基础模型&#xff08;如 GPT 系列、Claude、Llama、Gemini&#xff09;&#xff…

【Vivado TCL 教程】从零开始掌握 Xilinx Vivado TCL 脚本编程(三)

【Vivado TCL 教程】从零开始掌握 Xilinx Vivado TCL 脚本编程&#xff08;三&#xff09; 系列文章目录 1、VMware Workstation Pro安装指南&#xff1a;详细步骤与配置选项说明 2、VMware 下 Ubuntu 操作系统下载与安装指南 3、基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下…

AI与大数据驱动下的食堂采购系统源码:供应链管理平台的未来发展

在数字化浪潮不断加速的今天&#xff0c;很多企业和机构都在追求一个目标&#xff1a;如何把“效率”与“成本”做到最佳平衡。对于学校、企事业单位的食堂来说&#xff0c;采购环节就是重中之重。往小了说&#xff0c;它关系到食堂员工的工作体验&#xff1b;往大了说&#xf…

HarmonyOS 实战:学会在鸿蒙中使用第三方 JavaScript 库(附完整 Demo)

摘要 在鸿蒙&#xff08;HarmonyOS NEXT / ArkTS&#xff09;开发中&#xff0c;我们大部分业务逻辑和 UI 都是用 ArkTS 写的。不过在做一些数据处理、网络请求、工具函数或者复杂算法时&#xff0c;完全没必要“重复造轮子”。这时候就可以直接引入 JavaScript 的第三方库。鸿…

C++实现教务管理系统,文件操作账户密码登录(附源码)

教务管理系统项目介绍 项目概述 这是一个基于C开发的教务管理系统&#xff0c;提供了学生、教师和系统管理员三种角色的功能模块&#xff0c;实现了教务信息的录入、查询、修改和删除等基本操作。系统采用文件存储方式保存数据&#xff0c;具有简单易用、功能完备的特点。 项…

《C++进阶之STL》【二叉搜索树】

【二叉搜索树】目录前言&#xff1a;------------概念介绍------------1. 什么是二叉搜索树?2. 二叉搜索树的性能怎么样&#xff1f;------------基本操作------------一、查找操作思想步骤简述二、插入操作目标步骤简述三、删除操作目标步骤简述------------代码实现--------…

Orange的运维学习日记--47.Ansible进阶之异步处理

Orange的运维学习日记–47.Ansible进阶之异步处理 文章目录Orange的运维学习日记--47.Ansible进阶之异步处理Playbook 执行顺序原理可选执行策略调整并发连接数&#xff1a;forks 参数查看与修改 forks性能调优建议分批执行全局任务&#xff1a;serial 关键字serial 用法示例应…

从一个ctf题中学到的多种php disable_functions bypass 姿势

题目介绍 题目是Lilctf2025 的php-jail-is-my-cry 比赛链接&#xff1a;https://lilctf.xinshi.fun/ 题目环境前半部分是 php最近的phar 新 trick 大佬的原理分析 https://fushuling.com/index.php/2025/07/30/%e5%bd%93include%e9%82%82%e9%80%85phar-deadsecctf2025-baby-we…

从繁琐到优雅:Java Lambda 表达式全解析与实战指南

在 Java 8 之前&#xff0c;我们习惯了用匿名内部类处理回调、排序等场景&#xff0c;代码中充斥着大量模板化的冗余代码。直到 Java 8 引入 Lambda 表达式&#xff0c;这一局面才得以彻底改变。作为一名深耕 Java 多年的技术专家&#xff0c;我见证了 Lambda 表达式如何从一个…

《当 AI 学会 “思考”:大语言模型的逻辑能力进化与隐忧》

引言&#xff1a;AI “思考” 的时代信号​大语言模型展现逻辑能力的典型场景&#xff1a;如复杂问题推理、多步骤任务规划的实例&#xff08;如 AI 辅助撰写科研思路、进行案件逻辑梳理等&#xff09;​提出核心议题&#xff1a;大语言模型逻辑能力的进化究竟达到了怎样的程度…

企业知识管理革命:RAG系统在大型组织中的落地实践

企业知识管理革命&#xff1a;RAG系统在大型组织中的落地实践 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是我…

MySQL事务篇-事务概念、并发事务问题、隔离级别

事务事务是一组不可分割的操作集合&#xff0c;这些操作要么同时成功提交&#xff0c;要么同时失败回滚。acid事物的四大特性原子性最小工作单元&#xff0c;要么同时成功&#xff0c;要么同时失败。例如A转账300给B,A账户-300与B账户300必须满足操作原子性&#xff0c;避免出现…

C++高频知识点(二十三)

文章目录111. 谈谈atomic1. 什么是原子操作&#xff1f;2. std::atomic 的基本使用示例&#xff1a;基本使用3. 原子操作方法4. 内存模型与顺序一致性112. 引用成员变量是否占空间?1. 引用成员变量的定义2. 内存占用情况1. 成员变量的实际占用2. 类的总大小代码分析113. C中深…

云存储的高效安全助手:阿里云国际站 OSS

在这个数据爆炸的时代&#xff0c;数据存储和管理成为了众多企业和个人面临的一大挑战。想象一下&#xff0c;你是一位视频博主&#xff0c;随着粉丝量的增长&#xff0c;视频素材越来越多&#xff0c;电脑硬盘根本装不下&#xff0c;每次找素材都要花费大量时间。又或者你是一…

【线性基】P4301 [CQOI2013] 新Nim游戏|省选-

本文涉及知识点 C贪心 位运算、状态压缩、枚举子集汇总 线性基 P4301 [CQOI2013] 新Nim游戏 题目描述 传统的 Nim 游戏是这样的&#xff1a;有一些火柴堆&#xff0c;每堆都有若干根火柴&#xff08;不同堆的火柴数量可以不同&#xff09;。两个游戏者轮流操作&#xff0c;…

[25-cv-09610]Anderson Design Group 版权维权再出击,12 张涉案图片及近 50 个注册版权需重点排查!

Anderson 版权图案件号&#xff1a;25-cv-09610立案时间&#xff1a;2025年8月13日原告&#xff1a;Anderson Design Group, Inc.代理律所&#xff1a;Keith原告介绍原告是美国的创意设计公司&#xff0c;成立于1993年&#xff0c;简称ADG&#xff0c;一家家族企业&#xff0c;…

Mac下载AOSP源代码

一、前期准备 硬件要求 至少 200GB 可用空间(源码约 100GB,编译产物需额外空间),推荐 SSD。 内存 16GB+,避免同步 / 编译时卡顿。 系统要求 macOS 10.14+(推荐最新版本,兼容性更好) 二、环境配置 AOSP 源码包含大小写不同的文件(如 File.java 和 file.java),而 …

Linux之网络

Linux之网络两个模型应用层协议HTTPS传输层协议UDPTCP可靠性与效率的兼顾面向字节流TCP异常情况底层实现网络层协议IP网段划分子网划分NAT数据链路层协议以太网ARP代理服务器内网穿透五种IO多路复用Reactor模式本文旨在讲解tcp-ip协议原理&#xff0c;并不涉及代码部分&#xf…

MCP(模型上下文协议):是否是 AI 基础设施中缺失的标准?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…