第三章 Spark运行模式及原理
第三章 Spark运行模式及原理
目录
- Spark运行模式概述
- Local模式
- Standalone模式
- Local cluster模式
- Mesos模式
- YARN standalone/YARN cluster模式
- YARN client模式
- 各种模式的实现细节比较
- Spark1.0版本之后的变化
- 小结
注:学习《Spark大数据处理技术》笔记
1. Spark运行模式概述
1. Spark运行模式列表
- Spark应用程序的运行模式取决于传递给SparkContext的MASTER环境变量的值,个别模式还需要依赖辅助的程序接口来配合使用,目前所支持的MASTER环境变量由特定的字符串或URL所组成
- Local[N]:本地模式,使用N个线程
- Local cluster[worker, core, Memory]:伪分布模式,可以配置所需要启动的模拟工作,以及每个工作节点管理的CPU数量和内存尺寸
- Spark://hostname:port: Standalone 模式,需要部署Spark到相关节点,URL为Spark Master主机地址和端口
- Mesos://hostname:port:Mesos模拟,需要部署Spark和Mesos到相关节点,URL为Mesos主机地址和端口
- YARN standalone/YARN cluster:YARN 模式一,主程序逻辑和任务都运行在YARN集群中
- YARN client:YARN 模式二,主程序运行在本地,具体任务运行在YARN集群中
2. Spark基本工作流程
- 多个运行模式从总体上来说,都基于一个相似的工作流程。从根本上都是将Spark的应用分为任务调度和任务执行两个部分
1. 分布式模式下,Spark的各个调度和执行模块大致架构图
2. 对于本地模式来说,其内部程序逻辑结构也是类似的,只是其中的部分模块有所简化,例如集群管理模块简化为进程内部的线程池 - 从图3-1可知,所有的Spark应用程序都离不开SparkContext和Executor两部分
1. Executor负责执行任务,运行Executor的机器称为Worker节点
2. SparkContext由用户程序启动,通过资源调度模块和Executor通信
3. SparkContext和Executor这两部分的核心代码实现在各个运行模式中都是公用的,在它们之上,根据运行部署模式的不同,包装了不同调度模块以及相关的适配代码 - 具体来说,以SparkContext为程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业调度和TaskScheduler任务调度两级调度模块
1. 其中作业调度模块是基于任务阶段的高层调度模块,它为每个Spark作业计算具有依赖关系的多个调度阶段(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以TaskSets(任务组)的形式提交给任务调度模块来具体执行。
2. 而任务调度模块则负责具体启动任务、监控和汇报任务运行情况 - 作业调度模块和具体的部署运行模式无关,在各种运行模式下逻辑相同。
- 不同的运行模式的区别主要体现在任务调度模块。不同的部署和运行模式,根据底层资源调度方式的不同,各自实现了自己特定的任务调度模块,用来将任务实际调度给对应的计算资源
3. 相关基本类
TaskScheduler/SchedulerBackend
- 为了抽象出一个公共的接口供DAGScheduler作业调度模块使用,所有的这些运行模式实现的任务调度模块都是基于这两个接口的(Trait):TaskScheduler(见程序3-1)及SchedulerBackend(见程序3-2)
- TaskScheduler的实现主要用于于DAGScheduler交互,负责任务的具体调度和运行,其核心接口是submitTasks和canceTasks
- SchedulerBackend的实现是与底层资源调度系统交互(如Mesos/Yarn),配合TaskScheduler实现具体任务执行所需的资源分配,核心接口是receiveOffers
- 这两者之间的实际交互过程取决于具体的调度模式,理论上这两者的实现是成对匹配工作的,之所以拆分成两部分,是有利于相似的调度模式共享代码功能模块
- TaskScheduler的实现主要用于于DAGScheduler交互,负责任务的具体调度和运行,其核心接口是submitTasks和canceTasks
- 为了抽象出一个公共的接口供DAGScheduler作业调度模块使用,所有的这些运行模式实现的任务调度模块都是基于这两个接口的(Trait):TaskScheduler(见程序3-1)及SchedulerBackend(见程序3-2)
TaskSchedulerImpl
- TaskSchedulerImpl实现了TaskScheduler接口,提供了大多数本地和分布式运行调度模式的任务调度接口
- 此外,它还实现了resourceOffers和statusUpdate这两个接口供Backend调用,用于提供调度资源和更新任务状态
- 另外,在提交任务和更新状态等阶段,TaskSchedulerImpl都会调用Backend的receiveOffers函数,用于发起一次任务资源调度请求
- TaskSchedulerImpl实现了TaskScheduler接口,提供了大多数本地和分布式运行调度模式的任务调度接口
Executor
- 实际任务的运行,最终都由Executor类来执行,Executor对每一个任务创建一个TaskRunner类,交给线程池运行
- 运行结果通过ExecutorBackend接口返回
- 实际任务的运行,最终都由Executor类来执行,Executor对每一个任务创建一个TaskRunner类,交给线程池运行
图3-2列出了各种运行模式下相关类的关系图
待续…
第三章 Spark运行模式及原理相关推荐
- 4-spark学习笔记-spark运行模式与原理
- Spark运行模式Local+Standalone+Yarn+mesos
Spark运行模式Local+Standalone+Yarn+mesos bin/spark-submit --help 注意: --master MASTER_URL spark://host:po ...
- 一篇文章读懂:Spark运行模式
Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...
- spark封神之路(2)-spark运行模式
本专栏系列视频教程 2 spark运行模式入门 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1 ...
- 详解Spark运行模式(local+standalone+yarn)
一.简述 Spark 有多种运行模式: 1.可以运行在一台机器上,称为 Local(本地)运行模式. 2.可以使用 Spark 自带的资源调度系统,称为 Standalone 模式. 3.可以使用 Y ...
- 《深入理解分布式事务》第三章 Spring 事务的实现原理
<深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...
- Image Signal Processing(ISP)-第三章-BCL, WB, Gamma的原理和软件实现
Hello!ISP系列文章终于更新了,距离上一篇文章发布已经过去半年多啦!哈哈,虽然这段时间没有写文,但是这个简单ISP的代码还是有更新的哦,有兴趣的朋友可以到Github查看.话不多说,我们接着讲I ...
- 《现代密码学》学习笔记——第三章 分组密码 [三]分组密码的运行模式
1.分组密码的运行模式 分组密码在加密时,明文的分组长度是固定的,而实际应用中待加密消息的数据量是不定的,数据格式多种多样. (1)为了能在各种应用场合使用DES,美国在FIPS PUS 74和8 ...
- Spark 运行架构与原理
一.spark工作流程 当一个spark应用被提交时,根据提交参数在相应的位置创建driver进程. Driver进程启动后,会初始化sparkContext对象,会找到集群master进程,对spa ...
最新文章
- python 基础 1.2--pycharm 的安装及使用
- Mybatis Plugin插件安装破解及使用
- 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇
- javaBean为什么要实现Serializable接口?
- 小白学数据分析-----Excel制作INFOGRAPHIC
- 实用ExtJS教程100例-002:MessageBox的三种用法
- Hive的相关面试问题
- Pytorch(一) --线性模型
- P4258-[WC2016]挑战NPC【带花树】
- [你必须知道的异步编程]——异步编程模型(APM)
- css中的单位换算_css大小单位px em rem的转换和详解
- Java并发编程(06):Lock机制下API用法详解
- 显示器色域检测软件_摄影师:手机看图的甲方爸爸值得我换专业摄影显示器吗?...
- 实现简易网易云音乐播放器
- TF之saved-model踩坑,多次保存模型必看
- 微软预览word_如何解决Microsoft Word中的打印问题
- Max 文件制作三维场景
- java递归获取所有的子级节点
- VS2015 密钥 专业版和企业版
- python 视频清晰度_在opencvpython中调整视频分辨率
热门文章
- 【Hadoop Summit Tokyo 2016】Spark上可扩展的深度学习
- Faster\Slower 快慢指针的应用
- 【Asp.Net】Asp.Net CommandName作用
- AJAX——基于请求加载数据
- linux-dns的安装
- HDU - 5692 Snacks(dfs序+线段树)
- Keras-数据增广
- 机器学习-聚类之K均值(K-means)算法原理及实战
- EOJ_1064_树的层号表示法
- 最简单的基于FFmpeg的编码器-纯净版(不包含libavformat)