文章目录

  • 任务调度+资源调度大体流程
  • 问题思考
    • Excutor的默认机制
    • 轮训启动
      • 为什么要用轮训启动这种设计模式?
      • 轮训方式启动Executor的公式
    • Works集合为什么要使用Hashset?
    • Driver进程是怎么启动起来的?
    • 挣扎的(掉队的)任务
      • 推测执行机制
      • 推测执行机制的判断标准
    • 配置信息的使用
    • 重试机制
  • 粗细粒度调度
    • 粗粒度的资源调度
    • 细粒度的资源调度
  • Spark在yarn集群上的两种提交方式

任务调度+资源调度大体流程

1,Worker启动成功向master注册
2,提交App spark-submit --master --class jarPath
3,当TaskSchedule对象创建完成后,会向Master为Application申请资源
4,当waitingApps集合中的元素发生改变,会调用schedule()方法。
5,当Excutor启动成功后,会向TaskSchedule反向注册,此时的TaskSchedule就会有一批Excutor的列表信息。
6,根据RDD的宽窄依赖,切割job,划分Stage,每一个task是pipline的计算模式。
7,TaskSchedule会根据数据的位置分发Task。
8,分发task,并且监控task的执行情况。
9,若task失败或者挣扎,会重试鉴定挣扎的Task。
10,重试Stage,只会重试失败的Task。

问题思考

Excutor的默认机制

  1. 默认情况下,每一个worker为当前的Application只会启动一个Excutor(它默认使用当前Worker所管理的所有的核,1G运行内存)
  2. 如果想要在一个worker上启动多个Excutor进程,再提交Application的时候,要指定Excutor使用的核数;
spark-submit --excutor -cores
  1. 默认情况下,Excutor的启动,是轮训方式启动的,轮训的方式在一定程度上有利于数据的本地化。

轮训启动

启动Excutor的时候根本没有考虑数据的位置,但是启动方式有利于数据本地化(轮训启动,在每一个worker节点上都会启动一个Excutor)

为什么要用轮训启动这种设计模式?

  1. 多个job:
    若是多个job都运行在一台节点上,此时计算的数据可能不在这个节点上,或者只有一部分在这个节点上,那么就要从别的节点上拉取数据,那么就要走网络传输,这就导致数据找计算,不是我们想要的。若是多个job都运行在一台节点上,此时计算的数据可能不在这个节点上,或者只有一部分在这个节点上,那么就要从别的节点上拉取数据,那么就要走网络传输,这就导致数据找计算,不是我们想要的。
  2. task的执行效率以及时间
    若是多个task都运行在一台节点上,那么会采用阻塞执行的方式,这样只有等这个任务执行完才能行执行别的task,不能并行处理,效率也就大大降低,时间也随之加长。

轮训方式启动Executor的公式

–executor-cores:每个executor需要的核;ec
–executor-memory:每个executor需要内存;em
–total-executor-cores:这个Application一共需要多少个核;tec
worker num:Worker节点个数;wn
worker memory:Worker节点的内存;wm
worker core:Worker节点的核;wc

min(min(wm/em,wc/ec)*wn,tec/ec)

Works集合为什么要使用Hashset?

Driver进程是怎么启动起来的?

Driver进程的启动是通过执行我们用户写的Application程序启动的,通过源码分析,我们知道,是在创建上下文对象SparkCntext的时候启动的。源码分析请参考上篇博客
资源调度(学习笔记)。

挣扎的(掉队的)任务

比如1000个task中,有9999个任务执行完成,只有一个task正在执行,那么这个任务就叫挣扎的任务。
TaskSchedule遇到挣扎的任务也会重试,此时TaskSchedule会重新提交一个和挣扎的Task一模一样的Task到集群中运行,但挣扎的Task不会被kill掉,会让他们在集群中比赛执行,谁先执行完毕,就以谁的结果为准。

推测执行机制

用来判断哪些task是挣扎的。

推测执行机制的判断标准

当所有的task 75%以上都执行完毕,那么TaskSchedule才会每隔100ms计算一下哪些task需要推测执行。
例如:100个task中有76个task已经执行完毕,24个task没有执行完毕,此时它会计算出这24个task已经执行时间的中位数,然后将中位数*1.5得到最终的时间,拿到这个最终计算出来的时间,去查看哪一些task超时,此时这些task就是挣扎的task。

配置信息的使用

  1. 在代码中SparkConf中修改。
  2. 在提交Application的时候通过–conf来配置,如果要修改多个配置信息的值,那么需要多加一个–conf (常用)。
    比如说stage、spark的重试次数都要修改,此时需要加上两个–conf,分别来配置。
(spark-submit --master --conf k=v)
  1. 在spark的配置文件中配置,修改spark-default.conf文件

