Spark-Core之Spark运行模式StandAlone模式和Yarn模式详解

1. spark运行在standAlone模式:

1.1 standAlone的client模式:(driver运行在sparkSubmit进程中)

1.2 运行的流程:

1. 客户端向master提交任务

2. master根据客户端提交的任务,计算那些worker符合执行任务的条件,找到符合执行条件的worker然后和worker 进行RPC通信,通知worker启动executor,并且会将一些driver端的信息告诉给executor,executor启动之后会向driver端反向注册,建立链接

3. driver端和executor端建立链接之后,driver端会创建RDD调用transformation和action,然后构建DAG切分Stage,生产task,然后将task放到taskSet中,通过taskSchedule,将taskSet序列化,发送到指定的executor中

4. standAlone的cluster模式:(集群模式SparkContext会运行在woker中的DriverWapper进程中,不运行在SparkSubmit进程中)

1.3  standAlone的cluster模式:(driver运行在某一台worker中的DriverWapper进程中)

1.4 执行流程

1. 随便找一台安装了spark并且有spark脚本的机器就可以向集群中提交任务,首先和master进行通信

2. master会在worker中找一台符合条件的worker,然后在worker中启动一个DriverWapper进程driver端就是在DriverWapper 进程中

3. mater会在Driver启动完成之后,继续和其他worker进行通信,然后让worker启动executor,executor启动完成之后就会反向向driver进行注册 

4. executor启动完成之后就会反向向driver进行注册完成之后DriverWapper端就会有SparkContext,创建RDD,调用transformation,和action,生成DAG,切分stage,生成task,放在taskSet中序列化通过网络传输到对应的Executor中

总结:

1. standAlone模式中的client模式和cluster模式的最本质的区别就是,driver运行在哪里,client模式driver运行sparkSubmit进程中,cluster模式driver运行在集群中的某一台worker中的DriverWapper进程中

2. standAlone模式中的cluster模式,必须要将写好要运行的程序上传到公共的文件系统中,因为diver要启动在集群中的某一台worker中,而这台worker必须要有我们写好的jar包,所以给每一台机器指定一个共享的文件系统

3. 在standAlone模式中,每一个worker只能有一个application对应的一个executor,但是一个worker可以有多个application对应的executor

4. sparkShell和sparkSql要想在客户端敲命令必须是在spark运行模式为client模式

5. driver是一些类的统称,driver最主要包括:SparkContext

2. Spark On Yarn模式:(cluster模式)

2.1 执行流程

1. 先使用sparkSubmit命令向集群提交任务,sparkSubmit会在环境变量(HADOOP_CONF_DIR)中找到对应的hadoop和yarn的配置文件,从而找到namenode和resourceManger

2. client会向resourceManger建立通信,resourceManger会返回给客户端一个application ID,客户端拿着这个application ID将应用程序逻辑jar包,spark的核心依赖jar包和配置文件压缩包上传到hdfs指定的applicationID对应的目录下(当程序结束之后,会自动删除上传的jar包,以减轻hdfs内存的压力)

3. 客户端将jar包上传hdfs上传完成之后,resourceManger中ResourceScheduler知道哪些nodemanger上有足够的资源,然后把第一个容器的描述信息(指的是内存,cup的信息,以及容器以后运行在哪台节点上)给ResourceManger中的ApplicationsManger,ApplicationsManger就会和第一个容器所在的nodeManger进行通信

4.ApplicationsManger和第一个容器所在的nodeManger进行通信之后会让nodeManger先从hdfs上下载jar包然后再启动application中的第一个容器(这个容器ApplicationMaster中运行的是下载的一些重要的对象,比如sparkContext,生成DAG,切分stage,生成task等)

5. 当ApplicationManger启动好了之后会向resouceManger进行通信,向resourceManger申请资源(比如:我需要几个executor)

6. resourceScheduler是知道哪些nodeManger上有足够的资源来启动executor ,resourceScheduler会将这些容器的描述信息返回给applicationMaster

7. applicationMaster会拿着这些对应的描述信息向nodeManger进行通信,让nodeManger先从hdfs上下载jar包,然后启动executor,启动好executor会对applicationMaster进行反向注册,applicationMaster也会向client汇报一些执行进度信息

2.2 Spark On Yarn模式:(client模式)

2.2.1 client模式的执行流程

1. 先使用sparkSubmit命令向集群提交任务,sparkSubmit会在环境变量(HADOOP_CONF_DIR)中找到对应的hadoop和yarn的配置文件,从而找到namenode和resourceManger

2. client会向resourceManger建立通信,resourceManger会返回给客户端一个application ID,客户端拿着这个application ID将应用程序逻辑jar包,spark的核心依赖jar包和配置文件压缩包上传到hdfs指定的applicationID对应的目录下(当程序结束之后,会自动删除上传的jar包,以减轻hdfs内存的压力)

3. 客户端将jar包上传hdfs上传完成之后,resourceManger中ResourceScheduler知道哪些nodemanger上有足够的资源,然后把一个容器的描述信息(指的是内存,cup的信息,以及容器以后运行在那台节点上)给ResourceManger中的ApplicationsManger,ApplicationsManger就会和第一个容器所在的nodeManger进行通信

4.ApplicationsManger和第一个容器所在的nodeManger进行通信之后会让nodeManger先从hdfs上下载jar包然后在启动application中的第一个容器(这个容器叫特殊的ApplicationMaster【ExecutorLuacher】这个容器只负责启动executor,driver不运行在ApplicationManger中,而是运行在sparkSubmit中);注解:ApplicationMaster只负责向resourceManger申请容器,负责向对应的nodeManger进行通信启动executor

5. 当ApplicationManger启动好了之后会向resouceManger进行通信,向resourceManger申请资源(比如:我需要几个executor)

6. resourceScheduler是知道哪些nodeManger上有足够的资源来启动executor ,resourceScheduler会将这些容器的描述信息返回给applicationMaster

7. applicationMaster会拿着这些对应的描述信息向nodeManger进行通信,让nodeManger先从hdfs上下载jar包,然后启动executor,启动好executor会对driver(driver在sparkSubmit进程中)进行反向注册,applicationMaster也会向client汇报一些执行进度信息

2.3 spark on yarn 总结:

Yarn-cluster和Yarn-client区别就是Yarn-cluster的driver是在集群节点中随机选取启动,Yarn-client的driver端是在任务提交的客户端中启动。

注意:以后工作中提交spark任务一般都使用cluster模式,但是spark-shell、spark-sql必须采用client

在client模式中,task是在driver端生成,也就是sparkSubmit进程中;

假如executor挂掉,是applicationMaster负责重新将executor拉起,重新向resourceManger申请容器,假如task失败,是driver端重新将task调度到executor中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值