Spark:三种任务提交流程standalone、yarn-cluster、yarn-client
spark的runtime
参考:Spark:Yarn-cluster和Yarn-client区别与联系
浪尖分享资料
standalone
Spark可以通过部署与Yarn的架构类似的框架来提供自己的集群模式。
该集群模式的架构设计与HDFS和Yarn大相径庭,都是由一个主节点多个从节点组成。
在Spark 的Standalone模式中:
主:为master
从:为worker
任务提交流程:
- spark-submit 提交任务给 Master
- Master 收到任务请求后通过 LaunchDriver 向 Worker 请求启动 Driver
- Worker 收到请求后启动 Driver
- Driver 启动后向 Master 注册(用户App信息)
- Master 收到 App 信息后根据资源的情况向 Worker 发送 launchExecutor 启动 Excutor
- Worker 收到 Master 的请求后启动相应的 Excutor
- Excutor 启动后负责与 Driver 通信, 执行相关任务

Spark on Yarn
- Application Master
在YARN中,每个Application实例都有一个Application Master进程,它是Application启动的第一个容器。它负责和ResourceManager打交道,并请求资源。获取资源之后告诉NodeManager为其启动container。 - yarn-cluster和yarn-client模式的区别
yarn-cluster和yarn-client模式的区别其实就是Application Master(AM)进程的区别,yarn-cluster模式下,driver运行在AM中,它负责向YARN申请资源,并监督作业的运行状况。
当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,显然yarn-cluster模式不适合运行交互类型的作业。
而yarn-client模式下,ApplicationMaster仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离开。
- yarn-cluster
与standalone模式不同,yarn-cluster是基于yarn集群进行调度管理的,yarn集群上有ResourceManager(RM)和NodeManager(NM)两个角色。 - 作业提交流程
由client向RM提交请求,并上传jar到HDFS上
这期间包括四个步骤:
a). 连接到RM
b). 从 RM ASM(Applications Manager )中获得metric、queue和resource等信息。
c). 上传 app jar and spark-assembly jar
d). 设置运行环境和container上下文(launch-container.sh等脚本)- ASM 向 Scheduler 申请空闲 container
- Scheduler 向 ASM 返回空闲 container 信息(NM 等)
- RM(ASM)根据返回信息向 NM 申请资源。
- NM 分配创建一个container 并创建Spark Application Master(AM),此时 AM 上运行的是 Spark Driver。(每个SparkContext都有一个 AM)
- AM启动后,和RM(ASM)通讯,请求根据任务信息向RM(ASM)申请 container 来启动 executor
- RM(ASM)将申请到的资源信息返回给AM
- AM 根据返回的资源信息区请求对应的 NM 分配 container 来启动 executor
- NM 收到请求会启动相应的 container 并启动 executor
- executor 启动成后 反向向 AM 注册
- executor 和 AM 交互 完成任务
- 后续的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一样
等到所有的任务执行完毕后,AM 向 ASM 取消注册并释放资源

- yarn-client
在yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。
整体的过程与yarn-cluster类似。
不同点在于 Driver 是运行在本地客户端,它的 AM 只是作为一个 Executor 启动器,并没有 Driver 进程。
而且 Executor启动后是与 Client 端的 Driver 进行交互的,所以 Client 如果挂了 任务也就挂了。
在yarn-client、yarn-cluster 提交模式中,可以不启动Spark集群,应为相关的jvm环境有yarn管理(启动、结束等)。
standalone 提交模式中 Spark 集群一定要启动,因为需要依赖worker、Master进行任务的启动、调度等。
Spark:三种任务提交流程standalone、yarn-cluster、yarn-client的更多相关文章
- spark三种连接Join
本文主要介绍spark join相关操作. 讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前,我们用hiveSQL先跑出了结果以方便 ...
- Spark集群任务提交流程----2.1.0源码解析
Spark的应用程序是通过spark-submit提交到Spark集群上运行的,那么spark-submit到底提交了什么,集群是怎样调度运行的,下面一一详解. 0. spark-submit提交任务 ...
- Apache Spark支持三种分布式部署方式 standalone、spark on mesos和 spark on YARN区别
链接地址: http://dongxicheng.org/framework-on-yarn/apache-spark-comparing-three-deploying-ways/ Spark On ...
- spark 三种数据集的关系(一)
Catalyst Optimizer: Dataset 数据集仅可用Scala或Java.但是,我们提供了以下上下文来更好地理解Spark 2.0的方向数据集是在2015年作为Apache Spark ...
- spark 三种数据集的关系(二)
一个Dataset是一个分布式的数据集,而且它是一个新的接口,这个新的接口是在Spark1.6版本里面才被添加进来的,所以要注意DataFrame是先出来的,然后在1.6版本才出现的Dataset,提 ...
- Spark三种部署方式
- Spark学习笔记-三种属性配置详细说明【转】
相关资料:Spark属性配置 http://www.cnblogs.com/chengxin1982/p/4023111.html 本文出处:转载自过往记忆(http://www.iteblog.c ...
- spark 四种模式
Spark 三种运行模式 一:Spark On Local 此种模式下,我们只需要在安装Spark时不进行hadoop和Yarn的环境配置,只要将Spark包解压即可使用,运行时Spark目 ...
- Hadoop三种架构介绍及搭建
apache hadoop三种架构介绍(standAlone,伪分布,分布式环境介绍以及安装) hadoop 文档 http://hadoop.apache.org/docs/ 1.StandAlo ...
随机推荐
- 查看静态库(.lib)和动态库(.dll)的导出函数的信息 error LNK2001: 无法解析的外部符号 _Delete
转自VC错误:http://www.vcerror.com/?p=1381 在window下查看动态库的导出函数可以用vs自带的Dependenc工具: 查看静态库的信息要用命令行来实现: 首先运行V ...
- python作业/练习/实战:下载QQ群所有人的头像
步骤与提示:1.在腾讯群网页中进入任意一个群,获取相关信息,可以用postman是试一下,可以看到我们要的是mems里面的数据,需要获取到QQ号和群名片,如果没有群名片的话取昵称2.根据QQ号下载头像 ...
- vue-cesium中经纬度写反了,报错
vue-cesium中经纬度写反了,报错 [Vue warn]: Invalid prop: custom validator check failed for prop "position ...
- Haproxy+Percona-XtraDB-Cluster 集群
Haproxy介绍 Haproxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用 ...
- Leetcode代码复盘_分治法相关
分治法 1.二分搜索(算法时间复杂度O(log n)) 输出:如果x=A[j],则输出j,否则输出0. 1.binarysearch(1,n) 过程:binarysearch(low,high) 1. ...
- activiti7组任务测试
package com.zcc.activiti05; import org.activiti.engine.*;import org.activiti.engine.repository.Deplo ...
- docker内的应用访问宿主机上的mysql和Redis
背景:宿主机部署MySQL.Redis,docker内部署tomcat.jdk 需求:tomcat内的应用访问宿主机的MySQL和Redis 方法: 一.连接地址切记不能用localhost和 ...
- 一道面试题:js返回函数, 函数名后带多个括号的用法及join()的注意事项
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/13/js%E8%BF%94%E5%9B%9E%E5%87%BD%E6%95%B0%E ...
- Set 对象和WeakSet对象
Set对象是值的集合,你可以按照插入的顺序迭代它的元素. Set中的元素只会出现一次,即 Set 中的元素是唯一的,一种有效去重方式. , , , , ]); console.log(set1.has ...
- 硬RAID与软RAID的区别
什么是RAID? RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文即为独立磁盘冗余阵列,或简称磁盘阵列.简单的说,RAID是一种把多块独立的硬盘 ...
