Spark学习(四)之Spark运行流程

Spark程序的入口之SparkContext        今天讲的是sparkContext,这是spark程序的入口,每次写spark程序,首先你得: new sparkContext(conf),参数里是sparkConf,也就是一些相关配置参数。SparkContext 允许driver 应用程序通过资源管理器访问集群,这个资源管理器可以是yarn,mesos,或者是spark集群管理器。sparkContext具体干哪些活呢?细节可... 阅读详情

一、Spark中的基本概念

(1)Application:表示你的应用程序
(2)Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext
(3)Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。
(4)Worker:集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点。
(5)Task:在Executor进程中执行任务的工作单元,多个Task组成一个Stage
(6)Job:包含多个Task组成的并行计算,是由Action行为触发的
(7)Stage:每个Job会被拆分很多组Task,作为一个TaskSet,其名称为Stage
(8)DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,其划分Stage的依据是RDD之间的依赖关系
(9)TaskScheduler:将TaskSet提交给Worker(集群)运行,每个Executor运行什么Task就是在此处分配的。
在这里插入图片描述

二、Spark的运行流程

  1. 基本运行流程
(1)构建Spark Application的运行环境(启动SparkContext),
SparkContext向资源管理器(可以是Standalone、Mesos或YARN)
注册并申请运行Executor资源;

(2)资源管理器分配Executor资源并启动StandaloneExecutorBackend,
Executor运行情况将随着心跳发送到资源管理器上;

(3)SparkContext构建成DAG图,将DAG图分解成Stage,
并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task
(4)Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序
代码发放给Executor。
(5)Task在Executor上运行,运行完毕释放所有资源。
  1. 图解
    在这里插入图片描述

  2. DAGScheduler

Job=多个stage,Stage=多个同种task, Task分为ShuffleMapTask和ResultTask,Dependency分为ShuffleDependency和NarrowDependency面向stage的切分,切分依据为宽依赖

stage与stage之间是宽依赖,stage内部都是窄依赖

宽窄依赖的作用是:将job切割成多个stage.从祖先RDD开始找,如果是窄依赖继续往下找,以宽依赖为切割点,分为2个stage

Spark 程序执行时,SparkContext 会将每个 job 构建成一个 DAG图,然后根据 RDD 间的宽窄依赖划分出一个个 stage -> 从后往前回溯,遇到宽依赖就切割;
在这里插入图片描述

  1. TaskScheduler

维护task和executor对应关系,executor和物理资源对应关系,在排队的task和正在跑的task。内部维护一个任务队列,根据FIFO或Fair策略,调度任务。

  1. spark资源调度的方式

spark 使用粗粒度的资源调度

粗粒度的资源调度
在任务执行前申请到所需的所有资源,当所有 task 执行完毕后再释放资源
典型代表是standalone模式,mesos粗粒度模式,yarn
优点:task 直接使用已经申请好的资源,执行效率高
缺点:所有的 task 执行完毕才释放资源,可能导致集群资源浪费,例如只剩一个 task 迟迟不能结束,那么大量资源将被闲置

细粒度的资源调度
任务执行时,task 自己去申请资源,执行完毕后释放资源,如mesos细粒度模式
优点:使集群资源得以充分利用
缺点:task 需要自己申请资源,执行效率低

三、Spark集群三种运行模式

1. local模式

Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-env.sh导出JAVA_HOME,无需其他任何配置即可使用,

方式:./spark-shell - -master local[n] ,n代表线程数
2. Standalone

