Spark1.0.0 运行架构基本概念

本文深入解析了Spark应用在Standalone和YARN集群上的运行架构,包括基本术语、运行过程及特点。重点阐述了SparkContext、Executor、Task等关键组件在两种模式下的作用与交互流程,旨在帮助开发者理解Spark应用如何高效利用资源并执行并行计算任务。
问题导读:
1、Spark Application的运行架构有哪些组成?
2、Spark on YARN 的运行过程是什么?




前言
Spark Application的运行架构由两部分组成:driver program(SparkContext)和executor。Spark Application一般都是在集群中运行,比如Spark Standalone、YARN、mesos,这些集群给Spark Applicaiton提供了计算资源和这些资源管理,这些资源既可以给executor运行,也可以给driver program 运行。根据Spark Application的driver program是否在资源集群中运行,Spark Application的运行方式又可以分为Cluster模式和Client模式。Spark1.0.0提供了一个Spark Appliaction的部署工具bin/spark-sumbit,具体用法参见Spark1.0.0 应用程序部署工具spark-submit。下面介绍一下Spark1.0.0 运行架构中的基本概念、Standalone中运行过程、YARN中运行过程。


1:基本术语
Application: 基于Spark的用户程序,包含了一个driver program 和 集群中多个的executor
Driver Program :运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program。
Cluster Manager: 在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)
Worker Node: 集群中任何可以运行Application代码的节点
Executor: 是为某Application运行在worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都有各自独立的executors。
Task: 被送到某个executor上的工作单元
Job: 包含多个Task组成的并行计算,往往由Spark action催生,该术语可以经常在日志中看到。
Stage: 每个Job会被拆分很多组task,每组任务被称为Stage,也可称TaskSet,该术语可以经常在日志中看到。
RDD:Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作),详情见RDD 细解、Spark1.0.0 编程模型。
DAG Scheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,详见DAG Scheduler 细解。
TaskScheduler:将Taskset提交给worker(集群)运行并回报结果,详见TaskScheduler 细解。
关于Application中的几个概念可如下图所示:




2:Spark运行架构
Spark运行架构参见下面示意图:
构建Spark Application的运行环境(启动SparkContext)
SparkContext向资源管理器(可以是Standalone、Mesos、Yarn)申请运行Executor资源,并启动StandaloneExecutorBackend,executor向SparkContext申请Task。
SparkContext将应用程序代码发放给executor
SparkContext构建成DAG图、将DAG图分解成Stage、将Taskset发送给Task Scheduler、最后由Task Scheduler将Task发放给Executor运行。
Task在Executor上运行,运行完毕释放所有资源。



下面简单的描述一下Spark on Standalone和Spark on YARN的运行过程,以后的篇幅中再具体描述。


3:Spark on Standalone运行过程(client模式)
SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory)
Master根据SparkContext的资源申请要求和worker心跳周期内报告的信息决定在哪个worker上分配资源,然后在该worker上获取资源,然后启动StandaloneExecutorBackend。
StandaloneExecutorBackend向SparkContext注册
SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shu f f le之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的worker,最后提交给StandaloneExecutorBackend执行;
StandaloneExecutorBackend会建立executor 线程池,开始执行Task,并向SparkContext报告,直至Task完成。
所有Task完成后,SparkContext向Master注销,释放资源。
关于Spark on Standalone的更详细信息参见Spark1.0.0 on Standalone 运行架构实例解析
   

4:Spark on YARN 运行过程(cluster模式)
用户通过bin/spark-submit( Spark1.0.0 应用程序部署工具spark-submit)或 bin/spark-class 向YARN提交Application
RM为Application分配第一个container,并在指定节点的container上启动SparkContext。
SparkContext向RM申请资源以运行Executor
RM分配Container给SparkContext,SparkContext和相关的NM通讯,在获得的Container上启动StandaloneExecutorBackend,StandaloneExecutorBackend启动后,开始向SparkContext注册并申请Task
SparkContext分配Task给StandaloneExecutorBackend执行
StandaloneExecutorBackend执行Task并向SparkContext汇报运行状况
Task运行完毕,SparkContext归还资源给NM,并注销退出。
关于Spark on Standalone的更详细信息参见Spark1.0.0 on YARN 运行架构实例解析




5:Spark运行架构的特点
每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。这种Application隔离机制有其优势的,无论是从调度角度看(每个Driver调度它自己的任务),还是从运行角度看(来自不同Application的Task运行在不同的JVM中)。当然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。
Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。
提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。
Task采用了数据本地性和推测执行的优化机制。详见TaskScheduler 细解。
下载前可以先看下教程 https://pan.quark.cn/s/a4b39357ea24 在网页构建过程中,表单(Form)扮演着用户与网站之间沟通的关键角色,其主要功能在于汇集用户的各类输入信息。 JavaScript作为网页开发的核心技术,提供了多样化的API和函数来操作表单组件,诸如input和select等元素。 本专题将详细研究如何借助原生JavaScript对form表单进行视觉优化,并对input输入框与select下拉框进行功能增强。 一、表单基础1. 表单组件:在HTML语言中,<form>标签用于构建一个表单,该标签内部可以容纳多种表单组件,包括<input>(输入框)、<select>(下拉框)、<textarea>(多行文本输入区域)等。 2. 表单参数:诸如action(表单提交的地址)、method(表单提交的协议,为GET或POST)等属性,它们决定了表单的行为特性。 3. 表单行为:诸如onsubmit(表单提交时触发的动作)、onchange(表单元素值变更时触发的动作)等事件,能够通过JavaScript进行响应式处理。 二、input元素视觉优化1. CSS定制:通过设定input元素的CSS属性,例如border(边框)、background-color(背景色)、padding(内边距)、font-size(字体大小)等,能够调整其视觉表现。 2. placeholder特性:提供预填的提示文字,以帮助用户明确输入框的预期用途。 3. 图标集成:借助:before和:after伪元素或者额外的HTML组件结合CSS定位技术,可以在输入框中嵌入图标,从而增强视觉吸引力。 三、select下拉框视觉优化1. 复选功能:通过设置multiple属性...
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)内容概要:本文围绕“基于深度强化学习的微能源网能量管理与优化策略”展开研究,重点探讨了如何利用深度强化学习技术对微能源系统进行高效的能量管理与优化调度。文中结合Python代码实现,复现了EI级别研究成果,涵盖了微电网中分布式能源、储能系统及负荷的协调优化问题,通过构建合理的奖励函数与状态空间模型,实现对复杂能源系统的智能决策支持。研究体现了深度强化学习在应对不确定性可再生能源出力、负荷波动等挑战中的优势,提升了系统运行的经济性与稳定性。; 适合人群:具备一定Python编程基础和机器学习背景,从事能源系统优化、智能电网、强化学习应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微能源网的能量调度与优化控制,提升系统能效与经济效益;②为深度强化学习在能源管理领域的落地提供可复现的技术路径与代码参考;③服务于学术研究与论文复现,特别是EI/SCI级别高水平论文的仿真实验部分。; 阅读建议:建议读者结合提供的Python代码进行实践操作,深入理解深度强化学习算法在能源系统建模中的具体应用,重点关注状态设计、动作空间定义与奖励函数构造等关键环节,并可进一步扩展至多智能体强化学习或与其他优化算法的融合研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值