重试机制

  1. Taskschedule会实时跟踪每一个Task的执行情况,若是执行失败,Taskschedule会重试提交task,但是不会无休止的重试,默认是重试3次,若果重试3次依旧失败,那么这个task所在的stage就失败了,此时会向DAGSchedule汇报,任务执行失败。
  2. DAGSchedule会重试提交stage,如果DAGSchedule重试了4次,依然失败,那么stage所在的job就失败了,job失败是不会重试的。

注意:每一次重试提交stage,已经成功执行的不会被再次分发到Excutor进程执行,只是提交重试失败的stage。

粗细粒度调度

粗粒度的资源调度

典型代表:Spark

描述:在任务执行前,会先将资源申请完毕,当所有的task执行完毕,才会释放这部分资源。

优点:每一个task执行之前,不需要自己去申请资源了,直接使用已经申请好的资源就行了,task启动的时间变快,task执行的时间缩短了,stage job application操作时间也短了。

缺点:需要所有的task都执行完毕才会使用资源 假设10000个task ,9999task执行完毕了,不会释放直到最后一个task执行完毕,才会释放资源,集群的资源就无法充分的利用了。

细粒度的资源调度

典型代表:MapReduce

描述:在任务提交的时候,每一个task自己去申请资源,申请到了才会执行,执行完立马释放资源。

优点:每一个task执行完毕后立马释放资源,下一个task执行前自己再去申请资源,这样有利于资源的充分利用。

缺点:由于需要每一个task自己去申请资源,导致task启动时间变长了,stage job application也相对变长了。

Spark在yarn集群上的两种提交方式

请参考下篇博客

任务调度+资源调度整合(学习笔记)相关推荐

  1. SpringBoot3基础框架整合学习笔记_写在前面的话(1)

    文章目录 第一章:写在前面的话 1.我的职业感想 2.我的扯蛋初衷 3.笔记计划 4.适合哪些同学看 第一章:写在前面的话 1.我的职业感想 这几天一直在思考,四五十岁了,我还能干什么?没有学历,没有 ...

  2. SpringBoot任务调度案例(学习笔记)

    声明:本案例学习http://blog.csdn.net/je_ge,在此感谢je_ge提供的学习用的资料 1.项目目录结构 2.pom.xml的文件内容 <project xmlns=&quo ...

  3. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]

    示例数据库test,用户信息表 MyEclipse连接 MySql Database . MyEclipse创建Web工程 ,并加入Hibernate支持 [项目右键->MyEclipse-&g ...

  4. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  5. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  6. ​​​​​​​Git学习笔记与IntelliJ IDEA整合

    2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...

  7. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  8. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...

    在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint ...

  9. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

最新文章

  1. Codeforces 895C - Square Subsets
  2. 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...
  3. 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
  4. 可能是性价比最高的,0-180度乐高舵机解决方案
  5. jQuery 处理xml
  6. python少儿编程课件ppt_Python课程第五期
  7. IntelliJ Idea 2017 免费激活方法
  8. 【Java】计算1+1/2+1/3+1/4....前20项
  9. 男生眼中“理想女友”工作排名,程序员排名第三,幼师倒数第一
  10. Adobe Photoshop/Adobe Dreamwear/您此时无法使用此产品。您必须问题解决办法FLEXnet Licensing Service服务
  11. 2019年春第八周作业
  12. Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
  13. 信道估计之LMMSE估计
  14. 开源KVM管理工具和平台
  15. 编程需要数学知识吗_编程需要了解数学吗?
  16. js bind 传参、_Node.js 在微医的应用场景及实践
  17. 如何用C语言画立体几何图形,立体几何图形公式大全
  18. 数据库查询练习(一)
  19. pla3d打印材料密度_3D打印材料:PLA (聚乳酸)材料
  20. 与语音信号处理有关的java书籍_MATLAB在语音信号分析与合成中的应用 中文pdf扫描版[198MB]...

热门文章

  1. UVa 10813 - Traditional BINGO
  2. 微信小程序全栈开发实践 第三章 微信小程序开发常用的API介绍及使用 -- 3.9 网络接口简介(九)扩展wxp模块的request3方法,实现用户登录的自动融合
  3. BUUCTF MD5
  4. iOS基础 UIWindow
  5. 中铁成本2.0系统服务器地址,中国中铁项目成本管理信息系统V2.0(电化版)操作手册.docx...
  6. python实现高校教务管理系统_Python实现新版正方教务系统爬虫
  7. 关于 网易云音乐 我喜欢的音乐 排序无法改为添加时间 排序无法还原 的问题
  8. 面试官系列- 你真的了解 http 吗
  9. 第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案
  10. css 让图标上下跳,使用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果