Spark部署方式

Spark支持的主要的三种分布式部署方式分别是

一、standalone(FIFO调度)

1、独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点

(1)Master 主控节点,在整个集群之中,最多只有一个Master处在Active状态

(2)Worker 工作节点 ,在整个集群中,可以有多个worker,如果worker为零,什么事也做不了

(3)Executor 干苦力活的,直接受worker掌控,一个worker可以启动多个executor,启动的个数受限于机器中的cpu核数

2、在standalone部署模式下又分为client模式和cluster模式

1)client模式下

driver和client运行于同一JVM中,不在worker上启动,该JVM进程直到spark application计算完成返回结果后才退出.

 spark任务运行过程

扫描二维码关注公众号,回复: 8837630 查看本文章

i)用户通过bin/spark-submit部署工具或者bin/spark-class启动应用程序的Driver进程,Driver进程会初始化SparkContext对象,并向Master节点进行注册。
ii)Master节点接受Driver程序的注册,检查它所管理的Worker节点,为该Driver程序分配需要的计算资源Executor。Worker节点完成Executor的分配后,向Master报告Executor的状态。
iii)Worker节点上的ExecutorBackend进程启动后,向Driver进程注册。
iV)Driver进程内部通过DAG Schaduler,Stage Schaduler,Task Schaduler等过程完成任务的划分后,向Worker节点上的ExecutorBackend分配TASK。
V)ExecutorBackend进行TASK计算,并向Driver报告TASK状态,直至结束。
Vi)Driver进程在所有TASK都处理完成后,向Master注销

(2)cluster模式

driver由worker启动,client在确认spark application成功提交给cluster后直接退出,并不等待spark application运行结果返回

二、spark on mesos

起源于加州大学伯克利分校,后被twitter推广使用,Mesos上可以部署多种分布式框架,其中Framework是指外部的计算框架,如Hadoop,Mesos等,这些计算框架可通过注册的方式接入mesos,以便mesos进行统一管理和资源分配。

在 Mesos 上运行的 framework 由两部分组成:一个是 scheduler ,通过注册到master 来获取集群资源。另一个是在 slave 节点上运行的executor进程,它可以执行 framework 的 task 。 Master 决定为每个framework 提供多少资源,framework 的 scheduler来选择其中提供的资源。当 framework同意了提供的资源,它通过master将 task发送到提供资源的slaves 上运行

(1) Slave1 向 Master 报告,有4个CPU和4 GB内存可用

(2) Master 发送一个 Resource Offer 给 Framework1 来描述 Slave1 有多少可用资源

(3) FrameWork1 中的 FW Scheduler会答复 Master,我有两个 Task 需要运行在 Slave1,一个 Task 需要<2个CPU,1 GB内存>,另外一个Task需要<1个CPU,2 GB内存>

(4) 最后,Master 发送这些 Tasks 给 Slave1。然后,Slave1还有1个CPU和1 GB内存没有使用,所以分配模块可以把这些资源提供给 Framework2

三、spark on YARN

YARN总体上也Master/slave架构——ResourceManager/NodeManager。前者(RM)负责对各个NodeManager(NM)上的资源进行统一管理和调度。而container是资源分配和调度的基本单位,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container封装的资源。NodeManager的作用则是负责接收并启动应用的container、而向RM回报本节点上的应用Container运行状态和资源使用情况。ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Container,并跟踪这些Container的状态和监控其进度。如下图所示为yarn集群的一般模型。

Spark在yarn集群上的部署方式分为两种,yarn client(driver运行在客户端)和yarn cluster(driver运行在master上)

1、yarn client

(1) Spark Yarn Client向YARN的Resource Manager申请启动Application Master。同时在SparkContent初始化中将创建DAG Scheduler和TASK Scheduler等

(2)ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派

(3)Client中的SparkContext初始化完毕后,与Application Master建立通讯,向Resource Manager注册,根据任务信息向Resource Manager申请资源(Container)

(4)当application master申请到资源后,便与node manager通信,要求它启动container

(5)Container启动后向driver中的sparkContext注册,并申请task

(6)应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己。

2、yarn cluster

(1)Spark Yarn Client向YARN中提交应用程序,包括Application Master程序、启动Application Master的命令、需要在Executor中运行的程序等;

(2)Resource manager收到请求后,在其中一个node manager中为应用程序分配一个container,要求它在container中启动应用程序的Application Master,Application master初始化sparkContext以及创建DAG Scheduler和Task Scheduler。

(3)Application master根据sparkContext中的配置,向resource manager申请container,同时,Application master向Resource manager注册,这样用户可通过Resource manager查看应用程序的运行状态

(4)Resource manager 在集群中寻找符合条件的node manager,在node manager启动container,要求container启动executor,

(5)Executor启动后向Application master注册,并接收Application master分配的task

(6)应用程序运行完成后,Application Master向Resource Manager申请注销并关闭自己。

3、该模式下任务运行流程

(1)用户通过bin/spark-submit部署工具或者bin/spark-class向Yarn集群提交应用程序。

(2)Yarn集群的Resource Manager为提交的应用程序选择一个Node Manager节点并分配第一个container,并在该节点的container上启动SparkContext对象。

(3)SparkContext对象向Yarn集群的Resource Manager申请资源以运行Executor。

(4)Yarn集群的Resource Manager分配container给SparkContext对象,SparkContext和相关的Node Manager通讯,在获得的container上启动ExecutorBackend守护进程,ExecutorBackend启动后开始向SparkContext注册并申请Task。

(5)SparkContext分配Task给ExecutorBackend执行。

(6)ExecutorBackend开始执行Task,并及时向SparkContext汇报运行状况。

(7)Task运行完毕,SparkContext归还资源给Node Manager,并注销退

四、yarn和mesos区别

1、mesos上可部署yarn框架。而yarn是更通用的一种部署框架,而且技术较成熟。

2、mesos双层调度机制,能支持多种调度模式,而Yarn通过Resource Mananger管理集群资源,只能使用一种调度模式。Mesos 的双层调度机制为:mesos可接入如yarn一般的分布式部署框架,但Mesos要求可接入的框架必须有一个调度器模块,该调度器负责框架内部的任务调度。当一个framework想要接入mesos时,需要修改自己的调度器,以便向mesos注册,并获取mesos分配给自己的资源, 这样再由自己的调度器将这些资源分配给框架中的任务,也就是说,整个mesos系统采用了双层调度框架:第一层,由mesos将资源分配给框架;第二层,框架自己的调度器将资源分配给自己内部的任务。

3、mesos可实现粗、细粒度资源调度,可动态分配资源,而Yarn只能实现静态资源分配。

其中粗粒度和细粒度调度定义如下:
  粗粒度模式(Coarse-grained Mode):程序运行之前就要把所需要的各种资源(每个executor占用多少资源,内部可运行多少个executor)申请好,运行过程中不能改变。
  细粒度模式(Fine-grained Mode):为了防止资源浪费,对资源进行按需分配。与粗粒度模式一样,应用程序启动时,先会启动executor,但每个executor占用资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完之后可以马上释放对应的资源。每个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错,这种调度模式类似于MapReduce调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业运行延迟大。

发布了59 篇原创文章 · 获赞 2 · 访问量 2022

猜你喜欢

转载自blog.csdn.net/zuodaoyong/article/details/103949268