Spark:架构及原理

基本术语:

Standalone模式下存在的角色:

Client:客户端进程,负责提交作业到Master
Master:Standalone模式下的`主控节点`,负责接收client提交的作业,管理worker,并命令worker启动Driver和Executor。
Worker:Standalone模式下slave节点上的`守护进程`,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。
Driver:一个Spark作业运行时包括一个Driver进程,也是作业的`主进程`,负责作业的解析、生成Stage并调度Task到Executor。包括GAGScheduler,TaskScheduler。
Executor:即作业真正执行的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一个到多个Task。

作业相关的名词解释

Stage:一个Spark作业一般包含一到多个Stage
Task:一个Stage包含一个到多个Task,通过多个Task实现并行运行的功能。
DAGScheduler:实现将Spark作业分解成一个到多个Stage,每个Stage根据RDD的分区个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。
TaskScheduler:实现Task分配到Executor上执行。

将这些术语串起来的运行层次图如下:
这里写图片描述

Job=多个Stage,Stage=多个同种Task,Task分为ShuffleMapTask和ResultTask,Dependency分为ShuffleDependency和NarrowDependency。

Spark运行模式:

Standalone模式架构图:
这里写图片描述

该模式主要的节点有client节点、Master节点和worker节点。其中Driver既可以运行在Master节点上,也可以运行在Client节点端。
当用spark-shell交互式工具提交Spark的job时,Driver在Master节点上运行;
当使用spark-submit工具提交job或者在eclipse、IDEA等平台上使用“new SparkConf.setManager(“spark://master:7077”)”方式运行Spark任务时,Driver是运行在本地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一般在获取外部数据和shuffle之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的Worker,最后提交给StandaloneExecutorBackend执行;
  • StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成
    所有Task完成后,SparkContext向Master注销,释放资源StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成;
  • 所有Task完成后,SparkContext向Master注销,释放资源;

Yarn

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

在此以YARN-Cluster为例:
这里写图片描述

  • Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等
  • ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化
  • ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束
  • 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等
  • ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  • 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值