Standalone模式是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。其中Driver既可以运行在Master节点上中,也可以运行在本地Client端。当用spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行;当使用spark-submit工具提交Job或者在Eclips、IDEA等开发平台上使用”new SparkConf().setMaster(“spark://master:7077”)”方式运行Spark任务时,Driver是运行在本地Client端上的。

运行过程:
  1. 提交一个任务Application
  2. 初始化程序的入口SparkContext(初始化DAG Scheduler,Task Scheduler)
  3. Task Scheduler向master去进行注册并申请资源(CPU Core和Memory)
  4. Master根据SparkContext的资源申请要求和Worker心跳周期内报告的信息决定在哪个Worker上分配资源,然后在该Worker上获取资源,然后启动StandaloneExecutorBackend;顺便初始化好了一个线程池
  5. 当 Executor 成功启动后,会去向 TaskScheduler 反向注册,此时TaskScheduler 就得到所有成功启动的 Executor 的信息到这个时候其实我们的初始化过程基本完成了,我们开始执行transformation的代码,但是代码并不会真正的运行,直到我们遇到一个action操作。生产一个job任务,进行stage的划分
  6. SparkContext 对象解析代码构建DAG(有向无环图)交给 DAGScheduler,每一个 job 会构建一个DAG图,DAGScheduler 根据 DAG 中 RDD 的宽窄依赖将其切分成一个个 stage,每个 stage 中包含一组 task,每个 task 因为都是窄依赖,不会产生 shuffle,所以都是 pipeline(管道) 计算模式
  7. DAGScheduler 将一个 stage 封装到一个 taskSet 中,传给 TaskScheduler,TaskScheduler拿到后遍历 taskSet ,得到一个个 task,解读其要计算的数据,然后调用 HDFS 的 API 得到数据所在的位置
  8. 本着计算向数据靠拢的原则,TaskScheduler 将 task 分发到其所要计算的数据所在的节点的 Executor 进程中,task 最后会被封装到线程池里的一个线程中执行,task 执行的过程中 TaskScheduler 会对其进行监控
  9. 如果 task 执行失败,TaskScheduler 会进行重试,再次分发该 task ,最多重试3次;
    如果 task 陷入挣扎并且 spark 开启了推测执行,TaskScheduler 会换一个节点分发陷入挣扎的 task,两个 task 谁先执行完就以谁的结果为准

陷入挣扎的判定标准:当75%的 task 已经执行完毕后,这时 TaskScheduler 每隔10ms会计算一次剩余 task 当前执行时间的中值 t,然后以 t 的1.5倍 为标准,未执行完的 task 当前执行时间如果大于 t*1.5 则该 task 被判定为陷入挣扎的 task

  1. 如果3次重试后 task 依然执行失败,该 task 所在的 stage 就会被判定为失败,TaskScheduler 会向 DAGScheduler 反馈,DAGScheduler 会重试失败的 stage,最多重试4次,如果4次重试后该 stage 依然失败,则该 job 被判定为失败,程序中止
    DAGScheduler 重试 stage 时只会重试 stage 中失败的 task
  2. 当所有 task 成功执行完毕后或 job 失败,driver 会通知 master, master 会通知 worker kill 掉 Executor,完成资源回收
运行过程图解

在这里插入图片描述

3. Spark on YARN

Spark on YARN模式根据Driver在集群中的位置分为两种模式:一种是YARN-Client模式,另一种是YARN-Cluster(或称为YARN-Standalone模式)。
Spark On Yarn的优势

  1. Spark支持资源动态共享,运行于Yarn的框架都共享一个集中配置好的资源池
  2. 可以很方便的利用Yarn的资源调度特性来做分类·,隔离以及优先级控制负载,拥有更灵活的调度策略
  3. Yarn可以自由地选择executor数量
  4. Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以运行于Kerberized Hadoop之上,在它们进程之间进行安全认证
3.1 YARN-Client

在Yarn-client中,Application Master仅仅从Yarn中申请资源给Executor,之后client会跟container通信进行作业的调度
YARN-client的工作流程

  1. 客户端生成作业信息提交给ResourceManager(RM)
  2. RM在本地NodeManager启动container并将Application Master(AM)分配给该NodeManager(NM)
  3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver
  4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor
  5. Executor向本地启动的Application Master注册汇报并完成相应的任务
  6. 应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己。
YARN-client图解

在这里插入图片描述

3.2 YARN-Cluster

在Yarn-cluster模式下,driver运行在Appliaction Master上,Appliaction Master进程同时负责驱动Application和从Yarn中申请资源,该进程运行在Yarn container内,所以启动Application Master的client可以立即关闭而不必持续到Application的生命周期,
YARN-Cluster运行流程

  1. 客户端生成作业信息提交给ResourceManager(RM)
  2. RM在某一个NodeManager(由Yarn决定)启动container并将Application Master(AM)分配给该NodeManager(NM)
  3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver
  4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor
  5. Executor向NM上的Application Master注册汇报并完成相应的任务

YARN-Cluster运行流程图解
在这里插入图片描述

3.3 YARN-Client 与 YARN-Cluster 区别

1、YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业;

2、YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开。

4. Spark Standalone与Spark On Yarn模式下的比较

在这里插入图片描述

Spark on Yarn的运行流程,以及两种模式的对比 Spark on Yarn的运行流程,以及两种模式的对比Yarn组件简介Spark组件 Yarn组件简介 ResourceManager:负责整个集群的资源管理和资源分配 NodeManager:每个节点的资源和任务的管理器,负责启动和停止Container,并监视资源使用情况 ApplicationMaster:Yarn中每个Application对应一个AM进程,获取资源后告诉NodeMan... 阅读详情

相关推荐

Spark简介及运行流程图文解说

初识Spark的朋友 ,下面是我汇总后的Spark总结和自己整合的一张流程图,希望可以帮助到你,也可以给我提出建议,一同进步1.认知Spark:Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表...

weixin_42163700的博客 3429

Spark学习2

Spark Application的程序入口为。

qq_43601664的博客 611

Spark应用运行流程

相关基本术语 ------------------------- Application:应用,即用户需要完成的应用程序。一般来说,这部分代码需要用户根据自己的需求来完成。这部分代码主要包括两部分:Driver和Executor。 Driver:顾名思义,驱动者,为Application准备运行环境,驱动并监控Application的运行。 Worker:当SparkContext申请到资

小小本科生成长之路 4507

Spark 架构及运行流程

1. Spark 架构 Spark 遵循主从架构,即集群中由一个主服务器和若干个从服务器组成。 Spark 架构基于两个抽象: RDD:弹性分布式数据集 DAG:有向无环图 1.1 Spark 运行架构 Spark 运行架构中包括: 集群资源管理器(Cluster Manager) Spark 驱动节点(Driver) 若干个工作节点(Worker Node) 1.2 Spark 组件 ???? Application: Spark Application 包含了一个 Driver 及多个 Exe

weixin_47243236的博客 5458

【Spark】Spark 的运行环境、运行架构、提交流程

  前几天大概了解了 Spark 是什么,没看过的可以点击下面的链接。今天开始正式学习 Spark。 1.Spark 运行环境 1.1 Local 模式 本地执行 Spark 代码的环境。用于调试、练习。 1.2 Standalone 模式 独立部署模式。Spark 自身提供计算资源。Spark 是计算框架,但自身资源调度不是它的强项。整体是 master-slave 架构。 1.3 Yarn 模式 使用 Yarn 作为资源调度框架,工作中使用最多。可以先点击下面的链接阅读之前的文章了解什么是 Yarn。

每天更新大数据面经和技术 1661

Spark 的运行流程

目录 1.1、Spark的基本运行流程 1.2、运行流程图解 1.3、SparkContext初始化 1.4、Spark运行架构特点 1.5、DAScheduler 1.6、TaskScheduler 1.7、SchedulerBackend 1.8、Executor 1.1、Spark的基本运行流程 1、构建 DAG 使用算子操作 RDD 进行各种 transfor...

谦卑t 1391

SPARK 编程入口 SparkContext,SparkSession

SparkContext是老版本的玩法,新版本都是用SparkSession //创建sparkContext,JavaSparkContext SparkConf sparkConf = new SparkConf() .setAppName("spark-sdfgsgsdgsdgsdgsdg") .setMaster("local"); SparkContext sparkContext = SparkContext.getOrCre.

小哇 1005

Spark源码阅读04-Spark运行架构之Standalone运行模式

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节。

2401_84009317的博客 626

2024-02-22(Spark)

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变,可以分区,里面的元素可以并行计算的集合。Dataset:一个数据集合,用于存放数据的(本地集合是本进程集合,RDD是跨越机器的,因此RDD集合是跨进程集合)Distributed:RDD中的数据是分布式存储的,可用于分布式计算。(RDD的数据是跨越机器存储的/跨进程)Resilient:RDD中的数据可以存储在内存中或者磁盘中。

cxr的博客 1311

Spark总体架构和运行流程

本节将首先介绍 Spark 的运行架构和基本术语,然后介绍 Spark 运行的基本流程,最后介绍 RDD 的核心理念和运行原理。 Spark 总体架构 Spark 运行架构如图 1 所示,包括集群资源管理器(Cluster Manager)、多个运行作业任务的工作结点(Worker Node)、每个应用的任务控制结点(Driver)和每个工作结点上负责具体任务的执行进程(Executor)。 ...

大数据基础学习 2833

【大数据学习 | Spark-Core】Spark提交及运行流程

3)启动的Executor 进程 会主动与 Driver端通信,Driver 端根据代码的执行情况,产生多个task,发送给Executor;被送到某个Executor上的工作单元,跟MR中的MapTask和ReduceTask概念一样,是运行Application的基本单位。4)Executor 启动 task 做真正的计算,每个Task 得到资源参数后,对相应的输入分片数据执行计算逻辑;运行 Application 的 main() 函数的节点,提交任务,并下发计算任务;spark的集群运行结构。

