Spark任务调度初识
前置知识
spark任务模型
- job:action的调用,触发了DAG的提交和整个job的执行。
- stage:stage是由是否shuffle来划分,如果发生shuffle,则分为2个stage。
- taskSet:每一个stage对应1个taskset.1个taskset有多个task, 由RDD的partition数据决定,并行度就是各自RDD的partition数目。
- task:同一个stage中同一个partition中的数据与处理过程,视为1个task. task从横向上看,与partition数量一致;从纵向上看,task包含1个stage中的处理过程,如下面中的mapstage中的flatmap、map、reduceBykey.
spark资源模型
Executor是真正执行任务的进程,本身拥有若干cpu和内存,可以执行以线程为单位的计算任务,它是资源管理系统能够给予的最小单位。
yarn资源
YARN的基本组成结构,YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。
ResourceManager是Master上一个独立运行的进程,负责集群统一的资源管理、调度、分配等等;
NodeManager是Slave上一个独立运行的进程,负责上报节点的状态;
App Master和Container是运行在Slave上的组件,Container是yarn中分配资源的一个单位,包涵内存、CPU等等资源,yarn以Container为单位分配资源。
spark executor与yarn container的关系
Running Spark Applications on YARN
When running Spark on YARN, each Spark executor runs as a YARN container. 在spark on yarn模式,每个executor运行在1个yarn container上。
- Cluster Deployment Mode
两层模型
spark的任务模型与资源模型是如何匹配?
如上图所示:关键在于TaskScheduler与SchedulerBackend,由它们来适配task与executor。
spark的任务模型将提交的job分解成最小的任务单位task, 由TaskScheduler根据调度策略和task的资源申请情况来调用具体的SchedulerBackend(如yarn)。
SchedulerBackend的最小资源管理单位是executor。看workers中executros的资源“够不够”,“符不符合”task,ok的话task就被正式launch起来。注意,这里资源"够不够"是很好判断的,在TaskScheduler里设置了每个task启动需要的cpu个数,默认是1,所以只需要做核数的大小判断和减1操作就可以遍历分配下去。而"符不符合"这件事情,取决于每个tasks的locality设置。
task的locality有五种,按优先级高低排:PROCESS_LOCAL,NODE_LOCAL,NO_PREF,RACK_LOCAL,ANY。也就是最好在同个进程里,次好是同个node(即机器)上,再次是同机架,或任意都行。task有自己的locality,如果本次资源里没有想要的locality资源,怎么办呢?spark有一个spark.locality.wait参数,默认是3000ms。对于process,node,rack,默认都使用这个时间作为locality资源的等待时间。所以一旦task需要locality,就可能会触发delay scheduling。
SchedulerBackend是管“粮食”的,同时它在启动后会定期地去“询问”TaskScheduler有没有任务要运行,也就是说,它会定期地“问”TaskScheduler“我有这么余量,你要不要啊”,TaskScheduler在SchedulerBackend“问”它的时候,会从调度队列中按照指定的调度策略选择TaskSetManager去调度运行。
调度策略
- FIFO(默认): 谁先提交谁先执行,后面的任务需要等待前面的任务执行。
- FAIR: 支持在调度池中为任务进行分组,不同的调度池权重不同,任务可以按照权重来决定执行顺序。
参考文献
Spark任务调度初识的更多相关文章
- Spark任务调度流程及调度策略分析
Spark任务调度 TaskScheduler调度入口: (1) CoarseGrainedSchedulerBackend 在启动时会创建DriverEndPoint. 而DriverE ...
- Spark任务调度
不多说,直接上干货! Spark任务调度 DAGScheduler 构建Stage—碰到shuffle就split 记录哪个RDD 或者Stage 输出被物化 重新提交shuffle 输出丢失的sta ...
- 【Spark】Spark任务调度相关知识
文章目录 准备知识 DAG 概述 shuffle 概述 SortShuffleManager 普通机制 bypass机制 Spark任务调度 流程 准备知识 要弄清楚Spark的任务调度流程,就必须要 ...
- 【Spark工作原理】Spark任务调度理解
Spark内部有若干术语(Executor.Job.Stage.Task.Driver.DAG等),需要理解并搞清其内部关系,因为这是性能调优的基石. 节点类型有: 1. Master 节点: 常 ...
- spark任务调度和资源分配
Spark调度模式 FIFO和FAIR Spark中的调度模式主要有两种:FIFO和FAIR. 默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待 ...
- spark udf 初识初用
直接上代码,详见注释 import org.apache.spark.sql.hive.HiveContext import org.apache.spark.{SparkContext, Spark ...
- spark任务调度模式,动态资源分配
官网链接: http://spark.apache.org/docs/latest/job-scheduling.html 主要介绍: 1 application级调度方式 2 单个applicati ...
- spark中资源调度任务调度
在spark的资源调度中 1.集群启动worker向master汇报资源情况 2.Client向集群提交app,向master注册一个driver(需要多少core.memery),启动一个drive ...
- Spark 性能相关参数配置详解-任务调度篇
随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化. 由于篇 ...
随机推荐
- codevs 1048/洛谷 1880:石子归并
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...
- solr的使用
一,下载,安装 https://lucene.apache.org/solr/ 二, mac下使用 下载二进制包后,解压 step 1 进入solr目录: cd solr-8.2.0 step 2 进 ...
- Connect4 Game
How this game is playe can be found at here. public class Connect4 { ][]; public Connect4(char[][] b ...
- AtCoder AISing Programming Contest 2019 Task D. Nearest Card Game
题目分析在代码注释里. int main() { #if defined LOCAL && !defined DUIPAI ifstream in("main.in" ...
- spring配置文件和spring mvc配置文件的区别
Question: Are applicationContext.xml and spring-servlet.xml related anyhow in Spring Framework? Will ...
- StorageClass-动态PVC
StorageClass 之前我们部署了PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上 ...
- RSA加密,以及证书加密
简单的加密:https://blog.csdn.net/qq_32523587/article/details/79092364 生成证书:https://blog.csdn.net/u0121916 ...
- 阿里云Centos7 配置二级域名
之前在自己的服务器上安装了laravel,现在给它个二级域名!结果发现了个小坑= =.不说了,上步骤 首先你要有个自己的域名,可以在万网上买一个,我的还是蛮便宜的... 进入你的阿里云管理台 选择云解 ...
- hdu 6077多校签到
#include <iostream> #include <cstdio> using namespace std; ][]; int f(int pos) { ; ;i< ...
- 张小龙用这8句话表达了NB产品的一切(转)
1.一个好的产品应该是用完即走 真正好的产品,应该是让用户提高效率而不是消磨时光.但现在大部分用户使用微信的时间让我们很担忧. 包括我们自己的同事,在开会的时候,有同事隔两分钟就看一下手机,我觉得他们 ...