spark学习(基础篇)--(第三节)Spark几种运行模式

h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px }
h3 { color: #fff; background-color: #008eb7; padding: 3px; margin: 10px 0px }

spark应用执行机制分析

前段时间一直在编写指标代码,一直采用的是--deploy-mode client方式开发测试,因此执行没遇到什么问题,但是放到生产上采用--master yarn-cluster方式运行,那问题就开始陆续暴露出来了。因此写一篇文章分析并记录一下spark的几种运行方式。

1.spark应用的基本概念

spark运行模式分为:Local(本地idea上运行),Standalone,yarn,mesos等,这里主要是讨论一下在yarn上的运行方式,因为这也是最常见的生产方式。

根据spark Application的Driver Program是否在集群中运行,spark应用的运行方式又可以分为Cluster模式和Client模式。

spark应用涉及的一些基本概念:

1.mater:主要是控制、管理和监督整个spark集群

2.client:客户端,将用应用程序提交,记录着要业务运行逻辑和master通讯。

3.sparkContext:spark应用程序的入口,负责调度各个运算资源,协调各个work node上的Executor。主要是一些记录信息,记录谁运行的,运行的情况如何等。这也是为什么编程的时候必须要创建一个sparkContext的原因了。

4.Driver Program:每个应用的主要管理者,每个应用的老大,有人可能问不是有master么怎么还来一个?因为master是集群的老大,每个应用都归老大管,那老大疯了。因此driver负责具体事务运行并跟踪,运行Application的main()函数并创建sparkContext。

5.RDD:spark的核心数据结构,可以通过一系列算子进行操作,当Rdd遇到Action算子时,将之前的所有的算子形成一个有向无环图(DAG)。再在spark中转化成为job,提交到集群执行。一个app可以包含多个job

6.worker Node:集群的工作节点,可以运行Application代码的节点,接收mater的命令并且领取运行任务,同时汇报执行的进度和结果给master,节点上运行一个或者多个Executor进程。

7.exector:为application运行在workerNode上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个application都会申请各自的Executor来处理任务。

spark应用(Application)执行过程中各个组件的概念:

1.Task(任务):RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元。

2.TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。

3.Stage(调度阶段):一个taskSet对应的调度阶段,每个job会根据RDD的宽依赖关系被切分很多Stage,每个stage都包含 一个TaskSet。

4.job(作业):由Action算子触发生成的由一个或者多个stage组成的计算作业。

5.application:用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

6.DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

7.TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

spark基本概念之间的关系

一个Application可以由一个或者多个job组成,一个job可以由一个或者多个stage组成,其中stage是根据宽窄依赖进行划分的,一个stage由一个taskset组成,一个TaskSET可以由一个到多个task组成。

应用提交与执行

spark使用driver进程负责应用的解析,切分Stage并且调度task到Executor执行,包含DAGscheduler等重要对象。Driver进程的运行地点有如下两种:

1.driver进程运行在client端,对应用进行管理监控。

2.Master节点指定某个Worker节点启动Driver进程,负责监控整个应用的执行。

driver运行在client

用户启动Client端,在client端启动Driver进程。在Driver中启动或实例化DAGScheduler等组件。

1.driver在client启动,做好准备工作,计划好任务的策略和方式(DAGScheduler)后向Master注册并申请运行Executor资源。

2.Worker向Master注册,Master通过指令让worker启动Executor。

3.worker收到指令后创建ExecutorRunner线程,进而ExecutorRunner线程启动executorBackend进程。

4.ExecutorBackend启动后,向client端driver进程内的SchedulerBackend注册,这样dirver进程就可以发现计算资源了。

5.Driver的DAGScheduler解析应用中的RDD DAG并生成相应的Stage,每个Stage包含的TaskSet通过TaskScheduler分配给Executor,在Exectutor内部启动线程池并行化执行Task,同事driver会密切注视,如果发现哪个execuctor执行效率低,会分配其他exeuctor顶替执行,观察谁的效率更高(推测执行)。

6.计划中的所有stage被执行完了之后,各个worker汇报给driver,同事释放资源,driver确定都做完了,就向master汇报。同时driver在client上,应用的执行进度clinet也知道了。

Driver运行在Worker节点

用户启动客户端,客户端提交应用程序给Master

1.Master调度应用,指定一个worker节点启动driver,即Scheduler-Backend。

2.worker接收到Master命令后创建driverRunner线程,在DriverRunner线程内创建SchedulerBackend进程,Dirver充当整个作业的主控进程。

3.Master指定其他Worker节点启动Exeuctor,此处流程和上面相似,worker创建ExecutorRunner线程,启动ExecutorBackend进程。

4.ExecutorBackend启动后,向client端driver进程内的SchedulerBackend注册,这样dirver进程就可以发现计算资源了。

5.Driver的DAGScheduler解析应用中的RDD DAG并生成相应的Stage,每个Stage包含的TaskSet通过TaskScheduler分配给Executor,在Exectutor内部启动线程池并行化执行Task,同事driver会密切注视,如果发现哪个execuctor执行效率低,会分配其他exeuctor顶替执行,观察谁的效率更高(推测执行)。

6.计划中的所有stage被执行完了之后,各个worker汇报给driver,同事释放资源,driver确定都做完了,就向master汇报。客户也会跳过master直接和drive通讯了解任务的执行进度。

时间: 2024-10-12 03:28:20

spark学习(基础篇)--(第三节)Spark几种运行模式的相关文章

Spark on YARN两种运行模式介绍

本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发)   问题导读 1.Spark在YARN中有几种模式? 2.Yarn Cluster模式,Driver程序在YARN中运行,应用的运行结果在什么地方可以查看? 3.由client向ResourceManager提交请求,并上传jar到HDFS上包含哪些步骤? 4.传递给app的参数应该通过什么来指定? 5.什么模式下最后将结果输