2301_80912559的博客 947

【Spark精讲】Spark任务运行流程

Spark精讲,Spark任务运行流程,Spark任务执行流程,client模式,cluster模式,yarn-client模式,yarn-cluster模式,master参数

话数Science 4973

Spark学习之路 (七)Spark 运行流程

《2021年最新版大数据面试题全面开启更新》 欢迎关注github《大数据成神之路》 目录 一、Spark中的基本概念 二、Spark的运行流程 2.1 Spark的基本运行流程 三、Spark在不同集群中的运行架构 3.1 Spark on Standalone运行过程 3.2 Spark on YARN运行过程 正文 一、Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext。由SparkCo..

微信搜:import_bigdata,大数据领域硬核原创作者 786

Spark运行流程

原文链接:点击打开链接 问题导读 1.Spark运行包含哪些流程? 2.本文认为Spark运行架构有哪些特点? 3.DAGScheduler的作用是什么? 4. RDD在Spark架构中是如何运行的? 5.Spark on Standalone运行包含哪些过程? 1.Spark运行基本流程参见下面示意图 1.构建Spark Applic

ShanX_s的博客 9417

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 1014

【鸿蒙南向开发】OpenHarmony——分布式数据对象之功能实践

通过本文的学习可了解到分布式数据对象的主要接口、大致调用方法和功能实现等。结合对应内容,可以进一步对分布式数据对象同步机制做深度学习。下一步,(1) 着重理解同步组网的构建原理。(2) 着重理解同步组网内,监听change和status变化的实现。●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS_666的博客 1089

