转载请注明出处: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等。
相关推荐
windows中使用yarn-cluster模式提交spark任务,百度找不着的啦,看我这里。另外spark的版本要使用正确哦 更简单的方式参考: https://blog.csdn.net/u013314600/article/details/96313579
Spark 初始化源码阅读 Spark on YARN 的 Client 和 Cluster 区别 Spark 是一个大数据处理的开源框架,它可以在多种集群管理器上运行,如 YARN、Mesos 和 Standalone。Spark on YARN 是 Spark 在 YARN 集群管理器上...
spark-sql sql on yarn --deploy-mode cluster 改造为 可以cluster提交
本篇博客,Alice为大家带来关于...注意:不需要集群,因为把Spark程序提交给YARN运行本质上是把字节码给YARN集群上的JVM运行,但是得有一个东西帮我去把任务提交上个YARN,所以需要一个单机版的Spark,里面的有spark-sh
Spark的Yarn模式是将Spark应用部署在Hadoop的YARN资源管理系统上的方式,这种方式无需单独搭建Spark集群,而是利用YARN的资源管理和调度能力。YARN(Yet Another Resource Negotiator)是Hadoop 2.x版本引入的一个...
在提交Spark任务前,需要配置Spark的相关属性,如`spark.master`设置为`yarn-client`或`yarn-cluster`,前者用于客户端模式,后者用于集群模式。此外,还需指定Hadoop的配置目录,例如`spark.yarn.conf.archive`。 ...
本文将深入探讨Spark的原理及源码分析,首先从Spark运行时的通用流程入手,然后介绍核心组件的角色与职责,以及Spark支持的不同集群部署模式。 在Spark的运行流程中,用户通过`spark-submit`提交应用程序。这个过程...
本文档详细介绍了 Spark 1.2.1 在 standalone 集群模式和 on yarn 集群模式下的部署与运行方式。 Spark 版本和环境配置 Spark 1.2.1 的版本号为 spark-1.2.1-bin-hadoop2.4,已经做了相应的环境配置,例如 linux ...
在Standalone模式下,Spark应用程序在集群上直接运行,而YARN模式下Spark分为两种运行方式,即YARN-Client和YARN-Cluster。YARN-Client模式下,Driver运行在客户端,而YARN-Cluster模式下,Driver运行在由...
Spark: Big Data Cluster Computing in Production English | 2016 | ISBN: 1119254019 | 216 pages | PDF | 5 MB Production-targeted Spark guidance with real-world use cases Spark: Big Data Cluster ...
2. 提交Spark任务:使用spark-submit命令提交Spark任务,例如:spark-submit --master yarn --class org.apache.spark.examples.SparkPi --deploy-mode cluster spark-examples-1.6.1-hadoop2.6.0.jar 200。...
3. **Cluster Manager**:负责资源分配,如YARN、Mesos或Standalone模式。 4. **Executor**:在每个工作节点上运行,负责执行任务并存储数据在内存中。 ### 三、RDD原理 RDD是Spark的基础数据结构,具有容错性。...
了解Spark作业提交的工作原理对于有效使用Spark至关重要。在提交Spark作业时,用户应用程序会被转化为一个或多个Stage,Stage进一步拆分为Task。Spark的调度器根据资源需求分配Task到可用的Executor上执行。Executor...
这时,需要配置Spark的`yarn-client`或`yarn-cluster`模式,并设置相关的Hadoop配置。 **8. Spark的性能调优** 性能调优是Spark应用的关键环节,包括调整executor数量、内存分配、shuffle行为、数据序列化策略等。...
《Spark技术内幕深入解析Spark内核架构设计与实现原理》这本书深入探讨了Apache Spark这一分布式计算框架的核心架构和实现机制,旨在帮助读者全面理解Spark的工作原理,并能够有效地利用其进行大数据处理。...
1. `spark.master`: 指定Spark运行模式,对于YARN,应设置为`yarn-client`或`yarn-cluster`。前者在驱动程序运行在提交任务的客户端,后者则在YARN集群内部启动驱动程序。 2. `spark.yarn.jars`: 提供包含Spark库的...
在Standalone模式中指的是通过Slave文件配置的Worker节点,在Spark on Yarn模式中指的是NodeManager节点,在Spark on Messos模式中指的是Messos Slave节点。 6. RDD:弹性分布式数据集,Spark的基本计算单元,可以...
在Spark内核篇02中,我们主要讨论了Spark在三种不同模式下的运行机制:Yarn模式、Yarn-Client模式和Standalone模式,包括这两种运行模式下的Cluster和Client模式。 首先,我们来看Yarn模式的运行流程: 1. 用户通过...
- Hadoop YARN:统一资源管理,支持mapreduce、storm等多种计算框架,有yarn client和yarn cluster两种模式。 在实际生产环境中,Hadoop YARN是最常见的部署选择,尤其是yarn cluster模式,因为它能更有效地管理和...
在 Standalone 模式中指的是通过 Slave 文件配置的 Worker 节点,在 Spark on Yarn 模式中指的就是 NodeManager 节点,在 Spark on Messos 模式中指的就是 Messos Slave 节点。 五、Executor Executor 是 ...