Spark基本工作流程及YARN cluster模式原理(读书笔记)
Spark基本工作流程及YARN cluster模式原理
转载请注明出处:http://www.cnblogs.com/BYRans/
Spark基本工作流程
相关术语解释
Spark应用程序相关的几个术语:
- Worker:集群中任何可以运行Application代码的节点,类似于YARN中的NodeManager节点。在Spark on Yarn模式中指的就是NodeManager节点;
- Executor:Application运行在Worker 节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor。
- SparkContext:由用户程序启动,通过资源调度模块与Executor通信。
- Driver:运行Application的main()函数,并创建SparkContext。其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。通常用SparkContext代表Drive;
基本运行流程
Spark应用程序有多种运行模式。SparkContext和Executor这两部分的核心代码实现在各种运行模式中都是公用的,在这两部分之上,根据运行部署模式(例如:Local[N]、Yarn cluster等)的不同,有不同的调度模块以及对应的适配代码。
具体来说,以SparkContext为程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业和TaskScheduler任务调度两级调度模块。
其中作业调度模块是基于任务阶段的高层调度模块,它为每个Spark作业计算具有依赖关系的多个调度阶段(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以TaskSets(任务组)的形式提交给任务调度模块来具体执行。而任务调度模块则负责具体启动任务、监控和汇报任务运行情况。
详细的运行流程为:
- 构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;
- 资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;
- SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
- Task在Executor上运行,运行完毕释放所有资源。
作业调度模块和具体的部署运行模式无关,在各种运行模式下逻辑相同。不同运行模式的区别主要体现在任务调度模块。不同的部署和运行模式,根据底层资源调度方式的不同,各自实现了自己特定的任务调度模块,用来将任务实际调度给对应的计算资源。接下来重点介绍下YARN cluster模式的实现原理和实现细节。
YARN cluster运行模式的内部实现原理
Spark有多种运行模式,在这里主要介绍下YARN cluster模式的内部实现原理。如下图是YARN cluster模式的原理框图,相对于其他模式,该模式比较特殊的是它需要由外部程序辅助启动APP。用户的应用程序通过辅助的YARN Client类启动。YARN cluster模式和YARN client模式的区别在于:YARN client模式的AM是运行在提交任务的节点,而YARN cluster模式的AM是由YARN在集群中选取一个节点运行,不一定是在提交任务的节点运行。例如spark-shell如果需要使用YARN模式运行,只能为yarn-client
模式,启动命令可以使用spark-shell --master yarn-client
。
Client类通过YARN Client API提交请求,在Hadoop集群上启动一个Spark ApplicationMaster,Spark ApplicationMaster首先注册自己为一个YARN ApplicationMaster,之后启动用户程序,SparkContext在用户程序中初始化时,使用CoarseGrainedSchedulerBackend配合YARNClusterScheduler,YARNClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等。
根据Client类传递的参数,Spark ApplicationMaster通过YARN ResourceManager/NodeManager的接口在集群中启动若干个Container,用于运行CoarseGrainedExecutorBackend.CoarseGrainedExecutorBackend在启动过程中会向CoarseGrainedSchedulerBackend注册。
CoarseGrainedSchedulerBackend是一个基于Akka Actor实现的粗粒度的资源调度类,在整个Spark作业运行期间,CoarseGrainedSchedulerBackend主要负责如下功能:
- 监听并持有注册给它的Executor资源
- 根据现有的Executor资源,进行Executor的注册、状态更新、相应Scheduler的请求等任务的调度
模式的实现细节
Spark的各种运行模式虽然在启动方式、运行为之、调度手段上有所不同,但它们所要完成的任务基本是一致的,就是在合适的位置安全可靠的根据用户的配置和作业的需要管理和运行任务,在运行调度过程中需要考虑的问题主要为:
- 环境变量的传递
- JAR包和各种依赖文件的分发
- 任务的管理和序列化等
- 用户参数配置
- 用户及权限控制
环境变量的传递
Spark的运行参数有很大一部分是通过环境变量来设置的,例如Executor的内存设置、Library路径等。在Cluster模式下就涉及到环境变量在各个Worker节点的传递问题。不同的运行模式有不同的传递方式。需要指出的是,在Local模式下,不存在环境变量的传递问题。
在这里主要说明一下再YARN相关模式下的参数传递。在YARN相关模式中,这些环境变量首先要通过YARN client设置到Spark AM的运行环境中,之后Spark AM在启动Executor时再将环境变量设置到Executor中。
JAR包和依赖文件的分发
Spark程序的运行主要有两类依赖:
- Spark运行库及其依赖
- 应用程序自身的额外依赖
在Local模式下,不存在JAR包分发的问题。在这里主要介绍下YARN模式下的文件分发。
在YARN相关模式中,运行库和程序运行所以来的其他文件首先通过HDFS客户端API上传到作业的.sparkStaing目录下,然后将对应的文件和URL映射关系通知YARN,YARN的Node Manager在启动Container的时候会从指定URL处下载相关文件作为运行环境的一部分。
对于需要进一步分发到Executor运行环境的文件,Spark YARN客户端将需要分发的文件的相关属性(例:URL、时间戳、尺寸等)打包成字符串,通过特定的环境变量(SPARK_YARN_CACHE_XXXX)传递给Spark AM,Spark AM在创建Executor的Container时还原特定环境变中的各个文件,并通过调用setLocalResources函数初始化Container。
任务管理和序列化
Spark任务的运行要解决的问题为:
- 以正确的顺序运行任务,有效地管理和分派任务
- 将任务及运行所需相关数据有效地发送到远端
- 收集运行结果
Spark任务通过DAGScheduler调用TaskScheduler.submitTasks进行派发,该接口将相关的一组任务一起提交并进行调度。
任务的运行结果在Executor端被序列化并发送回SchedulerBackend,由于受到Akka帧尺寸的限制,如果运行结果数据过大,结果会存储到BlockManager中,这时候发送到SchedulerBackend的是对应数据的BlockID,TaskScheduler最终会调用TaskResultGetter在线程池中以异步的方式读取结果,TaskSetManager再根据运行结果更新任务状态(比如失败重试等)并汇报给DAGScheduler等。
Spark基本工作流程及YARN cluster模式原理(读书笔记)的更多相关文章
- spark yarn cluster模式下任务提交和计算流程分析
spark可以运行在standalone,yarn,mesos等多种模式下,当前我们用的最普遍的是yarn模式,在yarn模式下又分为client和cluster.本文接下来将分析yarn clust ...
- 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
存储器的保护(三) 修改本章代码清单,使之可以检测1MB以上的内存空间(从地址0x0010_0000开始,不考虑高速缓存的影响).要求:对内存的读写按双字的长度进行,并在检测的同时显示已检测的内存数量 ...
- 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄 ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...
- 程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
程序的载入和运行(五)--<x86汇编语言:从实模式到保护模式>读书笔记25 前面几篇博文最终把代码分析完了.这篇就来说说代码的编译.运行和调试. 1.代码的编译及写入镜像文件 之前我们都 ...
- 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
(十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...
- 《JavaScript 模式》读书笔记(6)— 代码复用模式2
上一篇讲了最简单的代码复用模式,也是最基础的,我们普遍知道的继承模式,但是这种继承模式却有不少缺点,我们下面再看看其它可以实现继承的模式. 四.类式继承模式#2——借用构造函数 本模式解决了从子构造函 ...
- 关于80286——《x86汇编语言:从实模式到保护模式》读书笔记15
一.80286的工作模式 80286首次提出了实模式和保护模式的概念. 实模式:和8086的工作方式相同: 保护模式:提供了存储器管理机制和保护机制,支持多任务. 二.80286的寄存器 (一)通用寄 ...
随机推荐
- 小div布局之卡片堆叠(card-stacking)
前端的页面布局和各种效果真是让人眼花缭乱,公司的设计师恨不得在一个网站上把前端的布局和样式效果都用一遍. 如何实现下面这种布局效果?我给这种布局效果起了个名字,叫做小div布局之卡片堆叠.然后我百度了 ...
- jQuery-1.9.1源码分析系列(九) CSS操作
jquery.fn.css获取当前jQuery所匹配的元素中第一个元素的属性值[$(…).css(cssName),注意这个cssName可以是数组]或给当前jQuery所匹配的每个元素设置样式值[$ ...
- Struts2 源码分析——拦截器的机制
本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样 ...
- Elasticsearch 全教程
Elasticsearch 权威指南 在线阅读 国外自动指向 GITBOOK 项目 | 国内用户自动指向 阿里云 GITHUB 仓库 译者前言 译者现在的工作项目中需要用到 Elasticsearch ...
- Mono.Cecil 初探(一):实现AOP
序言 本篇文章介绍基于Mono.Cecil实现静态AOP的两种方式:无交互AOP和交互式AOP. 概念介绍 Mono.Cecil:一个可加载并浏览现有程序集并进行动态修改并保存的.NET框架. AOP ...
- webControls与客户端脚本路径
网上有用的资料不多,在一本电子书中摘抄了内容如下 webControls配置节只有一个clientScriptsLocation属性,此属性用于指定ASP.NET客户端脚本的默认存放路径.这些文件是包 ...
- Java日期时间操作的一些方法
1. 获得Calendar实例: Calendar c = Calendar.getInstance(); 2. 定义日期/时间的格式: SimpleDateFormat sdf =new Simpl ...
- entityframework学习笔记--004-无载荷与有载荷关系
1.无载荷(with NO Payload)的多对多关系建模 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到实体框架模 ...
- 十二种获取Spring的上下文环境ApplicationContext的方法
转载:https://my.oschina.net/u/2391658/blog/729414
- 轻量、强大的代码编辑器控件-WinForm完美版
前段时间做个小项目需要用到一个代码编辑器控件,但网上搜了半天,居然没发现一个完全满意的编辑器.现有的一些编辑器有: FastedTextBox 优点:1. 轻量. 2. 样式美观. 3. DEMO完 ...