spark运行基本流程

一、基本流程 1.构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源; 2.资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上; 3.SparkCont...

qq_21705851的博客 4917

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

Spark学习之路——3.Spark应用运行流程和运行模式

第三节、Spark应用运行流程和运行模式 一、Spark应用运行流程 1.程序的执行流程: 当执行一个应用时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用 程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中。 2.下面是Spark应用程序详细流程: ①当一个S...

Nelson_hehe的博客 840

基于 FPGA Vivado 信号发生器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 信号发生器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于 FPGA Vivado 信号发生器设计(附源工程),掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习信号发生器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“信号发生器设计源工程”。 设计原理 信号发生器...

7987

学Simulink--基于机器人与自动化系统的场景实例:六自由度机械臂的逆运动学控制仿真

摘要:本文详细介绍了在Simulink中实现六自由度机械臂逆运动学控制的仿真方法。通过构建包含机械臂模型、路径规划器、逆运动学求解器和控制器等模块的系统,利用MATLAB Robotics工具箱进行建模。文章逐步讲解了从模型创建、轨迹规划、逆运动学求解到控制器设计的完整流程,并提供了性能评估标准。该方法能有效验证逆运动学算法,优化机械臂控制策略,提高操作精度和效率,为机器人自动化系统开发提供实用参考。

xiaoheshang_123的博客 230

【精通Spark系列】一文搞懂Spark的运行架构,文末附带大数据Spark的学习路线

???? 作者 :“大数据小禅” ???? **文章简介 **:本篇文章属于Spark系列文章,专栏将会记录从spark基础到进阶的内容,,内容涉及到Spark的入门集群搭建,核心组件,RDD,算子的使用,底层原理,SparkCore,SparkSQL,SparkStreaming等,Spark专栏地址.欢迎小伙伴们订阅???? ???? **文章源码获取 **:与本文相关的安装包,大数据交流群,小伙伴们可以关注文章底部的公众号,点击“联系我”备注对应内容获取。 ???? 欢迎小伙伴们 点赞????、收藏⭐

大数据小禅的博客 4737

深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?

首先介绍 AI 时代 Java 开发框架选择背景,接着对比两者功能特性(Spring AI 的生态集成与标准化设计、LangChain4j 的多模型适配与提示工程)、应用场景(企业级系统改造与创新产品开发)、开发体验(学习成本与调试工具)、生态扩展(Spring 商业支持与 LangChain4j 开源社区)、性能安全(企业级优化与自主安全实现)及成本趋势(短期投入、长期回报与技术演进),最后给出选型建议与混合架构方案。

博客 5443

Spark的运行流程详解

一、Spark提交应用任务的四个阶段: 总共提交的任务分为四个阶段,提交+执行: 1、在分配完毕executor以后,解析代码生成DAG有向无环图; 2、将生成的DAG图提交给DAGScheduler,这个组件在driver内,DAGScheduler负责切分阶段,按照DAG图中的shuffle算子进行stage阶段的切分,切分完毕阶段以后,按照每个阶段分别生成对...

Lyy1016的博客 1679

K230目标识别数字提问:模型只能识别近距离的目标,稍远一点就无法正确检测...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1897

CONN工具箱分析fmri数据笔记1

前言一、安装二、预处理三、去噪 前言 CONN:functional connectivity toolbox,是基于MATLAB和SPM的一个对功能磁共振数据进行分析的一个工具箱。可以进行以下分析: Seed-based correlations (SBC), ROI-to-ROI correlations, graph analyses, Independent component analyses(group-ICA), Masked (ICA) Amplitude of Low-Frequency.

weixin_52073820的博客 6585
上一篇: Spark学习(三)之 RDD
thyyyyyyy
博客等级 码龄8年 16粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值