Python学习基础篇第一篇——快速入门(适合初学者)

一.Python学习基础篇第一篇--(快速入门) 建议从Python2.7开始学习,Python2.7可以支持扩展大量的第三方类库,是目前比较成熟的版本 编写代码的软件推荐将python自带的IDLE和PyCharm集成IDE结合起来使用 1.1 Python命令行 Python命令行将以 >>> 开始,比如 >>>print 'Hello World!' 对于验证简单的命令可以在python自带的IDLE中完成  1.2 在Python自带的IDLE写一段小程序 在所

Docker虚拟化实战学习——基础篇(转)

Docker虚拟化实战学习--基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker Docker虚拟化实战和企业案例演练 深入剖析虚拟化技术概念和应用场景 虚拟化,一是项技术--,是一种资源解决方案. 虚拟化技术是将物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒,使计算元件运行在虚拟的基础上,而不是真实的物理资源上. 通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上.

从零学习Fluter(八):Flutter的四种运行模式--Debug、Release、Profile和test以及命名规范

从零学习Fluter(八):Flutter的四种运行模式--Debug.Release.Profile和test以及命名规范 好几天没有跟新我的这个系列文章,一是因为这两天我又在之前的基础上,重新认识flutter,觉得flutter这个东西越来越有意思.并且水很深 今天简单分享一下开发学习中的小知识点 Flutter有四种运行模式:Debug.Release.Profile和test,这四种模式在build的时候是完全独立的 Debug ??Debug模式可以在真机和模拟器上同时运行:会打开所

[转]C++学习–基础篇(书籍推荐及分享)

C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一个好的阅读体验.如果喜欢,最好找纸版(图书馆是个好去处):电子版更适合作为一个参考书籍常备电脑. 我将分为基础篇.Windows篇.和Linux/Unix篇 三个部分来介绍这些经典书籍:   C++入门 <C++ Primer> 我的C++入门读物是<C++大学教程>,这本书800多页

Unity之Shader学习基础篇《一》

最近在学习Shader,将学习的一些心得和案例以及基础知识罗列了一下.这一篇是unity之Shader的基础篇之基础,更多的是一些概念.该篇将分以下几个部分: 1.什么是Shader? 2.GPU和Cg语言 3.Unity中使用Cg语言如何编写Shader? 1.什么是Shader? 1.1.Shder的概念:Shader即着色器,是一款运行在GPU上的程序,用以对三维物体进行着色处理,光与影的计算,纹理颜色的呈现等,从而将游戏引擎中一个个作为抽象的几何数据存在的模型.场景和特效,以和真实世界类

Spark修炼之道(高级篇)——Spark源码阅读:第十节 Standalone运行模式解析

Spark Standalone采用的是Master/Slave架构,主要涉及到的类包括: 类:org.apache.spark.deploy.master.Master 说明:负责整个集群的资源调度及Application的管理. 消息类型: 接收Worker发送的消息 1. RegisterWorker 2. ExecutorStateChanged 3. WorkerSchedulerStateResponse 4. Heartbeat 向Worker发送的消息 1. Registered

性能测试学习基础篇--随笔3

继续做个随笔--现在开始主要讲Jmeter的基础运用知识 -Jmeter基础篇- Jmeter常用术语: 1.采样器Samplers:采样器是jmeter测试脚本的基础单元,用户可以用它来向服务器发出一个特定的请求,采样器会在超时前等待服务器的响应. 2.逻辑控制器Logic Controllers:用户通过逻辑控制器来控制jmeter测试脚本的执行顺序,以便测试能够按照用户期望的顺序和逻辑执行. 3.监听器Listeners:监听器被用来收集测试结果信息,并以用户指定的方式加以展示. 4.配置

javaweb学习总结(二十一)——JavaWeb的两种开发模式

SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示 图1-1 在jsp+javabean架构中,JSP负责控制逻辑.表现逻辑.业务对象(javabean)的调用. JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下